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 关注者
140KB
2K SLoC
为在 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
的布局,请参阅以下链接。
- 它是一个包含为多个目标架构编译的资源目录,通常以
- XCFramework格式文档不完整;简要来说
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
- Xcode:
测试消费者端的本地更改
有关测试消费者端本地更改的详细信息,请参阅以下文档
测试预发布提交
对于发布构建,我们将生成的 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
的分支。
进一步阅读
- 决定以这种方式分发内容的架构设计文档
- 介绍XCFrameworks旨在解决的问题
- 框架内容的简要入门,当您想要手动构建框架时很有用
- 关于模块映射的文档,这是C级代码如何暴露给Swift的方式