swift-data-skill
4
总安装量
2
周安装量
#49450
全站排名
安装命令
npx skills add https://github.com/cocoataster/swift-data-agent-skills --skill swift-data-skill
Agent 安装分布
amp
2
opencode
2
kimi-cli
2
github-copilot
2
gemini-cli
2
Skill 文档
SwiftData Expert
Fast, production-oriented guidance for building correct, performant SwiftData apps and fixing common crashes. Based on comprehensive SwiftData reference material (iOS 17+).
Agent behavior contract (follow these rules)
- SwiftData requires iOS 17+ / macOS Sonoma / tvOS 17 / watchOS 10 / visionOS 1.0 minimum â confirm deployment target before advising.
- All SwiftData models must be classes with the
@Modelmacro â never structs. - Never pass model objects across actors â use
PersistentIdentifier(the.idproperty) andModelContainer(both areSendable).ModelContextand model objects are notSendable. - Prefer explicit relationships with
@Relationshipover inferred ones â explicit relationships are never regretted. - For many-to-many relationships,
@Relationship(inverse:)is required â SwiftData will not infer them. - When CloudKit is enabled: no
@Attribute(.unique), all properties need defaults or optionality, all relationships must be optional. - Always remind:
deleteAllData()onModelContainerdoes not actually delete data as of iOS 17 â usemodelContext.delete(model:)for each model type instead. - Reference this skill’s
references/files for detailed code examples and patterns.
First 60 seconds (triage template)
- Clarify the goal: model definition, querying, relationships, migration, SwiftUI integration, iCloud sync, performance, testing, or error fix?
- Collect minimal facts:
- platform + deployment target (iOS 17+?)
- CloudKit enabled or local-only?
- using SwiftUI directly or MVVM pattern?
- exact error message + crash log if applicable
- Branch immediately:
- crash / error â
references/common-errors.md - model definition â
references/model-definition.md - relationships â
references/relationships.md - querying / filtering / sorting â
references/querying.md - migration â
references/migration.md - SwiftUI integration â
references/swiftui-integration.md - concurrency / background work â
references/concurrency.md - iCloud / CloudKit â
references/cloudkit-sync.md - performance â
references/performance.md - testing â
references/testing.md
- crash / error â
Routing map (pick the right reference fast)
- @Model, properties, attributes, Codable support â
references/model-definition.md - ModelContainer / ModelContext / ModelConfiguration â
references/containers-context.md - Relationships (1:1, 1:many, many:many, cascade deletes) â
references/relationships.md - @Query, #Predicate, FetchDescriptor, sorting â
references/querying.md - Lightweight & complex migrations, VersionedSchema â
references/migration.md - SwiftUI integration (@Query, @Bindable, previews, dynamic sort/filter) â
references/swiftui-integration.md - Background contexts, Swift Concurrency, batch inserts â
references/concurrency.md - iCloud / CloudKit sync, stopping sync â
references/cloudkit-sync.md - MVVM, singletons, pre-populating, discarding changes â
references/architecture.md - Performance optimization â
references/performance.md - Unit tests, UI tests â
references/testing.md - UIKit integration, widgets, document-based apps â
references/platform-integration.md - Common errors and solutions â
references/common-errors.md - Core Data migration / coexistence â
references/core-data-coexistence.md
Core Data â SwiftData mapping (quick reference)
| Core Data | SwiftData |
|---|---|
NSPersistentContainer |
ModelContainer |
NSManagedObjectContext |
ModelContext |
NSManagedObject |
PersistentModel / @Model |
NSPredicate |
#Predicate macro |
NSFetchRequest |
FetchDescriptor |
NSSortDescriptor |
SortDescriptor |
@FetchRequest |
@Query |
NSMigrationStage |
MigrationStage |
NSEntityMigrationPolicy |
SchemaMigrationPlan |
Common errors â next best move
- “Circular reference resolving attached macro ‘Relationship'” â remove
@Relationship(inverse:)from one side - “NSFetchRequest could not locate an NSEntityDescription” â model type missing from
modelContainer(for:) - “Set a .modelContext in view’s environment to use Query” â missing
modelContainer()modifier onWindowGroup - “A stored property cannot be named ‘description'” â rename property (reserved by Core Data internally)
- “Illegal attempt to establish a relationship between objects in different contexts” â don’t insert related objects separately; insert only the parent
EXC_BAD_ACCESSnear#Predicateâ unsupported predicate operation (e.g.,.contains()on[String]array)- “Fatal error: Duplicate registration attempt” â inserting both sides of a relationship; remove one insert
- “validation recovery attempt FAILED ⦠Code=1570 ⦠is a required value” â non-optional relationship being set to nil; use
.cascadedelete rule or make property optional - Autosave silently failing â check
@Relationshipmin/max constraints; callsave()manually to see error - “I’m confused, how am I not moored⦔ â subclassing a model; mark classes
finaland don’t subclass
Verification checklist (when changing SwiftData code)
- All
@Modeltypes are classes (not structs). - Model container includes all model types (or they’re reachable via relationships).
- Relationships with non-optional inverse use
.cascadedelete rule or explicit@Relationship(inverse:). - Many-to-many relationships have explicit
@Relationship(inverse:)on one side only. - No model objects or
ModelContextpassed across actors â onlyPersistentIdentifierandModelContainer. - If CloudKit: no
.unique, all defaults/optionals, all relationships optional. - Predicates don’t use unsupported operations (e.g.,
contains()on[String],== falseon.isEmpty).
Reference files
references/model-definition.mdreferences/containers-context.mdreferences/relationships.mdreferences/querying.mdreferences/migration.mdreferences/swiftui-integration.mdreferences/concurrency.mdreferences/cloudkit-sync.mdreferences/architecture.mdreferences/performance.mdreferences/testing.mdreferences/platform-integration.mdreferences/common-errors.mdreferences/core-data-coexistence.md