本文假设已经在macOS机器上安装了xcode
本文参考 https://www.rust-lang.org/zh-CN/
macOS 中安装 rust开发环境
安装 rust
运行下面命令
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
中途会提示用户选择哪种安装方式:1、默认安装 ;2、自定义安装 ;3、取消安装
本文选择默认安装,这将会在~/.rustup
安装工具链,在~/.cargo
安装包管理器。
安装完成后,可以使用 rustc --version
查看版本
更新rust
rust会定期更新(6周),可使用命令rustup update
进行更新
安装苹果工具链
rustup target add 指定架构工具链名称
# 例如
rustup target add aarch64-apple-ios
- aarch64-apple-ios , 真机arm64
- armv7-apple-ios , 真机armv7
- armv7s-apple-ios , 真机armv7s
- x86_64-apple-ios, 模拟器x86_64
- i386-apple-ios, 模拟器i386
安装VSCode 和Rust插件(本步骤可选)
建议使用VSCode + rust-analyzer扩展进行rust代码编写,详细参考https://code.visualstudio.com/docs/languages/rust
创建iOS可用的rust静态库
创建rust项目
cargo new 项目名字 --lib
# 例如 cargo new ios_rust_hello --lib
上面命令会创建一些文件,基本结构如下
ios_rust_hello
|___Cargo.toml # 项目配置文件
|___src # 源代码目录
|___lib.rs #源代码
修改配置文件,设置为静态库
修改Cargo.toml
,添加内容
[lib]
crate-type = ["staticlib"] # 表示将构建为静态库
# 注意,如果使用下面配置,将同时生成静态库和动态库。
# 但是动态库为 dylib格式,苹果不推荐使用
# crate-type = ["staticlib","cdylib"]
更多配置参考 https://doc.rust-lang.org/cargo/reference/manifest.html
使用FFI暴露API
在rust代码中定义暴露给iOS使用的函数
#[no_mangle]
pub extern fn print_hello() {
println!("Hello");
}
- #[no_mangle] ,告诉编译器,按照C风格修饰函数名
- extern ,这个函数要导出
对应到iOS ObjC中的函数(准确说是C语言中的函数)
extern print_hello(void);
构建(指定cpu架构)
Cargo.toml尚不能配置为指定架构,需要手动使用命令指定构建
cargo build --target aarch64-apple-ios --release
# --target cpu架构(参考本文安装苹果工具链部分)
# --release 不使用时默认构建debug版本
另外,使用rustc --print target-list
打印支持的所有cpu架构
和iOS工程集成
将已生成的rust静态库拖入xcode工程即可,或者也可以使用cocoapods管理。
发表回复
要发表评论,您必须先登录。