2K Views
February 08, 24
スライド概要
potatotips #86 iOS/Android開発Tips共有会での登壇資料
SwiftDataのiCloud対応 potatotips #86 iOS/Android開発Tips共有会 yoshitaka
yoshitaka iOS エンジニア コネヒト:出産育児系のQAアプリ ママリ 趣味:パデル
話すこと • SwiftDataとCloudKitを使う際の注意点
SwiftDataとHost in CloudKit
アプリを動かしてみる import SwiftUI import SwiftData struct ContentView: View { @Environment(\.modelContext) private var modelContext @Query private var items: [Item] var body: some View { NavigationSplitView { List { ForEach(items) { item in NavigationLink { Text("Item at \(item.timestamp, format: Date.FormatStyle(date: .numeric, time: .standard))") } label: { Text(item.timestamp, format: Date.FormatStyle(date: .numeric, time: .standard)) } } .onDelete(perform: deleteItems) } .toolbar { ToolbarItem(placement: .navigationBarTrailing) { EditButton() } ToolbarItem { Button(action: addItem) { Label("Add Item", systemImage: "plus") } } } } detail: { Text("Select an item") } } private func addItem() { withAnimation { let newItem = Item(timestamp: Date()) modelContext.insert(newItem) } } } private func deleteItems(offsets: IndexSet) { withAnimation { for index in offsets { modelContext.delete(items[index]) } } }
CloudKitのコンテナを追加する
CloudKitのコンソールを表示
SwiftDataをCloudKitで扱う場合の注意点 CloudKit integration requires that all attributes be optional, or have a default value set.
SwiftDataをCloudKitで扱う場合の注意点 @Model final class Item { var timestamp: Date init(timestamp: Date) { self.timestamp = timestamp } } ⇩すべての属性がオプションであるか、デフォルト値が設定されている必要がある。 @Model final class Item { var timestamp: Date? init(timestamp: Date) { self.timestamp = timestamp } }
AppleIDでログインしている端末でビルドする
ProductionにSchemaをデプロイする
CloudKitのコンソールを表示 ⇩Productionにデプロイできた
SwiftDataのiCloud対応完了🎉
CoreDataとCloudKit • WWDC2019 Using Core Data With CloudKitで発表された • Xcode11からCloudKitをチェックしてプロジェクトを作れるようなった • NSPersistentCloudKitContainerを使うことで実現できる 参考:https://developer.apple.com/videos/play/wwdc2019/202/
参考:https://developer.apple.com/videos/play/wwdc2019/202/
参考:https://developer.apple.com/videos/play/wwdc2019/202/
CloudKitのPrivateとPublicの違い • WWDC2020 Sync a Core Data store with the CloudKit public databaseが紹介された 参考:https://developer.apple.com/videos/play/wwdc2020/10650/
まとめ • SwiftDataとCloudKitで連携する場合は、すべての属性がオプションである か、デフォルト値が設定されている必要がある。
参考 ・https://developer.apple.com/videos/play/wwdc2019/202/ ・https://developer.apple.com/videos/play/wwdc2020/10650/
ご清聴ありがとうございました