17 个稳定版本 (5 个主要版本)

125.0.1 2024年3月28日
123.0.1 2024年2月1日
122.0.2 2024年1月11日
120.0.2 2023年11月29日
96.4.0 2023年1月31日

#462开发工具

598 星 & 48 关注者

MPL-2.0 许可证

140KB
2K SLoC

Swift 2K SLoC // 0.1% comments Shell 112 SLoC // 0.3% comments Rust 25 SLoC // 0.2% comments

为在 iOS 上分发 Rust 代码而构建的 XCFramework

此目录包含将所有 Rust 代码编译成一个二进制工件(可用于在 iOS 上轻松分发)的逻辑。如果您运行以下脚本

$> ./build-xcframework.sh

那么它应该生成一个名为 MozillaRustComponents.xcframework.zip 的文件,其中包含

  • 所有在 Cargo.toml 中列出的包的编译后的 Rust 代码,作为静态库,
  • 以及相应的 C 头文件和 Swift 模块映射文件,
  • 为所有目标 iOS 平台构建,作为一个 "XCFramework" 包。

生成的 .zip 文件适合作为 Swift 包的二进制依赖项使用。

为了支持只需要 Rust 代码子集的 focus-ios,我们也支持使用以下方式生成更小的 xcframework

$> ./build-xcframework.sh --focus

然后应该在 focus 目录下生成一个名为 FocusRustComponents.xcframework.zip 的文件,这个文件作为 focus-ios 最终消费的二进制文件。

这里有什么?

在这个目录中我们有

  • 一个Rust包,作为我们iOS发行的“大机器人”;它基本上依赖于所有Rust组件包,并重新导出它们的公共API。
  • 一些用于构建XCFramework的框架文件
    • module.modulemap 是一个“模块映射”,它告诉Swift编译器如何使用C级API。
    • MozillaRustComponents.h 是一个“伞头文件”,由模块映射用作指定所有可用头文件的快捷方式。
    • Info.plist 指定了结果XCFramework的元数据,例如可用的架构及其子目录。
  • 一个名为 build-xcframework.sh 的脚本,该脚本知道如何将东西拼接成完整的XCFramework包。
    • XCFramework格式文档不完整;简要来说
      • 它是一个包含为多个目标架构编译的资源目录,通常以 .zip 文件的形式分发。
      • 顶层目录包含每个架构的子目录,以及一个 .framework 文件夹和一个 Info.plist 文件,说明哪些内容位于哪个目录。
      • 每个子目录包含一个用于该架构的 .framework 目录。有关单个 .framework 的布局,请参阅以下链接。
  • focus 目录,这是一个为 focus-ios 构建的大机器人。在 focus 大机器人中的组件是整体 ios-rust 大机器人组件的一个子集,因此只在发布时构建。

我们手动构建XCFramework,而不是将其定义为Xcode项目的构建输出,这有点不寻常。事实证明,这对我们的目的来说更简单,但如果有朝一日苹果更改了Xcode版本中XCFramework的细节,这可能会使格式与预期格式不同。

添加包

有关添加新包的详细信息,请参阅添加新spm组件的文档

测试本地Rust更改

为了测试更改与我们的项目测试套件的兼容性,您需要

  • 运行 ./build-xcframework.sh 以构建XCFramework包。

注意:只有当底层rust代码更改时,您才需要这样做;如果您只是更改 *.swift 代码,则不需要重新构建!

  • 通过Xcode或命令行测试更改
    • Xcode: open megazords/ios-rust/MozillaTestServices.xcodeproj
    • 命令行: ./automation/run_ios_tests.sh

测试消费者端的本地更改

有关测试消费者端本地更改的详细信息,请参阅以下文档

  1. 测试firefox-ios
  2. 测试focus-ios

测试预发布提交

对于发布构建,我们将生成的 MozillaRustComponents.xcframework.zip 作为GitHub发布工件发布,然后更新https://github.com/mozilla/rust-components-swift 以通过URL和散列指向它。

对于从PR或未发布的git提交进行测试,您可以

  • 找到名为 ios-test-and-artifacts 的CircleCI作业,该作业对应于您想要测试的提交,点击通过CircleCI查看它,并确认它已成功完成。
  • 在“工件”列表中,找到 MozillaRustComponents.xcframework.zip 并记录其URL。
  • 在“步骤”列表中,找到名为 XCFramework bundle checksum 的步骤,并记录其输出的校验和。
  • https://github.com/mozilla/rust-components-swift 进行本地检出,并编辑其 Swift.package,以便为 MozillaRustComponents 二进制目标使用上述URL和校验和。
  • 将结果提交到您的本地检出,并按 MAJOR.MINOR.PATCH 格式创建一个git标签。
  • 将您的本地 rust-components-swift 仓库作为Swift Package依赖项添加到消费应用程序中。如果在firefox-ios中进行测试,您可以运行
$ cd firefox-ios
$  ./rust_components_local.sh ../rust-components-swift   

或者,您可以将 file:///path/to/rust-components-swift 作为git仓库指定。 *(您必须首先删除对 https://github.com/mozilla/rust-components-swift 的任何现有依赖项)

请注意,您的更改 必须 提交。您可以将其作为本地git标签导入,或者选择 rust-components-swift 的分支。

进一步阅读

依赖项