일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- Firebase
- xcodecloud
- Alamofire
- SWIFT
- UI
- tuist #xcodecloud #ios #ci/cd #swiftlint #firebase
- IOS
- combine
- github
- regex
- uikit
- Tuist
- Navigation
- 정규표현식
- 개발
- iOS 13.0+
- navigationsplitview
- TCA
- xcode
- iOS 개발자
- network
- test
- 모바일
- SWIFTUI
- composablearchitecture
- ios18
- Git
- ObjC
- swiftdata
- concurrency
- Today
- Total
목록전체 글 (71)
iOS 개발 기록
PropertyWrapper Available: iOS 13.0+ Date: 2022년 12월 27일 Tags: Swift 📄 목차 PropertyWrapper 이미 정의된 property를 감싸 computed property로 만든 새로운 wrapper프로퍼티를 의미 stored property(didSet)이나 computed property(get, set)로 사용 가능 프로퍼티에 로직을 연결해 볼리어 플레이트 코드와 재사용성을 높인다. 사용법 class, struct, enum 등 프로퍼티를 가질 수 있는 타입 앞에 붙여 사용 // 기본 코드 struct Person { private var _name: String = "" var name: String { get { self._name.upp..

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..

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..
DeviceModel 체크 📄 목차 코드 func deviceModelName() -> String { // 실제 디바이스 체크 let device = UIDevice.current let selName = "_\("deviceInfo")ForKey:" let selector = NSSelectorFromString(selName) if device.responds(to: selector) { let modelName = String(describing: device.perform(selector, with: "marketing-name").takeRetainedValue()) return modelName } // 시뮬레이터 체크 if let modelName = ProcessInfo.processIn..
에러 처리 Tags: Swift 에러의 표시와 발생 Swift에서 에러는 Error 프로토콜을 준수하는 타입의 값으로 표현된다. 에러는 주로 열거형(enum)을 통해 그룹화 되어 관리된다. enum LogViewError: Error { case documentDirectoryError case notFindLogURL case lastLogNameError(logName: String) case pathToDataError case imageKeyParseError } 예상치 못한 흐름이 발생했을 때에 throw문을 통해 에러를 발생시켜 일반적인 흐름이 계속될 수 없다는 것을 알릴 수 있다. 아래 코뜨는 해당 이름의 로그가 잘못되었다는 것을 알리는 에러를 발생시킨다. throw LogViewError...

[개요] 정보가 무분별하게 퍼지는 것을 막아야 하는 경우들이 있다. 예를 들면 유료 강의나 e-book, 웹툰과 같은 앱에서 불법 복제를 막아야 할 때에 캡쳐나 화면 녹화를 제한해야 하는 경우들이 있다. 아쉽게도 화면 캡쳐의 경우 OS영역에서 이루어지는 일이기 때문에 코드만으로 방지할 수가 없다. (화면 녹화의 경우는 가능하다!, 캡쳐도 외부 솔루션을 이용하면 가능하다는데 찾아봐야겠다.) [화면 캡쳐 감지] 보통 캡쳐를 방지하고자 하는 화면에서 구현하면 되겠지만, 전역적인 부분에서 화면캡쳐를 감지하고자 한다면 SceneDelegate에서 구현하게 된다. 생각보다 매우 간단하다! HTML 삽입 미리보기할 수 없는 소스 [결과] Simulator에서 캡쳐했을 때에는 출력이 print가 출력이 안되어서 실기기..

[개요] Notification은 현재 네이티브 앱이 구현할 수 있는 매우 강력한 기능이다. 웹 앱의 큰 단점이 Notification을 상용할 수 없는 것이라 들었고, WWDC 2022에서 애플은 웹 앱에서도 Notification을 상용할 수 있도록 개선하겠다 발표했다. 그만큼 핵심적인 기능이라는 소리가 아닐까? Notification은 크게 두 종류가 있다. - 로컬 푸쉬 : 앱으로부터 push를 앱에 띄우는 것. - 서버 푸쉬 : 서버로부터 push를 앱에 띄우는 것. 이 글은 Local Push에 관한 글이다. [권한 요청] Notification이 강력한 이유는 앱이 실행되지 않거나 백그라운드 상태에 있을 때에도 관련 정보를 전달할 수 있기 때문이다. 애플은 이 기능이 사용자와의 작용에 있어 ..

iOS 앱의 라이프사이클 앱이 실행/종료 및 Foreground/Background 상태에 있을 때, 시스템이 발생시키는 Event에 의해 앱 상태가 전환되는 일련의 과정. iOS13 이후로는 Scene 기반의 UISceneDelegate를 지원하고 12이전에는 UIApplicationDelegate를 사용. Respond to Scene-Based Life-Cycle Events scene마다 별도의 Life-cycle event를 전달한다. scene는 실행중인 앱 UI 인스턴스를 의미한다. 각각의 Scene은 고유의 life-cycle을 가지므로 서로 다른 실행 상태일 수 있다. scene의 상태 변화는 다음과 같다. 1. 사용자나 시스템이 새로운 scene을 요청하면, UIKit이 새로운 scen..
개발자 채용 공고를 보면 조건 항목에 비동기 프로그래밍에 대한 이해와 경험 등 비동기 프로그래밍에 대한 내용을 쉽게 찾아볼 수 있다. 그만큼 개발자에게 중요한 항목인 것을 알 수 있는데, 오늘은 간단히 요걸 정리해보려고 한다! 동기(Sync) vs 비동기(Async) 대학생 때 팀플하던 것을 생각해보자! 일을 한명이 몰빵해서 처리할 수도 있고, 팀원들에게 각각 분배되어 진행할 수도 있다. 한 명이 몰빵해서 할 경우, 사전 조사부터 발표 자료까지 전부 만들어야 한다. 해당 일을 마치기 전에 다음 일을 시작하는 것은 몸이 여러개가 아닌 이상 불가능하다. 때문에 당연히 후자가 모두에게 좋은 효율적인 방법일것이다! 보통 작업은 태크스(Task), 작업을 처리하는 주체를 쓰레드(Thread)라 보통 표현한다. 동..

옵셔널이란 ? Swift 언어의 큰 특징으로 옵셔널을 뽑을 수 있을 것이다. 옵셔널이란 값이 없을수도 있다는 가능성을 열어두는 것으로, '?'라는 키워드로 표현하며 값이 없는 상태는 nil값을 가진다. var a: Int = nil // error var b: Int? = nil 또한 옵셔널은 옵셔널이 아닌 데이터 타입과 다르게 취급된다. 예를 들면 위의 예제 코드의 a와 b가 같은 값을 가지고 있다 하더라도 그 둘은 다른 데이터 타입을 가지게 된다. a의 경우 그냥 1이지만 b의 경우 Optional(1)로 출력한다는 것을 확인할 수 있다. b의 경우 이 변수가 언제 nil을 가지게 될 지 모르기 때문이다. 재밌게도 값은 둘다 1이기 때문에 둘을 비교했을때 같다고 출력한다. var a: Int = 1 ..