Skip to main content

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?

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 ?? "-")
}
}
}
}