일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- iOS 개발자
- SWIFTUI
- Tuist
- SWIFT
- iOS 13.0+
- Alamofire
- combine
- test
- Firebase
- network
- UI
- Git
- ObjC
- concurrency
- IOS
- uikit
- tuist #xcodecloud #ios #ci/cd #swiftlint #firebase
- xcode
- TCA
- Today
- Total
목록SwiftUI (12)
iOS 개발 기록
📄목차준비 → 카메라 및 앨범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..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/cPBdy4/btrX3ZRq7fp/Ujk3SJJG4KOXTq1gwE3f2K/img.png)
WidgetKit Date: 2022년 10월 25일 Tags: SwiftUI, WidgetKit, iOS 14.0+ 📄 목차 WidgetKit 홈 화면이나 알림센터에 배치하여 앱 정보를 표시하는 Extension 위젯은 항상 최신 상태를 유지하므로 사용자가 항상 최신 정보를 살펴볼 수 있다. Timeline Provider를 사용하여 구성하며, Timeline Provider는 WidgetKit에게 언제 컨텐츠를 업데이트 해야하는지 알려주는 역할을 한다. SwiftUI로만 사용할 수 있다. 시작하기 File - New - target 에서 Widget Extension을 추가한다. ( scheme active) 이때 IntentConfiguration을 사용하려면 Include Configuration..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/sRdU6/btrX7YRJjKg/PfeTLimXFDrhrW8jeU5B10/img.png)
UIKit에서 가져오기 Date: 2023년 1월 3일 Tags: SwiftUI, UIKit, iOS 13.0+ 📄 목차 UIViewRepresentable struct NuguView: UIViewRepresentable { // UIViewRepresentable 구성을 위한 코드 } UIView를 SwiftUI에서 사용하기 위해 지원되는 프로토콜 makeUIView(context:)와 updateUIVIew(_: context:) 메소드를 필수로 구현해야 한다. makeUIView(context:) func makeUIView(context: Context) -> NuguUIView { return nuguView } Context를 가지고 View의 초기 상태 인스턴스를 만든다. 간단하게 View..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/t7LfV/btrGKwDI2PR/2BWvfpK4smFLC5Ch6p1SXk/img.jpg)
앱을 만들면서 Text가 개행되는 것에 따라 라인을 그려줘야하는 View를 구현해야 했다. Text 한 줄의 view의 높이를 구해서 전체 View를 나누면 라인의 수가 나올거라 생각해 그 방법으로 구현하려고 했다. 그런데 SwiftUI에서는 View의 크기를 구하는게 UIKit에 비해 까다로웠다. 여기서는 SwiftUI에서 View의 크기를 구하는 두가지 방법을 소개한다. 사실 두개 다 아이디어는 똑같기는 하다. 구하고자 하는 뷰와 똑같은 크기의 하위뷰를 만들어의 하위뷰의 크기를 전달하는 것이다. 1. PreferenceKey Preference 는 Key-Value 로직으로 하위 뷰의 정보를 상위 뷰에 전달할 수 있다. 이를 위해 PreferenceKey 프로토콜을 따르는 Key를 정의해주어야 한다...
Realm은 모바일 환경을 주요 타킷으로 하는 오픈소스 데이터베이스 관리 시스템이다. 모델 구조가 객체 컨테이너로 된 NoSQL 데이터베이스를 지향하며 조금 더 직관적인 사용이 가능하고 데이터 처리 속도가 향상된 장점이 있다. 찾아보니 SwiftUI와 Combine에도 적극적으로 지원하는데 정리된 자료가 많이 없는것 같아 개인적으로 공부하며 정리해본다. Realm 의 장점 1. Swift 뿐만 아니라 JAVA, Objective-C, JavaScript, React Native 등을 지원해 크로스 플랫폼으로 DB를 공유할 수 있다. 2. SQLite, FMDB, CoreDate 등 보다 빠르다. 3. Real-Time data base sync가 가능해 Realm Studio 으로 실시간으로 데이터를 확..