SwiftDataとCloudKitを使った実装

1K Views

February 08, 24

スライド概要

potatotips #86 iOS/Android開発Tips共有会での登壇資料

関連スライド

各ページのテキスト
1.

SwiftDataのiCloud対応 potatotips #86 iOS/Android開発Tips共有会 yoshitaka

2.

yoshitaka iOS エンジニア コネヒト:出産育児系のQAアプリ ママリ 趣味:パデル

3.

話すこと • SwiftDataとCloudKitを使う際の注意点

4.

SwiftDataとHost in CloudKit

5.

アプリを動かしてみる 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]) } } }

6.

CloudKitのコンテナを追加する

7.

CloudKitのコンソールを表示

8.

SwiftDataをCloudKitで扱う場合の注意点 CloudKit integration requires that all attributes be optional, or have a default value set.

9.

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

10.

AppleIDでログインしている端末でビルドする

11.

ProductionにSchemaをデプロイする

12.

CloudKitのコンソールを表示 ⇩Productionにデプロイできた

13.

SwiftDataのiCloud対応完了🎉

14.

CoreDataとCloudKit • WWDC2019 Using Core Data With CloudKitで発表された • Xcode11からCloudKitをチェックしてプロジェクトを作れるようなった • NSPersistentCloudKitContainerを使うことで実現できる 参考:https://developer.apple.com/videos/play/wwdc2019/202/

15.

参考:https://developer.apple.com/videos/play/wwdc2019/202/

16.

参考:https://developer.apple.com/videos/play/wwdc2019/202/

17.

CloudKitのPrivateとPublicの違い • WWDC2020 Sync a Core Data store with the CloudKit public databaseが紹介された 参考:https://developer.apple.com/videos/play/wwdc2020/10650/

18.

まとめ • SwiftDataとCloudKitで連携する場合は、すべての属性がオプションである か、デフォルト値が設定されている必要がある。

19.

参考 ・https://developer.apple.com/videos/play/wwdc2019/202/ ・https://developer.apple.com/videos/play/wwdc2020/10650/

20.

ご清聴ありがとうございました