묻고 답해요
141만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
해결됨iOS Clean Architecture & MVVM: RxSwift 완전 정복
강의 질문있습니다.
질문강의 중 스냅킷을 사용하여 이미지 뷰의 제약을 설정하셨는데make.leading.top.bottom.equalToSuperview().inset(20) make.width.height.equalTo(80).top과 bottom을 상위 뷰에 걸어 상대적 높이를 설정했으나, 절대적 높이 height도 별도로 걸어주신 이유가 있을까요?
-
미해결Part1: 진짜 왕초보 iOS 배우기(SwiftUI, SwiftData, 2024)
ToDo 앱 @Observable 기능(?) 질문입니다
안녕하세요 강사님 좋은 강의 잘 수강하고 있습니다!강의에서 @Observable 사용시 큰 설명 없이 넘어가셔서 개인적으로 알아보는 중입니다[SwiftUI] Observable macro를 통해 모델 데이터를 만들고 관리하는 방법 (tistory.com)[SwiftUI] iOS17 이후의 상태 관리 (velog.io)[SwiftUI] @Observable 매크로 (1) (tistory.com)Discover Observation in SwiftUI (feat. WWDC 2023) :: iOYES (tistory.com)등 위의 링크들을 살펴보았지만 초보자인 제가 이해하기엔 어려운 내용들이었습니다그래서 강사님 강의 중 SwiftUI의 Property Wrapper(@State, @Binding...)를 구입해봤지만 아쉽게도 @Observable이 아닌 구 버전의 프로퍼티 래퍼인 @ObservableObject를 설명해주시더라구요(이 부분은 아쉬웠지만 나머지 래퍼들을 공부하는 데에는 정말 좋은 강의라고 생각합니다!)일단 강의의 흐름을 보면 @State와 묶어서 설명하시길래 @State는 변수의 변화를 감지하기 위한 래퍼이고 @Observable은 class나 구조체 내 멤버 프로퍼티 값들이 변경되는 걸 감지하기 위한 래퍼라고 이해했는데 맞게 이해한 걸까요..? 답변 주시면 감사하겠습니다!!좋은 하루 보내세요!
-
미해결[iOS] Swift Modern Collection View & MVVM 패턴 가이드
다음 강의 내용 관련 문의드립니다.
안녕하세요. 강사님께 문의드릴 곳이 현재 수강중인 강의의 질문게시판밖에 없는 것 같아서 여기에 올립니다! 양해 부탁드려요 ㅜㅜ다름이 아니라, iOS Clean Architecture & MVVM: RxSwift 완전 정복 강의 내용이 Swift 6의 새로운 동시성 모델을 반영한 내용인지 궁금합니다.만약 그렇지 않다면 Swift 5.x 버전의 컴파일러를 기준으로 강의 내용을 따라가면 되는 건가요?답변 미리 감사드립니다.
-
해결됨Part2: 초중급 iOS 인스타그램 클론(SwiftUI, MVVM, Firebase, 2024)
firebase에서 데이터를 불러오는데 오류가 발생합니다.
grpc.resource_quota=0x600000cab5a0, grpc.server_uri=dns:///firestore.googleapis.com}}: connect failed (UNKNOWN:(domain:NSPOSIXErrorDomain, code:50, description:The operation couldn’t be completed. Network is down)위의 오류가 발생하는데 로그인 정보는 제대로 출력되는데 다른 부분에서 데이터를 불러오지 못하는데 어떤 부분을 수정해보면 좋을까요?
-
미해결[iOS] Swift Modern Collection View & MVVM 패턴 가이드
bind, signal, drive 사용
안녕하세요. 강의 잘 듣고 있습니다.rxsiwft를 독학 중에 UI와 관련된 driver, signal이 있다는 것도 알게 됬습니다.그런데 강의 중 bind만 사용하시는 이유가 따로 있을까요?또한 실무에서 어떤 방식을 주로 사용하는지 알고 싶습니다.
-
해결됨Part2: 초중급 iOS 인스타그램 클론(SwiftUI, MVVM, Firebase, 2024)
Xcode16 업데이트 후 앱이 죽는 이슈
안녕하세요. 에구마님올려주신 강의를 다 듣고,완성된 코드 기준으로이번에 Xcode16으로 업데이트 한 후로 로그인 후에 앱이 죽는 문제가 발생하는데,이에 대한 해결책이 있을까요?
-
해결됨[Lv.2] 레벨업 - SwiftUI intermediate with Core Data, SwiftData
Apple 공식 문서 보는법
안녕하세요 좋은 강의 잘 듣고 있습니다.다름이 아니라 혹시 애플 공식 문서보는 강사님만의 꿀팁 같은게 있을까요?공식문서를 찾아볼 수 있긴 한데 찾고자 하는걸 정확하게 검색해야 결과를 얻을 수 있고 뭔가 보기가 어렵게 되어 있는 것 같아서요...그리고 제가 원하는 기능을 구현하려면 물론 구글링도 있지만 공식문서를 최대한 참고해서 구현 방법을 익히고 싶은데 이런 것들은 공식 문서에서 어떻게 검색해야 하나요?예를 들어 SwiftUI에서 반복문으로 이루어진 텍스트들을 한번에 지우는 기능을 구현하고 싶은데 이에 연관된 것들을 공식 문서에서 쉽게 찾는 방법 등을 알고 싶습니다.감사합니다.
-
해결됨Part2: 초중급 iOS 인스타그램 클론(SwiftUI, MVVM, Firebase, 2024)
프로필 편집 앱을 끄면 사진이 유지가 되지 않아요.
FeedView만들기 전 단계, 리팩토링하기 전단계까지 모두 동일하게 코드를 작성하고, 틀린부분 있는지 빠트린 부분 있는지 확인을 다했는데요. 프로필 편집 사진과 네임, 유저네임, 소개 모두 다 시뮬레이터 홈버튼 더블클릭 후 밀어내기해서 끄고, cmd + R이나 시뮬레잍터 상의 앱을 클릭해서 키면 모든게 리셋되네요. 그런데 로그아웃 후 재로그인하면 또 사진과 네임, 유저네임, 소개가 제대로 뜹니다. 어디 부분이 문제가 있는걸까요??
-
미해결Flutter 초입문 왕초보편
dispose 오버라이드 메소드 자동완성이 안 됩니다.
dispose 오버라이드 메소드 자동완성이 안 됩니다. 다른 자동완성은 다 제대로 작동하는데 오버라이드 메소드 자동완성이 안되네요 gpt가 하라는대로 해봤는데도 안 됩니다 어떻게 해야 할까요? 저는 현재 플러터 가장 최신 버전을 사용하고 있습니다.
-
해결됨Part1: 진짜 왕초보 iOS 배우기(SwiftUI, SwiftData, 2024)
Todo 앱 @Observable 질문입니다
안녕하세요 @Observable 이 부분에서 에러가 발생해서 질문드립니다현재 맥북 버전은 Sequoia 15.0이며 Xcode 버전은 16.0을 사용 중입니다 Observable()' is only available in iOS 17.0 or newer라는 에러가 발생한 상황입니다 구글링을 해도 해결방법을 찾지 못해서 질문드립니다..! 그리고 추가적으로 Xcode 16으로 업뎃 후 프리뷰 화면 보여주는 단축키인 cmd+option+enter를 아무리 눌러도 프리뷰가 xcode에서 보이지 않는 상황입니다.. 마지막으로 제가 질문드렸던 다른 게시글인데 확인 한 번 부탁드리겠습니다VStack, HStack으로 뷰 구성하기 강의 padding 질... - 인프런 | 커뮤니티 질문&답변 (inflearn.com)답변 주시면 감사하겠습니다!
-
미해결앱 개발 기초부터 실전까지 하나로 끝내는 Swift & iOS 마스터 클래스
파라미터와 아규먼트 혼동
안녕하세요! 좋은 강의 잘 수강하고 있습니다.[계산기 #6 - 경고! 값을 입력하세요!] 강의에서19분 4초에 함수 호출 방법 설명이 나와있는데 함수 정의에 parameter라고 하고,함수 호출시에는 argument라고 하는 걸로 알고 있습니다. 잘못 표기된 걸까요..?아규먼트 레이블 같은 개념과도 혼동될수 있을 것 같아서요
-
미해결성공적인 진짜 iOS 개발자 되기 [기초부터 실무까지]
에러 질문 [UITextField setDataSource:]: unrecognized selector sent to instance 0x107079600"
강의 수강 중 35분 정도까지 따라한 뒤 실행했는데, 다음 에러가 발생했는데 이유를 잘 모르겠습니다. 다음처럼 에러가 발생하였는데요. 에러 내용과 작성한 코드들 첨부드립니다. Exception NSException * "-[UITextField setDataSource:]: unrecognized selector sent to instance 0x107079600" 0x0000600000c9d170 에러 전체 내용 *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[UITextField setDataSource:]: unrecognized selector sent to instance 0x107079600' *** First throw call stack: ( 0 CoreFoundation 0x00000001804b70ec __exceptionPreprocess + 172 1 libobjc.A.dylib 0x000000018008ede8 objc_exception_throw + 72 2 CoreFoundation 0x00000001804ccc54 +[NSObject(NSObject) instanceMethodSignatureForSelector:] + 0 3 UIKitCore 0x0000000185ace7a8 -[UIResponder doesNotRecognizeSelector:] + 232 4 CoreFoundation 0x00000001804bb3ec ___forwarding___ + 1268 5 CoreFoundation 0x00000001804bdb0c _CF_forwarding_prep_0 + 92 6 CurrencyConverterApp.debug.dylib 0x000000010508d1ec $s20CurrencyConverterApp20PickerViewControllerC11viewDidLoadyyF + 648 7 CurrencyConverterApp.debug.dylib 0x000000010508d270 $s20CurrencyConverterApp20PickerViewControllerC11viewDidLoadyyFTo + 36 8 UIKitCore 0x000000018533369c -[UIViewController _sendViewDidLoadWithAppearanceProxyObjectTaggingEnabled] + 80 9 UIKitCore 0x0000000185338238 -[UIViewController loadViewIfRequired] + 908 10 UIKitCore 0x000000018529db34 -[UINavigationController _ensureToViewControllersViewIsLoaded:] + 84 11 UIKitCore 0x000000018529df70 -[UINavigationController transitionConductor:willTransitionFromViewController:toViewController:] + 184 12 UIKitCore 0x0000000185c35c70 -[_UIViewControllerTransitionConductor startDeferredTransitionIfNeeded] + 452 13 UIKitCore 0x00000001852951a4 -[UINavigationController __viewWillLayoutSubviews] + 80 14 UIKitCore 0x000000018527cf58 -[UILayoutContainerView layoutSubviews] + 168 15 UIKitCore 0x000000018601c0c4 -[UIView(CALayerDelegate) layoutSublayersOfLayer:] + 2404 16 QuartzCore 0x000000018b06ceb0 _ZN2CA5Layer16layout_if_neededEPNS_11TransactionE + 432 17 QuartzCore 0x000000018b077c34 _ZN2CA5Layer28layout_and_display_if_neededEPNS_11TransactionE + 124 18 QuartzCore 0x000000018afacc58 _ZN2CA7Context18commit_transactionEPNS_11TransactionEdPd + 464 19 QuartzCore 0x000000018afdb468 _ZN2CA11Transaction6commitEv + 652 20 UIKitCore 0x0000000185abb7b4 __34-[UIApplication _firstCommitBlock]_block_invoke_2 + 32 21 CoreFoundation 0x000000018041b0ec __CFRUNLOOP_IS_CALLING_OUT_TO_A_BLOCK__ + 20 22 CoreFoundation 0x000000018041a824 __CFRunLoopDoBlocks + 352 23 CoreFoundation 0x00000001804150c8 __CFRunLoopRun + 812 24 CoreFoundation 0x0000000180414960 CFRunLoopRunSpecific + 536 25 GraphicsServices 0x0000000190183b10 GSEventRunModal + 160 26 UIKitCore 0x0000000185aa2b40 -[UIApplication _run] + 796 27 UIKitCore 0x0000000185aa6d38 UIApplicationMain + 124 28 UIKitCore 0x0000000184e9a184 block_destroy_helper.22 + 9660 29 CurrencyConverterApp.debug.dylib 0x000000010508820c $sSo21UIApplicationDelegateP5UIKitE4mainyyFZ + 120 30 CurrencyConverterApp.debug.dylib 0x0000000105088184 $s20CurrencyConverterApp0C8DelegateC5$mainyyFZ + 44 31 CurrencyConverterApp.debug.dylib 0x0000000105088288 __debug_main_executable_dylib_entry_point + 28 32 dyld 0x00000001050dd410 start_sim + 20 33 ??? 0x0000000104e1e274 0x0 + 4376879732 ) libc++abi: terminating due to uncaught exception of type NSException AppDelegate.swift// // AppDelegate.swift // CurrencyConverterApp // // Created by hojeongpark on 9/24/24. // import UIKit @main class AppDelegate: UIResponder, UIApplicationDelegate { func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool { // Override point for customization after application launch. return true } // MARK: UISceneSession Lifecycle func application(_ application: UIApplication, configurationForConnecting connectingSceneSession: UISceneSession, options: UIScene.ConnectionOptions) -> UISceneConfiguration { // Called when a new scene session is being created. // Use this method to select a configuration to create the new scene with. return UISceneConfiguration(name: "Default Configuration", sessionRole: connectingSceneSession.role) } func application(_ application: UIApplication, didDiscardSceneSessions sceneSessions: Set<UISceneSession>) { // Called when the user discards a scene session. // If any sessions were discarded while the application was not running, this will be called shortly after application:didFinishLaunchingWithOptions. // Use this method to release any resources that were specific to the discarded scenes, as they will not return. } } PickerViewController.swift// // ViewController.swift // CurrencyConverterApp // // Created by hojeongpark on 9/24/24. // import UIKit class PickerViewController: UIViewController { var rates: [(String, Double)]? @IBOutlet weak var currencyPicker: UIPickerView! override func viewDidLoad() { super.viewDidLoad() self.navigationItem.title = "Currency List" currencyPicker.delegate = self currencyPicker.dataSource = self fetchJson() } func fetchJson() { let urlString = "https://open.er-api.com/v6/latest/USD" guard let url = URL(string: urlString) else { return } print("fetchJson") // data task URLSession.shared.dataTask(with: url) { data, response, error in guard let data = data else { return } do { let currencyModel = try JSONDecoder().decode(CurrencyModel.self, from: data) self.rates = currencyModel.rates?.sorted{ $0.key < $1.key } // 피커 새로고침 해야 데이터 내용이 보입니다. DispatchQueue.main.async { self.currencyPicker.reloadAllComponents() } print("currencyModel", currencyModel) }catch{ print("error", error) } }.resume() } } extension PickerViewController: UIPickerViewDelegate, UIPickerViewDataSource { func numberOfComponents(in pickerView: UIPickerView) -> Int { return 1 } func pickerView(_ pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int { return rates?.count ?? 0 } func pickerView(_ pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? { return rates?[row].0 } }
-
미해결[iOS] Swift Modern Collection View & MVVM 패턴 가이드
강의 시작 전 문의드립니다.
안녕하세요.강의 결제 후 아직 시작 전인데 강의 프로젝트를 클론 코딩한 것을 포트폴리오 제출 시 공부한 내용들을 기록 및 보여주기 위해 깃허브에 공개용으로 업로드하려고 하는데 그렇게 해도 괜찮을까요? 출처는 현재 강의를 남기려고 합니다.
-
미해결성공적인 진짜 iOS 개발자 되기 [기초부터 실무까지]
Main interface 지정 방법
안녕하세요. 강의 중에 설명해주시는 내용 중 Development info > Main interface 설정하는 부분이 안보여서 질문드립니다. 최신 xcode, mac 버전을 사용하고 있어 업데이트가 된 거 같은데 어디에서 설정할 수 있을까요? 강의 중 화면 제 화면.
-
해결됨Part2: 초중급 iOS 인스타그램 클론(SwiftUI, MVVM, Firebase, 2024)
Xcode 관련 질문 할 곳이없어 여기에 질문올려요
2024년 9월 20일경 업데이트 있어서 했더니 이상하게 새 프로젝트부터는 네비게이션창의 파일들이 드래그 엔 드롭이 안됩니다.ㅠㅠ 파일이 폴더를 오고가긴해도 기존버전처럼 파일 순서를 의지대로 변경 못하고, 알파벳 순으로 고정되네요. 찾아서 자동정렬 같은걸 비활성화 하는걸 해보려고해도 찾질 못해서 질문드려요.
-
해결됨Part2: 초중급 iOS 인스타그램 클론(SwiftUI, MVVM, Firebase, 2024)
navigationBarTitle에 대해 (질문X, 공유O)
안녕하세요.먼저, macOS를 Sequoia로 업데이트 하면서 Xcode도 15에서 16으로 업데이트 했습니다.강의 6분 50초 정도부터 navigationTitle 관련된 코드 작성을 해주시는데 이전 OS나 Xcode15에서는 강의 내용대로 작성하면 제대로 되었던게 업데이트를 하고나니 안되더라구요.찾아보니 Xcode 16에서는 내비게이션 타이틀과 툴바의 상호작용이 일부 변경되었다고 합니다.하단에 .navigationBarTitleDisplayMode(.inline)을 추가하니 강의 내용과 동일하게 나타났습니다. 코드는 아래에 첨부하겠습니다..navigationTitle("프로필 편집") .navigationBarTitleDisplayMode(.inline) .navigationBarBackButtonHidden() .toolbar { ToolbarItem(placement: .topBarLeading) { Button { dismiss() } label: { Image(systemName: "arrow.backward") .tint(.black) } } }게시판 내용과 어긋나거나 잘못된 정보면 말씀해 주세요.감사합니다.
-
미해결해커를 위한 iOS 앱 모의 해킹 전문 과정
frida-ios-dump 시 오류 발생
안녕하세요, 우선 좋은 강의 제공에 감사드립니다.상세한 설명과 자세하게 보여주시는 실습 단계 덕분에 도움이 많이 되고 있습니다. 다름이 아니라, Fairplay DRM 복호화 단계 중 아래처럼 오류가 발생하는데 해결이 되지 않아 문의드립니다.(가린 부분은 가상환경 이름과, 파일 경로, 진단대상입니다)해당 오류를 해결하기 위해 Frida 버전 업그레이드, 재탈옥 후 프리다 서버 재설치, 프리다 서버 버전과 클라이언트 버전 동일한지 확인, iOS 버전보다 높은 Frida 버전인지 확인을 모두 진행했으나 동일한 오류가 발생합니다.추가적으로 대상 프로세스가 ASLR을 사용한다면 프로세스 덤프 시 문제가 있을 수도 있다고 하여 확인해보려고 했으나 동일한 오류가 발생합니다.혹시 추가적으로 해볼 조치나 짚이시는 문제점이 있을지 여쭤봅니다. 감사합니다.
-
미해결앨런 iOS 앱 개발 (15개의 앱을 만들면서 근본원리부터 배우는 UIKit) - MVVM까지
(기초-3)가위바위보 앱 만들기 - 기초 앱 강의 12강 질문입니다!
Build 시 계속 위의 에러가 납니다. 그런데 Allen 님께 다운 로드 받은 파일을 해보면 문제가 없습니다. 부탁 드립니다.
-
미해결성공적인 진짜 iOS 개발자 되기 [기초부터 실무까지]
Closure_3 Capture List에 참조 타입 값을 작성할 경우에도 deinit 실행되는 이유가 뭘까요?
import UIKit class TestClass {} class SomeClass { var a = 10 var b = TestClass() func myFunc() { print(self.a) } lazy var myClosure1: (()->Void)? = { () -> Void in print(self.a) } lazy var myClosure2 = { [a] () -> Void in print(a) } lazy var myClosure3 = { [b] in print(b) } deinit { print("SomeClass deinit") } } var myClass1: SomeClass? = SomeClass() var myClass2 = myClass1 var myClass3 = myClass1 var myClass4 = myClass1 myClass1?.myClosure1 myClass1?.myClosure1 = nil myClass1?.myClosure2 myClass1?.myClosure3 myClass1 = nil myClass2 = nil myClass3 = nil myClass4 = nil위 코드에서 myClusore3 의 캡쳐 리스트엔 b를 작성했고, b는 클래스의 인스턴스로 참조타입으로 알고 있습니다.이 때 위 코드를 실행하면 deinit이 실행되는데요. weak 키워드를 사용하지 않았는데도 deinit이 실행되는 이유가 있을까요?
-
해결됨Part1: 진짜 왕초보 iOS 배우기(SwiftUI, SwiftData, 2024)
VStack, HStack으로 뷰 구성하기 강의 padding 질문입니다
안녕하세요 강의 수강 중 이해가 안되는 부분이 있어서 질문 드립니다 import SwiftUI struct ContentView: View { var body: some View { VStack{ HStack{ Image("dogProfile") .resizable() .frame(width: 120, height: 120) .clipShape(Circle()) .overlay( Circle() .stroke(Color.teal, lineWidth: 3) ) VStack(alignment: .leading){ Text("이름: 키도") Text("시바견") Text("2017년 5월생") } // VStack 안에 있는 뷰에 모디파어어를 일괄 적용하고 싶을 경우 이런 식으로 구성할 수 있다(일괄 적용이라는 표현보단 Vstack 자체에 모디파이어를 적용했다는 표현이 더 옳을지도? .font(.system(size: 20)) // 정보 글의 폰트 사이즈 .padding(.leading, 20) // 그림과 정보 글 사이의 공백 } .padding(.bottom, 20) VStack(alignment: .leading, spacing: 10){ Text("좋아하는 것") .font(.system(size: 20)) .bold() Divider() // 좋아하는 것 밑에 있는 선을 그려주는 함수 Text("- 각종 고기(🐮 = 🐷 = 🐔 > 🐟)") Text("- 장본 게 담겨 있는 종량제 봉투") Text("- 집에 새로 온 사람") } .padding() .background( RoundedRectangle(cornerRadius: 15) .fill(.mint) .opacity(0.2) // 색의 투명도를 지정하는 모디파이어 0이면 완전 투명 .shadow(radius: 5) ) VStack(alignment: .leading, spacing: 10){ Text("스킬") .font(.system(size: 20)) .bold() Divider() // 좋아하는 것 밑에 있는 선을 그려주는 함수 HStack(alignment: .top, spacing: 30){ VStack(alignment: .leading, spacing: 10){ Text("- 앉아") Text("- 엎드려(앉아와 자주 혼동함)") Text("- 하우스(집으로 들어가기)") } VStack(alignment: .leading, spacing: 10){ Text("- 손") Text("- 코") } } } .padding() .background( RoundedRectangle(cornerRadius: 15) .fill(.pink) .opacity(0.2) // 색의 투명도를 지정하는 모디파이어 0이면 완전 투명 .shadow(radius: 5) ) } .padding() // 질문인 부분 } struct ContentView_Previews: PreviewProvider { static var previews: some View { ContentView() } } }위 코드 맨 마지막 padding을 보면 가장 처음 사용하는 VStack에 .padding을 적용하는 코드입니다 궁금한 건 저 padding의 값을 50, 100 이렇게 설정해도 Vstack의 위 아래 여백은 변하지 않는다는 점입니다. 분명 .padding에 값을 넣어주지 않으면 기본적으로 상하좌우 모든 부분에 여백을 주는 걸로 알고 있는데 만 상하 부분의 여백이 변하지 않는 것을 확인했습니다. 개인적으로 여백을 넓게 잡으면 여백을 잡기 위해 글자나 사진 사이즈 등이 뭉개지는 현상이 발생할 줄 알았는데 좌우는 뭉개지는 데 상하는 뭉개지지 않더라구요 Vstack이 기본적으로 가지고 있는 공간이 있는 최소한의 건지... 혹시 뭉개지지 않는 이유를 알 수 있을까요?? 그리고 혹시 // VStack 안에 있는 뷰에 모디파어어를 일괄 적용하고 싶을 경우 이런 식으로 구성할 수 있다(일괄 적용이라는 표현보단 Vstack 자체에 모디파이어를 적용했다는 표현이 더 옳을지도? 이 주석 제가 맞게 이해한 건지도 알려주시면 정말 감사하겠습니다..! 좋은 하루 보내세요! 감사합니다!