Zcash iOS 框架

Build Status

适用于 iOS 的 Zcash 轻量级客户端 SDK。这是一个 alpha 版本,目前正在积极开发中。请注意以下事项:

🔒 安全警告

安装

Swift Package Manager

添加一个包含源 "https://github.com/zcash/ZcashLightClientKit.git" 以及版本 0.14.0-beta 及更高版本的软件包,可以在 Xcode 的 GUI 或 Package.swift 文件中进行添加。

Xcode 项目对 Beta 版本的支持

如果你想在 Xcode 项目中包含 ZCashLightClientKit 的 Beta 版本(例如 0.14.0-beta),你需要使用提交 SHA 来指定它,因为 Xcode 似乎不支持 Swift 包的语义版本字符串中的“元数据”(在撰写本文时)。

测试

运行测试的最佳方式是在 Xcode 中打开 "Package.swift",然后使用测试面板并定位到 iOS 设备。测试将为 Mac 目标构建和运行,但目前无法按预期工作。

有三个测试目标按外部需求分组

  1. OfflineTests
    • 没有外部要求。
  2. NetworkTests
    • 需要有效的互联网连接。
  3. DarksideTests
    • 需要在运行测试时运行 lightwalletd 的实例,有关如何设置的一些信息请参见下文。(Darkside 指的是 lightwalletd 中的一种模式,允许它更新以表示/模拟底层区块链的不同状态。)

lightwalletd

DarksideTests 测试目标依赖于本地(或远程)运行的 lightwalletd 服务器实例。 为了方便起见,我们添加了一个通用的(Mac)lightwalletd 二进制文件(在 `Tests/lightwalletd/lightwalletd` 中),可以使用以下命令在本地运行以供测试使用

Tests/lightwalletd/lightwalletd --no-tls-very-insecure --data-dir /tmp --darkside-very-insecure --log-file /dev/stdout

你可以从主存储库 https://github.com/zcash/lightwalletd 了解更多关于运行 lightwalletd 的信息。

与 CD/CI 集成

LIGHTWALLETD_ADDRESS 环境变量也可以添加到你选择的 shell 中,并且 xcodebuild 将相应地获取它。

我们建议尽可能将此值设置为 CD/CI 环境中的 secret 变量。

与日志记录工具集成

有很多适用于 iOS 的优秀日志记录工具。 因此,我们将把这个选择留给你。 ZcashLightClientKit 依赖于一个简单的协议将日志冒泡到客户端应用程序,该协议称为 Logger(感谢原创的命名...)。

public protocol Logger {
    
    func debug(_ message: String, file: String, function: String, line: Int)
    
    func info(_ message: String, file: String, function: String, line: Int)
    
    func event(_ message: String, file: String, function: String, line: Int)
    
    func warn(_ message: String, file: String, function: String, line: Int)
    
    func error(_ message: String, file: String, function: String, line: Int)
    
}

在日志记录方面,你有几个不同的选择

  1. 将其留给 SDK。 它将使用自己的 Logger 和合理的默认值。 对于此选项,只需在创建 Initializer 时省略 loggingPolicy 参数

  2. 提供自定义记录器。 对于此选项,请执行以下操作:a)。 让一个类符合 Logger 协议 b)。 通过传递 .custom(yourLogger)loggingPolicy 在创建 Initializer 时注入该记录器

  3. 没有日志记录。 SDK 将不会记录任何事件。 对于此选项,在创建 Initializer 时传递 .noLoggingloggingPolicy

有关更多详细信息,请查看 Sample App 的 AppDelegate 代码。

Swiftlint

我们不喜欢重新发明轮子,因此我们从 AirBnB 巧妙地借用了 swift lint 规则,我们发现这些规则非常酷且合理。

不稳定功能

Spend before Sync 同步算法

CompactBlockProcessor 负责从 lightwalletd 下载和处理区块。 自 SDK 成立以来,这些区块一直以线性顺序处理到链尖。 最新的 SDK 引入了一种全新的区块同步算法。 它被称为 Spend before Sync,并以非线性顺序处理区块,以便尽快发现可花费的资金 - 允许用户在仍然同步的情况下创建交易。

版本控制

本项目遵循具有预发布版本的 语义版本控制。 有效版本号的一个例子是 1.0.4-alpha11,表示版本 1.0.4alpha 预发布版本的第 11 次迭代。 稳定版本(例如 1.0.4)将不包含任何预发布标识符。 预发布版本包括以下内容,按稳定性排序:alphabetarc。 版本代码提供了构建名称的数字表示,该数字始终会增加。 前六个有效数字表示主版本号、次版本号和补丁号(每个两位数),最后 3 个有效数字表示预发布标识符。 标识符的第一位表示构建类型。 最后,每个新构建的版本代码都高于所有先前的构建。 下表对其进行了细分

构建类型

类型 目的 稳定性 受众 标识符 示例版本
alpha 沙盒。 供开发人员验证行为并尝试功能。 在这里看到的东西可能永远不会投入生产。 这里的大多数错误都可以忽略。 不稳定:预计存在错误 内部开发人员 0XX 1.2.3-alpha04 (10203004)
beta 交接。 供开发人员展示完成的功能。 在这里发现的错误应报告并立即解决,如果它们与最近的更改有关。 不稳定:报告错误 内部利益相关者 2XX 1.2.3-beta04 (10203204)
release candidate (发布候选) 强化。 我们认为已准备好上线的应用程序发布的最终测试。 这里的重点是回归测试,以确保新的更改不会在先前工作正常的区域引入不稳定。 稳定:寻找错误 外部测试人员 4XX 1.2.3-rc04 (10203404)
production (生产) 交付。 向最终用户交付新功能。 在这里发现的任何错误都需要优先考虑。 有些需要立即关注,但大多数可以纳入未来的版本。 稳定:优先考虑错误 公众 8XX 1.2.3 (10203800)

例子

此存储库包含此 SDK 提供的独立功能的演示。 它们可以在 examples 文件夹中找到。

可以在演示 App中找到示例。

许可证

MIT