swiftdata-prepare | ios-app-dev-memo
Core Data on iCloud 準備
プロジェクト作成時
- Storage: SwiftData
- Host in CloudKit : On
あとから iCloud 対応にする場合
- Signing and Capability
- iCloud 追加
- CloudKit
- Background Modes 追加
- Background fetch?
- iCloud 追加
XxApp
swift
import SwiftUI
import SwiftData
@main
struct SmartListMemoApp: App {
var sharedModelContainer: ModelContainer = {
let schema = Schema([
Item.self, // ← ★ ここに自前のクラス
])
let modelConfiguration = ModelConfiguration(schema: schema, isStoredInMemoryOnly: false)
do {
return try ModelContainer(for: schema, configurations: [modelConfiguration])
} catch {
fatalError("Could not create ModelContainer: \(error)")
}
}()
var body: some Scene {
WindowGroup {
ContentView()
}
.modelContainer(sharedModelContainer)
}
}
PersistentModel/
swift
import SwiftUI
import SwiftData
@Model
class Book: Identifiable {
var id: UUID = UUID()
var name : String? = ""
var order : Int? = 0
init(
name : String
) {
self.name = name
}
}
ContentView : NavigationSplitView を使うとして
swift
import SwiftUI
struct ContentView: View {
var body: some View {
NavigationSplitView {
BookListView()
} content: {
Text("Directory")
} detail: {
Text("Contents")
}
}
}
一覧の取得
swift
import SwiftUI
import SwiftData
struct BookListView: View {
@Environment(\.modelContext) private var modelContext
@Query private var books: [Book]
@State var selection: Book? = nil
var body: some View {
List(books, id: \.self, selection: $selection) { book in
HStack {
Image(systemName: "square.fill")
//.foregroundStyle(Color(cgColor: calendar.cgColor))
Text(book.name ?? "-")
}
}
}
}