일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- SWIFTUI
- uikit
- Alamofire
- swiftdata
- 정규표현식
- composablearchitecture
- Navigation
- concurrency
- Tuist
- iOS 13.0+
- TCA
- SWIFT
- IOS
- network
- navigationsplitview
- UI
- ObjC
- test
- ios18
- 모바일
- iOS 개발자
- xcodecloud
- Firebase
- regex
- Git
- xcode
- 개발
- combine
- github
- tuist #xcodecloud #ios #ci/cd #swiftlint #firebase
- Today
- Total
목록SWIFTUI (9)
iOS 개발 기록
Fatal error: This model instance was destroyed by calling ModelContext.reset and is no longer usable. 발생 상황iPadOS18 이상으로 업데이트하니 갑자기 사이드 프로젝트 앱에서 다음과 같은 에러와 함께 강제 종료가 되기 시작했다. iOS17까지는 잘 돌아가던 코드가 18부터 오류가 발생하기 시작한 것.앱은 TCA 아키텍처 구조에서 SwiftData를 사용하고 있었다. 사용하고 있던 방법은 다음과 같다. 1. SwiftData의 데이터를 관리하고 저장소에 접근하기 위한 ModelContainer를 생성HTML 삽입미리보기할 수 없는 소스 2. 동시성 문제 없이 데이터를 관리하기 위해 ModelActor로 데이터를 관..
Composable Architecture(이하 TCA)에서 NavigationSplitView를 통해 화면전환을 주절주절 다루는 포스트입니다. iOS 17.0 이상, TCA 1.9 이상 버전을 기준으로 작성된 코드입니다. iPad나 MacOS에서 흔히 볼수 있는 네비게이션의 방법 중에, 측면에 네비게이션을 위한 분할 뷰를 열로 생성하는 위와 같은 형태가 있다. 이를 쉽게 구현할 수 있도록 SwiftUI에서 NavigationSplitView라는 API를 지원한다. NavigationSplitView는 iOS 16.0 이상부터 사용할 수 있다. 그래서 설정 앱을 기준으로 section으로 구분되는 sidebar를 가진 간단한 NavigationSplitView 화면을 구현해보았다. Tree-b..
TCA에서 사용되는 SharedState에 대한 내용입니다. 여기서는 SharedState이 무엇인지 소개하는 내용 보다도 사용하면서 조금은 편하게 쓰고자 애쓴 흔적들을 주절주절 적습니다. SharedState어느날 갑자기 TCA 제작사인 Point-Free 에서 메일이 겁나 날라왔다. TCA 새로운 에피소드, 바로 Sharing State입니다~~~ 하는 내용이었다. 예전에 Github에서 SharedState에 대한 논의가 활발히 다뤄지는 것만 봤었다. 느낌상 큰 업데이트일것 같아서 Shared-State-beta 브랜치에서 개발되고 있는 코드를 사이드 프로젝트에 미리 적용봤었었다.SharedState는 ChildFeature로 상태를 굳이 하나하나 전달하지 않아도 되는, 왕편리함 그 자체..
📄목차준비 → 카메라 및 앨범ViewModel VNImageRequestHandlerVNRecognizeTextRequestrequest 실행ViewImage PickerOCRViewCameraView 결과 Reference iOS 11부터 애플이 지원하는 Vision 이라는 프레임워크가 있다. 머신러닝 기능을 활용하여 이미지나 비디오, 얼굴이나 바코드, 텍스트 등을 인식하여 다양한 작업을 수행할 수 있도록 하는 프레임워크다.애플에서 이용해 직접 지원하다보니 빠르고 효율적이며, 무료이다…! 이를 활용하여 이미지에서 텍스트를 인식하는 OCR 기능을 사용할 수 있는데, iOS 16.0부터 드디어 지원 언어에 한국어도 포함이 되었다. 이를 통해 간단하게 이미지로부터 한국어 텍스트를 인식하는 기능을 만들어 보려..
📄목차코드@main App NotificationService 실행 결과 결론 Reference SwiftUI로 넘어오면서 AppDelegate와 SceneDelegate가 중심이 되던 앱의 라이프사이클에 변화가 생겼다. → [SwiftUI]AppDelegate, SceneDelegate 만들기Remote Push Notification의 경우 설정을 AppDelegate에서 해줘야 했는데, 이를 순수하게 SwiftUI의 라이프 사이클에 맞게 변경해보고 싶었다. 아래는 결론 도출을 위해 겪은 과정이다. FCM 을 통해 Remote Notification을 구현하려고 했는데, Firebase나 인증서와 관련된 내용은 생략하고 여기에는 앱의 코드만 작성한다.결론부터 말하자면 그런거 없다.🥲 AppDelega..
📄목차subscribe와 receivesubscribe와 receive의 정의subscribe vs receiveReference subscribe와 receive둘 다 Combine에서 Scheduler를 정하는 인스턴스 메소드이다. 그런데 테스트해보니 둘이 내뱉는 결과가 아예 달랐다. // 테스트를 위한 코드 var cancellable = Set() let publisher = [1, 2, 3].publisher publisher .map{ num in print("map: \(Thread.current)") return num } .subscribe(on: DispatchQueue.global()) .sink(receiveCompletion: { completion in print("complet..
📄목차Combine이란? 왜 Combine? Combine의 구성 요소Upstream, DownstreamPublisherSubscriberCombine이 데이터를 다루는 과정다른 비동기 처리 방법과 비교vs RxSwift vs SwiftConcurrency참고 Combine이란? 이벤트 처리 연산자들을 결합하여 비동기 이벤트들을 원하는대로 처리하기 위한 프레임워크.Publisher 프로토콜을 통해 시간의 흐름에 따른 데이터 핸들링이 가능하다. Subscriber를 통해 값을 전달 받을 수 있으며, Publisher는 Subscriber가 구독하여 값을 요청할 때에만 데이터를 방출한다. 왜 Combine? 높은 가독성 : Combine으로 선언형 프로그래밍이 가능하다.비동기 처리의 일원화 : GCD, K..
📄목차App.swiftdidFinishLaunchingWithOptionsSceneDelegate AppDelegate와 SceneDelegate 사용하기 Reference App.swiftAppDelegate와 SceneDelegateApp.swiftAPNs 나 외부 SDK를 사용할 때에 AppDelegate와 SceneDelegate가 필요할 때가 있다. 그러나 SwiftUI 프로젝트를 만들면 해당 파일들이 아니라 App.swift만 덩그러니 있는 것을 발견할 수 있다. iOS 14부터는 App 프로토콜을 통해 기본 Scene을 구축한다. 여기서 AppDelegate와 SceneDelegate의 흉내를 낼 수 있다. didFinishLaunchingWithOptionsfirebase 초기화나 oAut..
📄목차@State@Binding@ObservableObject이상한 문제 @StateObject (iOS 14.0+)@EnvironmentObjectReference @Statestruct parent: view { @State var isToggle: Bool = true var body: some View { Toggle(isOn: $isToggle) { if isToggle { Text("on") } } } }SwiftUI가 관리하는 프로퍼티 값을 읽고 쓸수 있게 하는 프로퍼티 래퍼@State로 선언된 값이 변경되면 뷰는 변경된 값으로 body를 다시 계산한다. → 뷰는 항상 최신 값을 가진다.isToggle : Bool, $isToggle: Binding 이다. → $isToggle로 받으면 Wr..