mcpField
S
swiftdata-pro

swiftdata-pro

github.com/twostraws开发4549.3k 次安装1 周前更新
代码仓库

关于 swiftdata-pro

swiftdata-pro 面向 Swift 开发者,用于编写和审查 SwiftData 代码。它按项目和系统版本检查常见问题,并只报告确实存在的问题。

主要功能

  1. 01审查 SwiftData 代码
  2. 02检查谓词安全性
  3. 03应用 CloudKit 专属规则
  4. 04检查 iOS 18+ 索引
  5. 05检查 iOS 26+ 继承

适用场景

  1. 01审查 SwiftData 模型改动
  2. 02检查谓词的运行时风险
  3. 03评估 CloudKit 模型约束
  4. 04采用适配系统版本的建议

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/twostraws/swiftdata-agent-skill --skill swiftdata-pro

安装后在 Claude Code 中输入/swiftdata-pro确认已加载。

包含的文件

除 SKILL.md 外,安装时一起下载的参考资料和脚本。

agents/
openai.yaml
assets/
swiftdata-pro-icon.svg
references/
class-inheritance.md
cloudkit.md
core-rules.md
indexing.md
predicates.md

详细介绍

编写和审查 SwiftData 代码,确保其正确、使用现代 API,并遵循项目规范。只报告确实存在的问题——不要吹毛求疵或凭空捏造问题。

审查流程:

  1. 使用 references/core-rules.md 检查 SwiftData 的核心问题。
  2. 使用 references/predicates.md 检查谓词是否安全且受支持。
  3. 如果项目使用 CloudKit,使用 references/cloudkit.md 检查 CloudKit 特定的限制。
  4. 如果项目面向 iOS 18 及以上版本,使用 references/indexing.md 检查索引优化机会。
  5. 如果项目面向 iOS 26 及以上版本,使用 references/class-inheritance.md 检查类继承模式。

如果只处理部分内容,只加载相关的参考文件。

核心指令

  • 以 Swift 6.2 或更高版本为目标,并使用现代 Swift 并发机制。
  • 用户强烈倾向于全面使用 SwiftData。除非某项功能无法通过 SwiftData 实现,否则不要建议使用 Core Data 功能。
  • 未经询问,不要引入第三方框架。
  • 保持一致的项目结构,根据应用功能确定文件夹布局。

输出格式

如果用户要求审查,请按文件整理发现的问题。对于每个问题:

  1. 指明文件和相关行号。
  2. 说明违反的规则。
  3. 展示简短的修复前后代码。

跳过没有问题的文件。最后按优先级总结最值得优先处理的更改。

如果用户要求编写或改进代码,请遵循以上相同规则,但直接进行更改,而不是返回问题报告。

示例输出:

Destination.swift

第 8 行:为关系添加明确的删除规则。

// Before
var sights: [Sight]

// After
@Relationship(deleteRule: .cascade, inverse: \Sight.destination) var sights: [Sight]

第 22 行:谓词中不要使用 isEmpty == false——这会导致运行时崩溃。请改用 !。

// Before
#Predicate<Destination> { $0.sights.isEmpty == false }

// After
#Predicate<Destination> { !$0.sights.isEmpty }
DestinationListView.swift

第 5 行:@Query 只能在 SwiftUI 视图中使用。

// Before
class DestinationStore {
    @Query var destinations: [Destination]
}

// After
class DestinationStore {
    var modelContext: ModelContext

    func fetchDestinations() throws -> [Destination] {
        try modelContext.fetch(FetchDescriptor<Destination>())
    }
}
总结
  1. 数据丢失(高): Destination.swift 第 8 行缺少删除规则,删除 destination 时会导致 sight 成为孤立数据。
  2. 崩溃(高): 第 22 行的 isEmpty == false 会导致运行时崩溃——请改用 !isEmpty。
  3. 行为错误(高): DestinationListView.swift 第 5 行的 @Query 只能在 SwiftUI 视图中使用。

示例结束。

参考资料

  • references/core-rules.md - 自动保存、关系、删除规则、属性限制和 FetchDescriptor 优化。
  • references/predicates.md - 支持的谓词操作、会在运行时导致崩溃的危险模式,以及不受支持的方法。
  • references/cloudkit.md - CloudKit 特定的限制,包括唯一性、可选性和最终一致性。
  • references/indexing.md - iOS 18 及以上版本的数据库索引,包括单属性和复合属性索引。
  • references/class-inheritance.md - iOS 26 及以上版本的模型子类化,包括 @available 要求、架构设置和谓词筛选。

评论

支持 Markdown