Project Icon

Canopy

优化CloudKit开发体验 增强应用可测试性

Canopy是一个Swift Package Manager包,专为优化CloudKit应用开发而设计。它提供简洁的API接口,支持依赖注入以提高代码可测试性,并与swift-dependencies无缝集成。Canopy包括核心库、测试工具和全面文档,还提供Thoughts示例应用展示开发最佳实践。从基础数据库操作到高级CloudKit功能,Canopy均能协助开发者高效构建稳定可靠的iCloud应用。

Canopy

Canopy 帮助你编写更好、更易测试的 CloudKit 应用程序。

安装 Canopy

Canopy 作为 Swift Package Manager 包分发。

如果你使用 Xcode UI 管理依赖项,请将 https://github.com/Tact/Canopy 添加为项目的依赖项。

如果你使用 SPM Package.swift,请添加以下内容:

dependencies: [
  .package(
    url: "https://github.com/Tact/Canopy",
    from: "0.2.0"
  )
]

使用 Canopy

一行示例

要从 CloudKit 私有数据库中获取具有记录 ID exampleID 的记录,请使用以下 Canopy 调用:

let result = await Canopy().databaseAPI(usingDatabaseScope: .private).fetchRecords(with: [CKRecord.ID(recordName: "exampleID")])
switch result {
  case .success(let fetchRecordsResult):
    // 处理 fetchRecordsResult。检查其 foundRecords 和 notFoundRecordIDs 属性。
  case .failure(let ckRecordError):
    // 处理错误
}

使用抛出返回类型

Canopy 将其所有 API 作为 async Result 提供。许多人更喜欢使用抛出式 API。使用 get() API 可以很容易地在调用站点将 Canopy API 调用转换为抛出式风格。对于上面的示例,请按照以下方法操作:

do {
  let result = try await Canopy().databaseAPI(usingDatabaseScope: .private).fetchRecords(…).get()
  // 使用结果
} catch {
  // 处理抛出的错误
}

依赖注入以提高可测试性

Canopy 旨在使你的代码可测试。你需要在大部分代码和功能中使用依赖注入模式来实现这一点。大多数代码不应直接实例化 Canopy,而应该从外部接收它。例如:

actor MyService {
  private let canopy: CanopyType
  init(canopy: CanopyType) {
    self.canopy = canopy
  }

  func someFeature() async {
    let databaseAPI = await canopy.getDatabaseAPI(usingDatabaseScope: .private)
    // 调用 databaseAPI 函数来
    // 检索和修改记录、区域、订阅等...
  }
}

在应用程序的实际使用中,你初始化并注入与 CloudKit 通信的实时 Canopy 对象。在独立测试功能时,你可以注入一个模拟的 Canopy 对象,它不与任何云服务通信,而是回放模拟响应。

阅读更多:使用 Canopy 创建可测试的 CloudKit 应用程序

使用 swift-dependency 进行依赖注入

Canopy 为 swift-dependencies 实现了 cloudKit 依赖键。如果你使用 swift-dependencies,可以这样使用 Canopy:

struct MyFeature {
  @Dependency(\.cloudKit) private var canopy
  func myFeature() async {
    let recordsResult = await canopy.databaseAPI(usingDatabaseScope: .private).fetchRecords(…)
  }
}

有关如何使用依赖项以及为预览和测试注入所需的 Canopy 依赖值的更多信息,请参阅 swift-dependencies 文档。

了解 Canopy

Canopy 包有三个部分。

库提供主要的 Canopy 功能和价值。Canopy 是主要库,CanopyTestTools 帮助你构建测试,而 CanopyTypes 提供两者共用的一些共享类型。

文档

Canopy 文档网站 https://canopy-docs.justtact.com 包含库的文档,以及有关库动机和一些使用 CloudKit 的想法和最佳实践的信息。该文档由 DocC 从此存储库生成,也可以在 Xcode 中内联使用。

文档中的一些亮点:

Canopy 动机和范围

使用 Canopy 创建可测试的 CloudKit 应用程序

iCloud 高级数据保护

示例应用

Thoughts 示例应用展示了在真实应用中使用 Canopy,并演示了现代多平台、多窗口应用开发的一些最佳实践。

Thoughts 示例应用

作者和鸣谢

Canopy 是作为 Tact 应用 的一部分构建的,并将继续建设。

主要贡献者:Jaanus KaseAndrew TetlawHenry Cooper

感谢:Priidu ZilmerRoger SheenMargus Holland

项目侧边栏1项目侧边栏2
推荐项目
Project Cover

豆包MarsCode

豆包 MarsCode 是一款革命性的编程助手,通过AI技术提供代码补全、单测生成、代码解释和智能问答等功能,支持100+编程语言,与主流编辑器无缝集成,显著提升开发效率和代码质量。

Project Cover

AI写歌

Suno AI是一个革命性的AI音乐创作平台,能在短短30秒内帮助用户创作出一首完整的歌曲。无论是寻找创作灵感还是需要快速制作音乐,Suno AI都是音乐爱好者和专业人士的理想选择。

Project Cover

白日梦AI

白日梦AI提供专注于AI视频生成的多样化功能,包括文生视频、动态画面和形象生成等,帮助用户快速上手,创造专业级内容。

Project Cover

有言AI

有言平台提供一站式AIGC视频创作解决方案,通过智能技术简化视频制作流程。无论是企业宣传还是个人分享,有言都能帮助用户快速、轻松地制作出专业级别的视频内容。

Project Cover

Kimi

Kimi AI助手提供多语言对话支持,能够阅读和理解用户上传的文件内容,解析网页信息,并结合搜索结果为用户提供详尽的答案。无论是日常咨询还是专业问题,Kimi都能以友好、专业的方式提供帮助。

Project Cover

讯飞绘镜

讯飞绘镜是一个支持从创意到完整视频创作的智能平台,用户可以快速生成视频素材并创作独特的音乐视频和故事。平台提供多样化的主题和精选作品,帮助用户探索创意灵感。

Project Cover

讯飞文书

讯飞文书依托讯飞星火大模型,为文书写作者提供从素材筹备到稿件撰写及审稿的全程支持。通过录音智记和以稿写稿等功能,满足事务性工作的高频需求,帮助撰稿人节省精力,提高效率,优化工作与生活。

Project Cover

阿里绘蛙

绘蛙是阿里巴巴集团推出的革命性AI电商营销平台。利用尖端人工智能技术,为商家提供一键生成商品图和营销文案的服务,显著提升内容创作效率和营销效果。适用于淘宝、天猫等电商平台,让商品第一时间被种草。

Project Cover

AIWritePaper论文写作

AIWritePaper论文写作是一站式AI论文写作辅助工具,简化了选题、文献检索至论文撰写的整个过程。通过简单设定,平台可快速生成高质量论文大纲和全文,配合图表、参考文献等一应俱全,同时提供开题报告和答辩PPT等增值服务,保障数据安全,有效提升写作效率和论文质量。

投诉举报邮箱: service@vectorlightyear.com
@2024 懂AI·鲁ICP备2024100362号-6·鲁公网安备37021002001498号