Stand alone으로 돌아가는 앱도 있겠지만, 우리가 사용하는 많은 앱들은 서버와 통신을 주고받으면서 동작을 합니다. 서버와 데이터를 주고받을 때 주로 JSON 데이터를 사용하는데요. 이 JSON을 다룰 때 매우 유용한 게 Codable(Encodable, Decodable), CodingKey 입니다. Codable 공식문서를 먼저 보면, Codable은 Encodable, Decodable를 typealias를 한 것이며, type 혹은 제네릭 제약으로 Codable을 사용한다면 Encodable, Decodable 프로토콜을 모두 준수하게 된다.라고 되어있습니다. Encodable은 자신을 외부 표현으로 인코딩할 수 있는 형식이라고 되어 있는데, 이는 앱 내 데이터 모델을 JSON 데이터로 변환..
SwiftUI가 나온 지 3년 정도 되었고, 최근 WWDC2022에서는 MacOS에서도 자연스럽게 쓰이며 모든 애플 플랫폼을 커버할 수 있을 만큼 발전해왔습니다. 최근에는 SwiftUI전용 Charts프레임워크도 발표했고, 점차 실무 앱 개발에서도 도입해도 될 만큼 변화해가고 있는데요. 아직은 SwiftUI보다는 스토리보드를 많이 사용하고 있고, 스토리보드에서도 SwiftUI처럼 실시간(?)으로 코드 구현부를 스토리보드에 반영할 수 있는 방법이 있어 이를 정리해보는 포스팅을 작성해봅니다(스토리보드야 파이팅). 바로 @IBInspectable, @IBDesignable인데요. 이 Attribute들을 사용하지 않고 스토리보드를 작성했을 때 문제점이 발생합니다. 스토리보드에서는 View들의 디테일한 부분까지..
대한민국에서 배포되는 앱에 관한 업데이트 - 최신 뉴스 - Apple Developer Apple이 설계한 App Store는 사람들이 앱을 발견하고 다운로드할 수 있는 안전하고 신뢰할 수 있는 공간입니다. Apple의 앱 내 구입 시스템은 Apple의 세계적인 상거래 플랫폼의 핵심 부분으로서, 모든 developer.apple.com 전기통신사업법 개정안(인앱결제 강제금지법)에 따라 '대한민국에서만' 배포되는 앱에 한해서 개발자가 StoreKit External Purchase Entitlement를 사용하면 대체 앱내 결제 처리 옵션을 제공할 수 있게 됩니다. 해당 옵션을 사용하려면 아래 링크에서 자격 요청 양식을 애플에 제출해야 합니다. (https://developer.apple.com/conta..
WWDC22(Platforms State of the Union)에서 기타 변경점을 정리해봅니다. 개별 세션 및 Release Note의 내용을 참조한 내용들도 있으며, 글은 계속 수정될 수 있습니다. Pasteboard Behavior 변경 iOS14, 15에서는 다른 앱에서 복사한 것을 붙여넣기 할 때 상단에 배너로 표시하고 사라졌는데요. iOS16에서는 붙여넣기 할 때 확인을 위한 경고창을 표시하도록 변경되었습니다. 권한요청 경고창처럼 1회성으로 뜨는 것이 아닌, 붙여넣기를 할 때마다 보여집니다. (개인정보를 남용하는 앱들로부터 사용자를 보호하고자 하는 애플의 마음은 이해가 되지만, 활용하는 앱에서 따라서는 사용자 경험이 불편해질 수도 있겠다는 걱정이 조금 드네요) iPadOS DriverKit M..
WWDC22(Platforms State of the Union)에서 Xcode14의 변경점을 정리해봅니다. 개별 세션 및 Release Note의 내용을 참조한 내용들도 있으며, 글은 계속 수정될 수 있습니다. Deprecations MacOS 앱 및 Mac Catalyst로 구축된 앱에 대해 작성된 위젯 미리보기 지원이 제거되었습니다. → macOS WidgetKit Simulator를 사용하면 됩니다. Xcode Server는 더이상 지원하지 않습니다. [UIViewController shouldAutorotate]가 더이상 지원하지 않습니다. [UIViewController attemptRotationToDeviceOrientation]도 더이상 사용되지 않으며 [UIViewController ..
WWDC22에서 App Store Connect의 변경점을 정리해봅니다. 여러 항목을 하나의 제출로 그룹화 (이 내용은 실제 앱스토어 커넥트에서 변경된 사항을 직접봐야 감이 올거 같네요) 여러 Review item을 하나의 제출로 그룹화할 수 있게 되었습니다. Review item의 수나 유형에 상관없이 24시간 내에 검토가 됩니다. 심사 후 Review item은 승인(Accept)되거나 거부(Reject)되는데, 제출한 모든 Review item이 승인이 될 때까지 Review submission이 승인되지 않습니다. 거부된 Review item을 심사 제출하기 위한 2가지 방법이 있습니다. 첫번째는 거부된 Review item을 수정한 뒤 다시 심사 제출을 하는 방법입니다. 두번째 방법은 거부된 i..
WWDC22(Platforms State of the Union)에서 추가된 App Intents, Passkey의 내용을 정리해봅니다. 개별 세션의 내용을 참조한 내용들도 있으며, 글은 계속 수정될 수 있습니다. App Intents Framework 앱의 기능을 시스템에서 사용가능하게 해서 사용자가 Siri와 단축어로 앱을 자동화하여 사용할 수 있게 해줍니다. 사용자가 사용자화 단축어로 앱들의 기능들을 재조합할 수 있게 해줍니다. 기존엔 사용자가 직접 단축어를 시리에 추가해야 사용할 수 있었지만, iOS16에서는 App Intents Framework로 이를 자동화시켰습니다. App Intents가 단축어와 합쳐져 App 단축어가 됨. 사용자가 별도 설정없이 Siri에서 사용 가능. Siri뿐만 아니..
WWDC22(Platforms State of the Union)에서 Swift의 변경점을 정리해봅니다. 개별 세션의 내용을 참조한 내용들도 있으며, 글은 계속 수정될 수 있습니다. WidgetKit WatchOS용 앱에서 사용하던 WidgetKit을 이제 iOS의 잠금화면용 Widget에서도 사용할 수 있게 되었습니다. 애플워치의 Complication을 iOS로 확장시켰습니다. 모든 위젯은 iOS, WatchOS에서 모두 작동. 기존 WatchOS용 WidgetKit을 그대로 사용할 수 있습니다. 플랫폼의 차이를 자동으로 관리합니다. 잠금화면의 위젯색상을 조정해서 가독성을 높였습니다. 기존 WatchOS에서 사용했던 것처럼 3가지 타입이 있습니다. Circular, Retanglar, Inline. ..
WWDC22(Platforms State of the Union)에서 SwiftUI의 변경점을 정리해봅니다. 개별 세션의 내용을 참조한 내용들도 있으며, 글은 계속 수정될 수 있습니다. Navigation Stack 새 내비게이션 API. 가장 알맞은 네비게이션 스타일을 쉽게 표현하게 해줍니다. 선택사항을 쉽게 저장하고 복구할 수 있고, 네비게이션 스택의 내용 전체를 대체할 수도 있습니다. 이 기능으로 인해 앱 실행단계 설정, 사이즈 클래스간의 전환 관리, 딥링크 응답 같은 동작을 쉽게 처리가 가능합니다. NavigationSplitView 선택사항을 추적하는 Sidebar, NavigationStack이 포함된 뷰입니다. Sidebar 선택사항이 변경되면 콘텐츠도 변경시켜 줍니다. Scene API 맥..
WWDC22(Platforms State of the Union)에서 Swift의 변경점을 정리해봅니다. 개별 세션의 내용을 참조한 내용들도 있으며, 글은 계속 수정될 수 있습니다. Async Algorithm Package await 키워드: 두 비동기 시퀸스를 zip으로 묶는 작업이 가능하게 해줍니다. try-catch: 네트워크 스트리밍되는 비동기 데이터로 인한 네트워크 장애를 처리할 수 있게 해줍니다. throttle 키워드: 새로 추가된 키워드. 시퀸스로부터의 업데이트를 늦춰주는 시간 기반 알고리즘을 제공. (기존) actor : 스레드로부터 안전한 동시성 실행 코드를 사용해 데이터를 격리하게 해줍니다. Swift는 의도치않게 병렬 스레드 간에 그런 상태를 공유하는 것을 막아줍니다. async/..
iOS의 앱에서 타 앱을 호출하는 방법으로 URLScheme(이하 scheme, 혹은 스키마)가 있습니다. 앱에서는 project파일의 target->Info 에서 URL Types 를 설정하여 외부에서 앱을 호출할 수 있는 스키마를 설정해줄 수 있습니다. +버튼을 누르면 여러개를 설정할 수도 있고, 어떤 스키마로 호출되는지에 따라 다른 동작을 하도록 구현할 수 있게 됩니다. (하나의 스키마로도 추가로 프로퍼티를 받아서 동작에 분기를 시킬 수 있기 때문에 가급적 하나의 스키마로 처리하는게 더 좋습니다) 그러면 외부 앱에서 해당앱을 호출할 수 있게 되는데요. 호출하는 쪽에서는 앱의 Info.plist에 LSApplicationQueriesSchemes (Array)항목에 호출할 앱의 스키마를 작성해줍니다...
joined 함수를 정리해봅니다. 시퀸스가 들어있는 배열일 때, 하나의 시퀸스로 이어주는 함수입니다. String도 Charactor의 시퀸스라고 볼 수 있고, 정수 배열 해당이 됩니다. String일 때와 그 이외의 배열일 때가 약간 다릅니다. String 배열의 joined String의 배열의 joined 함수의 정의는 아래와 같습니다. 매개변수로 seperator가 있고 생략했을 때는 ""가 기본으로 적용됩니다. String의 배열에 joined를 적용하면 아래처럼 이어집니다. let someAlmonds = ["HoneyButter", "Wasabi", "Corn", "Buldak", "MintChoco"] let joinedAlmonds = someAlmonds.joined() print(jo..