일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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
- network
- tuist #xcodecloud #ios #ci/cd #swiftlint #firebase
- Tuist
- TCA
- Firebase
- uikit
- test
- iOS 개발자
- ObjC
- iOS 13.0+
- UI
- concurrency
- Alamofire
- SWIFT
- SWIFTUI
- combine
- Git
- xcode
- Today
- Total
목록SWIFT (14)
iOS 개발 기록
📄목차상황 해당 메서드 코드XCTestExpectationTask fulfillment사용Reference 상황 AsyncSequence를 사용한 Concurrency 메서드를 테스트하는데 테스트가 종료되지 않는 상황이 발생했다. 로그도 뜨지 않고 왜 이런 상황이 발생하는 건지 파악도 잘 안됐다. 아마 테스트를 실행하는 스레드와 비동기 작업을 수행하는 스레드가 작업을 끝냈다는 것을 서로 전달하지 않아 데드락이 걸린게 아닐까 싶었다. 찾아보니 XCTestExpectation를 사용해서 비동기 메서드를 테스트할 때에 사용하는 코드가 있길래 이걸 조금 수정해서 사용하니 다행히 잘 돌아갔다. 해당 메서드 코드import XCTest extension XCTestCase { /// Test Concurrency ..
📄목차준비 → 카메라 및 앨범ViewModel VNImageRequestHandlerVNRecognizeTextRequestrequest 실행ViewImage PickerOCRViewCameraView 결과 Reference iOS 11부터 애플이 지원하는 Vision 이라는 프레임워크가 있다. 머신러닝 기능을 활용하여 이미지나 비디오, 얼굴이나 바코드, 텍스트 등을 인식하여 다양한 작업을 수행할 수 있도록 하는 프레임워크다.애플에서 이용해 직접 지원하다보니 빠르고 효율적이며, 무료이다…! 이를 활용하여 이미지에서 텍스트를 인식하는 OCR 기능을 사용할 수 있는데, iOS 16.0부터 드디어 지원 언어에 한국어도 포함이 되었다. 이를 통해 간단하게 이미지로부터 한국어 텍스트를 인식하는 기능을 만들어 보려..
📄목차AsyncStream코드 AsyncThrowingStream 코드AsyncStream vs CombineReference SwiftConcurrency를 공부하다가 AsyncStream를 사용할만한 일이 생겨 적용하며 정리해보았다. 다음과 같이 인증 화면에서 시간을 카운트다운 하는 기능을 AsyncStream를 사용해 적용해보려고 한다. AsyncStream비동기 Iterator를 제공하는 프로토콜인 AsyncSequence를 쉽게 구현할 수 있도록 제공되는 인터페이스 AsyncSequence를 준수하기 때문에 map, filter, contains 등 익숙한 고차함수 메소드를 사용할 수 있다. 코드 @MainActor func timerStream() -> AsyncStream { return A..
📄목차Error발생 상황 원인해결Reference ErrorFailed to build module '\(SDK 이름)’; this SDK is not supported by the compiler (the SDK is built with 'Apple Swift version 5.7.1 (swiftlang-5.7.1.135.3 clang-1400.0.29.51)', while this compiler is 'Apple Swift version 5.8 (swiftlang-5.8.0.124.2 clang-1403.0.22.11.100)'). Please select a toolchain which matches the SDK. 발생 상황 iPhone의 OS를 iOS 16.4로 업데이트 했더니 Xcode에서 ..
📄목차Continuationresume CheckedContinuationUnsafeContinuation코드 결론Reference ContinuationPush를 등록을 설정하던 도중에 여러 콜백 함수로 인한 장풍이 생기고 뭔가 가독성이 거슬려서 전에 공부했던 async/await로 장풍 좀 없애고 싶다는 생각이 들었다. 요즘엔 많은 메소드들이 async/await로 구현되어서 편하게 구현하고 있어서 편하게 변환하고 있던 중 막히는 순간이 왔다. /// 막혔던 예시 var pushTokenHandler: ((String?) -> Void)? = nil func pushTokenRegister(handler: @escaping (_ fcmToken: String?) -> Void) { self.pushT..
📄목차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..
📄목차CollectionView에 Combine 적용하기 DiffableDataSource를 사용한 이유 UICollectionView CollectionView 기본 레이아웃 설정 Combine PublisherModelAPI request Publisher를 구독하고 diffableDataSource에 업데이트ViewModel CollectionView에 데이터를 적용 결과Reference CollectionView에 Combine 적용하기 RxSwift + RxCocoa 조합처럼 보통 Combine + SwiftUI 조합으로 많이 쓰인다고 한다. 그런데 회사에서는 UIKit을 사용중인데 Combine + UIKit 조합은 어떻게 사용하나 공부하다가 자주 사용하는 CollectionView에 적용해 ..
📄목차Error발생 상황 원인 질문Reference Error// 로그창 Error Domain=NSURLErrorDomain Code=-999 "cancelled"발생 상황 Combine으로 네트워크 통신을 구현해보려고 시도하다가 발생한 문제. var cancellables = Set() AnyPublisher . ( 각종 메소드 ... ) .sink ( ... ) .store(in: &cancellables) 다음과 같이 코드를 작성했는데 에러가 발생했다. 원인 sink로 구독한 후에 반환되는 AnyCancellable를 메모리에 올리지 않아 바로 구독이 해지되어 생기는 문제. → 때문에 변수로 설정한 후에 메모리에 올려야 한다. var cancellable: AnyCancellable? cancel..
📄목차Collection View UICollectionViewDelegate, UICollectionViewDataSourceModern Collection View (iOS 13.0+) UICollectionViewDiffableDataSourceUICollectionViewLayout UICollectionViewFlowLayoutUICollectionViewCompositionalLayout (iOS 13.0 +)전체 코드 Reference Collection View UICollectionViewDelegate, UICollectionViewDataSource class ViewController: UIViewController { @IBOutlet weak var collectionView: ..