用 Rust 开发 iOS
文章目录
前言
Rust
是近几年特别火的语言,之前学过几次,每次学完之后就不了了之,没有实际用到项目中。
所以每次学习的时候都感觉像是最熟悉的陌生人,所以最近想要在移动端进行实战,于是开始了折腾之旅,这篇就是 Rust
在 iOS
上的探索。
本文默认你已经安装好了 Rust
,如果没有安装好可以参考Rust 环境搭建
添加iOS支持
rust
默认安装的是你本机的系统和架构,如果我们需要编译成 iOS
也能使用的,需要添加对 iOS
的支持,如下所示
|
|
这里只给出了 ARM64
和 x86_64
的,它们分别针对的是苹果64位处理器和模拟器。
如果你想支持旧版的也可以把较老的架构也装上,分别是 armv7-apple-ios
、 armv7s-apple-ios
、 i386-apple-ios
创建 rust 库
接下来我们需要创建 rust
库工程,用于存放 rust
代码。
|
|
--lib
表示创建一个库,而不是可执行程序。
配置导出的库名
在项目的 Cargo.toml
中加入如下代码
|
|
name
表示库的名字
crate-type
表示用来创建静态库还是动态库,这里两个都配置了。
编写rust代码
在 src/lib.rs
中加入如下代码
|
|
代码很简单,给传进来的字符串前面添加 Rust String:
lipo与cbindgen
代码写好了,我们还需要两个工具,使用如下命令安装
|
|
cargo-lipo
是用来编译 universal iOS
二进制包
cbindgen
则是根据 rust
文件生成对应的 C/C++
头文件。
编译
我们先用 cbindgen
生成对应的头文件,然后进行编译出静态库
|
|
编译好的文件在 target/universal/release/librilib.a
,头文件在项目的根目录
生成的 rilib.h
内容如下
|
|
使用
拷贝静态库和头文件
首先通过 Xcode
创建一个工程,创建好工程后,把 librilib.a
和 rilib.h
拖进 Xcode
中,除此之外还需要对它们进行配置
在
Build Settings
中的搜索框中输入 library se
找到 Library Search Paths
双击之后,点击 + 号,把 librilib.a
所在的目录加进入,我这里就是 ${PROJECT_DIR}/rustDemo
设置好库文件的搜索路径之后还要设置头文件的路径,同样在搜索框中输入
bridging
,然后找到 Objective-C Bridging Header
把 rilib.h
加入其中,我这里就是 ${PROJECT_DIR}/rustDemo/rilib.h
添加调用的代码
配置好库文件和头文件之后我们就可以使用了,在 ContentView.swift
中加入如下代码
|
|
在这里把 rust
返回的字符串显示在了 Text
中
运行
运行结果如下,正确的显示在屏幕上
