#xcode #swift #command-line #bindgen

app xcode_uniffi

Rust UniFFI 框架生成器/更新工具

9个稳定版本

1.1.2 2022年2月4日
1.1.1 2022年2月3日
1.0.8 2022年2月3日
1.0.4 2022年2月2日

FFI 中排名第 145

每月下载量 25

使用 MPL-2.0 许可证

195KB
4K SLoC

Rust UniFFI 框架生成器/更新器

重要信息:仅使用 UniFFI_bindgen 版本 ~< 0.16.0 目前,使用 cargo install uniffi_bindgen 安装的版本为 0.17.0,这将生成不正确的库

请仅使用以下命令

bash cargo install uniffi_bindgen--版本0.16.0

注意:为Rust UniFFI设置您的项目。此代码仅在您有 *.UDL 文件时才有效

UDL 文件是Mozilla UniFFI模型,用于在 Swift、Kotlin 或 Python 中使用您的 Rust 库。


了解更多信息:[Runi Uniffi]

UniFFI Github

Rust UniFFI 学习中心


此工具使用 UniFFI 生成 Xcode 框架,该解决方案在 iOS、iOS 模拟器和 MacOS(Intel 和 M1 处理器/SoC)上运行顺畅。

此应用程序将根据您的 Rust UniFFI 模型和 Cargo.toml 文件生成 Xcode 框架

未来版本将支持创建应用程序。

准备使用

您必须安装 MacOS、iOS 和 iOS 模拟器的 rust 目标。 构建目标**

添加以下目标到 rust 编译器非常重要。无论您使用什么类型的 CPU,都必须添加 ARM64 库和 X86_64 库以生成适用于 Apple 商店的库。(MacOs)以下库的大小很小,不会影响您,并将为您节省许多未来的问题。此外,编译器脚本严格需要以下目标可用。

平台 详细信息
x86_64-apple-darwin Intel 平台上的 MacOS 支持
aarch64-apple-darwin M1 (arm64) 平台上的 MacOS 支持
aarch64-apple-ios arm64 平台上的 iOS 支持
aarch64-apple-ios-sim M1 Mac(arm64)上的 iOS 模拟器
x86_64-apple-ios Intel Mac(arm64)上的 iOS 模拟器
rustup target add x86_64-apple-darwin
rustup target add aarch64-apple-darwin
rustup target add x86_64-apple-ios
rustup target add aarch64-apple-ios
rustup target add aarch64-apple-ios-sim

安装

只需在终端中输入

cargo install xcode_uniffi

就这么多 😂


更新库 Cargo.toml

为了支持iOS/MacOS,需要进行静态编译。请确保您的rust库Cargo.toml文件中存在以下行。

[lib]
crate-type = ["staticlib", "cdylib"]

如何使用

我建议您在rust项目的根目录下运行此代码。

只需输入

xcode_uniffi create

默认情况下,它将在以下位置创建Xcode Framework,包括iOS、iOS模拟器和MacOS:

建议运行

cargo build

刚下载或复制的Rust项目需要更新'Cargo.lock'文件,否则您可能会在xcode文件中看到以下错误。

Xcode错误日志

Showing All Messages
the lock file **Cargo.lock needs to be updated but --locked was passed to prevent this

< rust项目根目录 >/xcode/< Cargo库名称 >

您可以通过命令行参数来更改默认值。请将Xcode项目作为您rust项目的子目录,这样Xcode就可以为不同的架构进行编译。

RUST编译器目前尚不支持BITCODE,建议在框架和应用程序中禁用BITCODE。请参阅以下教程,了解如何禁用BITCODE:如何禁用BITCODE

命令行参数

子命令

  • 创建
  • --package-name/-k

    指定cargo包名称,仅当您的Cargo.toml文件中有多个包时使用。

  • --lib-name/-l

    指定cargo库名称,如果您的Cargo.toml文件中有多个库。默认情况下,应用程序将尝试使用具有“staticlib”特征的crate_type包。

  • --name/-n

    覆盖Xcode框架的名称。(自动格式化为Pascal格式)

    默认情况下,Xcode框架的名称将与Rust库的Pascal字符串格式名称相同。

    示例

    Cargo包名称: my_fast_algo

    Xcode框架名称: MyFastAlgo

  • --path/-p

    生成Xcode框架的路径。默认情况下,Xcode框架将在您的rust目录中的

    ./xcode/< Cargo库名称 >

    建议将Xcode框架作为rust项目的子文件夹创建。这样,您的xcode将在您更新rust项目时能够编译和生成代码...

  • --cargo/-r

    Rust项目目录或Cargo.toml文件的路径。

    建议在Rust项目目录中通过命令行运行此应用程序,但您也可以传递此参数来指定不同的路径。

    Xcode项目将在此目录下创建,除非您指定了不同的路径

  • 更新

仍在进行中

Xcode框架详情

Xcode iOS和MacOS框架项目目标具有相同的产品名称。原因是使使用此框架的Xcode跨平台(iOS/macOS)项目更简单,无需导入不同的Swift框架。框架的名称将是Cargo库名称的Pascal格式,除非您使用命令行参数更改它。

作者: Jacob Hatami

依赖项

~5–16MB
~171K SLoC