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

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

Project Cover

Kimi

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

Project Cover

阿里绘蛙

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

Project Cover

吐司

探索Tensor.Art平台的独特AI模型,免费访问各种图像生成与AI训练工具,从Stable Diffusion等基础模型开始,轻松实现创新图像生成。体验前沿的AI技术,推动个人和企业的创新发展。

Project Cover

SubCat字幕猫

SubCat字幕猫APP是一款创新的视频播放器,它将改变您观看视频的方式!SubCat结合了先进的人工智能技术,为您提供即时视频字幕翻译,无论是本地视频还是网络流媒体,让您轻松享受各种语言的内容。

Project Cover

美间AI

美间AI创意设计平台,利用前沿AI技术,为设计师和营销人员提供一站式设计解决方案。从智能海报到3D效果图,再到文案生成,美间让创意设计更简单、更高效。

Project Cover

稿定AI

稿定设计 是一个多功能的在线设计和创意平台,提供广泛的设计工具和资源,以满足不同用户的需求。从专业的图形设计师到普通用户,无论是进行图片处理、智能抠图、H5页面制作还是视频剪辑,稿定设计都能提供简单、高效的解决方案。该平台以其用户友好的界面和强大的功能集合,帮助用户轻松实现创意设计。

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