개발/Swift
-
Compositional Layout+ Diffable Datasource 활용 가이드개발/Swift 2024. 8. 27. 18:33
Section 영역 은 3가지 타입이며enum 내부에서 각각 레이아웃을 들고 있도록 하여 viewcontroller의 복잡도를 낮추었다.public enum FAQSection: Hashable { case tag case faq case bottomGuide public var layoutSize: NSCollectionLayoutSection { switch self { case .tag: let itemSize = NSCollectionLayoutSize(widthDimension: .estimated(50), heightDimension: .a..
-
[Error] suspend resume partial function for XXX개발/Swift 2024. 8. 20. 14:39
“suspend resume partial function for 함수명”라는 에러 발생 원인 파악 public func isFeatureEnabled(_ featureToggle: FeatureToggles) -> Bool { return featureToggles[featureToggle.value.key] }let keyword is a constant and, therefore, read-only and thread-safe. When a variable is declared as var it becomes mutable and not thread-safe unless the data type is specifically designed to be thread-sa..
-
[Error] navigationbar subview 레이아웃 에러개발/Swift 2024. 8. 20. 12:09
A multiplier of 0 or a nil second item together with a location for the first attribute creates an illegal constraint of a location equal to a constant. Location attributes must be specified in pairs라는 에러가 발생해당 에러는 레이아웃을 잡을떄 second view 가 없거나 할떄 일어나는 문제상황레이아웃 부분showMapToolTip.snp.makeConstraints { make in make.top.equalTo(30) make.trailing.equalTo(-12)}해당 view는 네비게이션 바 에 추가된 view이다view가 아니..
-
[Swift] CoreData 사용해보기: CRUD 구현 가이드개발/Swift 2024. 5. 18. 13:50
문제- API 네트워킹시 네트워크 문제가 있을경우 내부저장 데이터를 리턴해주는 로직 필요.- CoreData는 내부데이터 이므로 Repository 에서 접근 하는게 맞다고 판단 했다.근데 CoreData는 Appdelegate의 persistentContainer.viewContext 에 접근 해야함Repository -> CoreData -> Appdelegate이는 클린 아키텍쳐 구성상 의존성의 방향이 잘못되었다 생각 해결- CoreData 를 사용해서 데이터를 저장 & 사용- Repository 생성시 viewContext를 주입받아 사용Coordinator 패턴이나 의존성 주입 하는 부분에서 해주면 좋을것 같다. let appDelegate = UIApplication.shared...
-
[Swift] Tab bar 와 Page view를 동시에 사용할때개발/Swift 2024. 5. 18. 13:40
문제Tab bar 와 UIPageViewController스와이핑이 가능하면서 동시에 탭바 선택으로 ViewController를 움직이고 싶을때TabbarController 와 UIPageViewController 동시에 사용 할 경우 생각보다 예시가 많이 없고 정상 동작 하지 않았다.TabbarController 는 또한 UI 커스텀이 쉽지 않았다. 해결UIPageViewController 를 사용하여 페이지 관리 를 하고 ( 스와이프 가능 )Tab Bar UI는 직접 커스텀하게 구현 구현- TabBar 에서는 Rx 사용하여 클릭 이벤트 전달함 UIPageViewController 설정private lazy var pageViewController = { let pageViewController..
-
iOS 앱 자동화 Fastlane Fastfile 작성 Cheatsheet개발/Swift 2024. 4. 29. 17:30
프롬프트 활용 input 값 받아 사용하기ex> 출시노트에 사용될 텍스트 or 테스터 이메일 받아오기 title = prompt(text: "출시 노트를 작성해 주세요\\n 개요: ") show_update_popup = prompt(text: "업데이트 팝업 노출 여부: ", boolean: true) description = prompt(text: "변경사항: ", multi_line_end_keyword: "END") testers = prompt(text: "테스터 이메일 입력: ", multi_line_end_keyword: "END")터미널에서 바로 입력하여 값 받아오기 lane :beta_release do |options| version = options[:v..
-
Swift 딥링크 처리- AppDelegate와 SceneDelegate개발/Swift 2024. 4. 12. 00:03
딥링크는 앱 외부에서 특정 화면으로 이동할 수 있도록 도와주는 중요한 기능이다. AppDelegate와 SceneDelegate에서 딥링크를 처리하는 방식 정리 딥 링크 구조APPSCHEME://PATH1/PATH2?QUERYPARAMETER... 딥링크를 처리 하는 로직은 AppDelegate , SceneDelegate 에서 받아 처리 한다.DynamicLink 를 사용 한다면 FirebaseDynamicLinks 기능 사용 하여 URL 처리 가능함푸시 알람 + 딥링크 라면 userNotificationCenter 함수에서 처리SceneDelegate - func scene(_ scene: UIScene, openURLContexts URLContexts: Set)url 열때 호출됨 func..
-
Xcode Instrument 톺아보기개발/Swift 2024. 4. 11. 23:53
Animation Hitches 스크롤할때 애니매이션이나 트랜지션이 끊기는 현상을 힛치라고함 렌더 루프를 통해 계속해서 Frame이 만들어지는데 렌더루프가 늦어져서 다음 Frame이 늦어지면 힛치가 발생 렌더루프는 이벤트 처리, UI렌더링, 프레임이 노출 되는 과정을 포함함 녹화 후 앱을 실행하고 녹화 종료 하면 Hitch duration 133, Acceptable latency 33 여기서 Expensive commit 이라는게 발생함 commit은 버튼을 탭 > 뷰 UI 내부적으로 계산하여 업데이트 > 업데이트된 layer tree를 GPU에게 제출 하는 것을 말함 Expensive commit 이 앱에서 발생함을 확인 아래로 내려 메인스레드 타고 들어가 어디서 발생했는지 볼수 있음 Leak xco..