일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 13.0+
- SWIFTUI
- navigationsplitview
- xcodecloud
- iOS 개발자
- regex
- Navigation
- 모바일
- network
- xcode
- github
- 정규표현식
- SWIFT
- tuist #xcodecloud #ios #ci/cd #swiftlint #firebase
- swiftdata
- combine
- UI
- TCA
- Git
- Tuist
- test
- Alamofire
- Firebase
- composablearchitecture
- uikit
- IOS
- ios18
- 개발
- ObjC
- concurrency
- Today
- Total
목록SWIFT (17)
iOS 개발 기록
Composable Architecture(이하 TCA)에서 NavigationSplitView를 통해 화면전환을 주절주절 다루는 포스트입니다. iOS 17.0 이상, TCA 1.9 이상 버전을 기준으로 작성된 코드입니다. iPad나 MacOS에서 흔히 볼수 있는 네비게이션의 방법 중에, 측면에 네비게이션을 위한 분할 뷰를 열로 생성하는 위와 같은 형태가 있다. 이를 쉽게 구현할 수 있도록 SwiftUI에서 NavigationSplitView라는 API를 지원한다. NavigationSplitView는 iOS 16.0 이상부터 사용할 수 있다. 그래서 설정 앱을 기준으로 section으로 구분되는 sidebar를 가진 간단한 NavigationSplitView 화면을 구현해보았다. Tree-b..
정규표현식이란?특정 패턴언어 가지는 문자열의 집합을 표현하는데 사용되는 형식 언어.핸드폰번호, 이메일 등 패턴을 가진 문자열의 유효성 검증할때 핵꿀. 정규표현식 문법메타문자사실 메타문자는 봐도봐도 까먹는다... 또 까먹을것 같지만 한번 정리는 해두자 메타문자를 정규문자로 사용하고 싶으면 \를 통해 사용할 수 있다.메타문자기능예시설명.문자 일치...123 ( = abc123, def123 등)개행문자를 제외한 문자 1개와 일치+1개 이상\w+ ( = Hello 등), \d+ (= 010 등), \d+\s\d(= 010 0000등) 1개 이상의 문자 포함\w \d \s영문자, 숫자, 공백[A-Za-z0-9], [0-9], 공백문자를 의미 \W \D \S영문자, 숫자, 공백이 아님 \D+\s\D+ (= 나는..
TCA에서 사용되는 SharedState에 대한 내용입니다. 여기서는 SharedState이 무엇인지 소개하는 내용 보다도 사용하면서 조금은 편하게 쓰고자 애쓴 흔적들을 주절주절 적습니다. SharedState어느날 갑자기 TCA 제작사인 Point-Free 에서 메일이 겁나 날라왔다. TCA 새로운 에피소드, 바로 Sharing State입니다~~~ 하는 내용이었다. 예전에 Github에서 SharedState에 대한 논의가 활발히 다뤄지는 것만 봤었다. 느낌상 큰 업데이트일것 같아서 Shared-State-beta 브랜치에서 개발되고 있는 코드를 사이드 프로젝트에 미리 적용봤었었다.SharedState는 ChildFeature로 상태를 굳이 하나하나 전달하지 않아도 되는, 왕편리함 그 자체..
📄목차상황 해당 메서드 코드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..