日常碎碎念最近经常有人问我怎么用 Rust 在 iOS 上开发. 那就完整地讲一下吧.

还有个事, 我的 17 款 MacBook Pro 使用流畅程度居然没有 16 款的好, 17 款动不动就吹鼓风机, 真是见得鬼了.

把工具搞定

在搞事情之前, 我们先把 Rust 环境配好, 这个很简单, 直接用官网的这条命令.

curl https://sh.rustup.rs -sSf | sh

随便装一个版本, 稳定版也好, 变态版(beta) 也罢.

然后装上一些工具链, 在终端输入

rustup target add aarch64-apple-ios x86_64-apple-ios

我个人只装了针对 A7 以上 64 位处理器的工具链, x86_64-apple-ios 这个是给模拟器用的.

还有其他几个工具链, 有需要的也可以装上.

armv7-apple-ios armv7s-apple-ios i386-apple-ios

建个 Rust 项目先

现在先建个 Rust 项目, 只要使用 cargo 就好了, 直接在终端输入

mkdir rust-on-ios && cd rust-on-ios

cargo new rs --lib

mkdir ios

现在可以看到 rust-on-ios 目录下有 ios 和 rs 文件夹.

打开 rs 文件夹 src 目录下的 lib .rs 文件, 先搞个 "hello world" 试一下效果.

usestd::os::raw::{c_char};usestd::ffi::{CString};#[no_mangle]pubexternfn say_hello()-> *mutc_char{CString::new("Hello Rust").unwrap().into_raw()}

姑且就写这个. 这里的 #[no_mangle]必须要写, 这个是保证编译后的函数签名像 C 的一样.

然后我们来建个 header 文件, 因为之后会把 Rust 项目编译成库文件, 所以搞个 header 提供接口.

char *say_hello(void);

还差一步, 我们现在要修改一下 Cargo.toml 文件, 到时候把 Rust 编译成库.

[package]

name = "rs"

version = "0.1.0"

authors = ["limit <747638920@qq.com>"]

edition = "2018"

publish = false

[lib]

name = "app"

crate-type = ["staticlib"]

现在我们到 rs 目录下编译一下这个项目.

cargo build --target x86_64-apple-ios --release

编译好之后, 你会在 target/x86_64-apple-ios目录下发现一个 libapp.a 文件.

接下来建个 iOS 项目.

建 iOS 项目现在来创建个 iOS Single Page App 项目. 我图个省事, 这里直接建 Objective-C 项目, 要建 Swift 项目也可以, 不过需要搞桥接, 而且我个人用 Rust 搞 iOS 有一半原因是不想写 Swift 代码.

一路 Next 创建了项目, 然后添加 lib 文件

这个 libapp.a 是我们用 Rust 编译好的文件, 这个 libresolv.tbd 是拿来做链接用的.

要想添加 libapp.a, 直接点这个加号, 然后点 Add Other, 然后选中编译好的 libapp.a 文件.

然后把之前写好的头文件放到项目中. 编译的时候发现出错了. 因为我们虽然把 libapp.a 引入到了项目中, 但是编译的时候, 工具并不清楚 lib 文件在哪, 所以我们得手动设置一下 lib 文件的搜索路径.

现在再进行一次编译应该就能成功了.

为了演示效果, 在 ViewControll.m 文件中使用一下这个函数吧.

#import "ViewController.h"#import "libapp.h"

@interface ViewController ()

@end

@implementation ViewController

- (void)viewDidLoad {

[super viewDidLoad];

NSString *from_c_str = @(say_hello());

UILabel *label = [[UILabel alloc]

initWithFrame: (CGRect) {100, 100, 100, 100}];

label.text = from_c_str;

[self.view addSubview:label];

}

@end

然后模拟器上应该显示了 Hello Rust 这段文字.

好吧, 先到这里, 目前这种要每次自己手动编译, 而且每次如果新增了函数 header 文件需要手动修改, 如果 Xcode 自动帮我们搞定就好了.

ios 腐蚀rust手游_使用 Rust 开发 iOS 应用(粗糙版)相关推荐

  1. ios 腐蚀rust手游_用 Rust 开发 iOS 应用(粗糙版)

    把环境搞定 在搞事情之前, 我们先把 Rust 环境配好, 这个很简单, 直接用官网的这条命令. curl https://sh.rustup.rs -sSf | sh 复制代码 随便装一个版本, 稳 ...

  2. rust服务器假人文件,rust游戏手机版-rust手游预约(腐蚀游戏手机版)-乐游网安卓...

    <rust手游>是一款超真实末日生存模拟游戏,由pc端移植而来,采用了3D高清的实景地图,玩家作为幸存者需要在游戏地图中探索,和僵尸战斗,其他的幸存者竞争,收集生存所需的资源,建造房屋,努 ...

  3. 苹果手机充值显示服务器异常,梦幻西游手游充值出现异常的iOS系统解析

    梦幻西游手游充值出现异常的iOS系统解析,目前iOS系统充值出现异常,如果您在充值时遇到 "iOS目前无法处理您的购买" 的问题,这个情况主要是由于苹果服务器存在问题导致的,目前会 ...

  4. 手游神武2最新服务器,神武2手游新服开启公告 安卓IOS新服开启

    神武2手游新服开启公告,安卓IOS新服开启.神武手游安卓和IOS客户端又将开启新的服务器了,新的服务器将在3月11日开启.每当新服开启的时候肯定都会有一系列的活动登场,下面就让我们一起来看一看新服活动 ...

  5. 苹果神武4手游等待服务器响应,ios回合制手游《神武4》如何在登高探宝中快速拿到奖励?...

    ios回合制手游<神武4>的登高探宝玩法每周六.周日的21:30-22:30开启,玩家们可提前于21:05入场准备,22:30活动结束后保留半小时活动场景,此期间不再刷新怪物和宝箱,但玩家 ...

  6. 虚幻4引擎开发的手游_虚幻4引擎开发 《神佑》手游首次公开

    [17173新闻报道,转载请注明出处] 1月25日,Joycity公司举办新作发布会,公开了正在开发中的旗下新作. 发布会上,Joycity介绍了<创世纪战:安塔利亚战争>.<炮艇战 ...

  7. 和方舟rust一样的手游_方舟生存进化手游2.0版本的泰克科技有多强?恐龙大军都顶不住...

    富人靠科技,穷人靠变异.这句由<复仇者联盟>引出的话题在各大游戏中也能得到体现,因为它揭示了想要变强的两种方法,一种是利用科技的力量,另一种则是使用肉体的力量.在<方舟:生存进化手游 ...

  8. 和方舟rust一样的手游_三大高人气手游盘点,《方舟:生存进化》的世界靠支配恐龙来生存...

    手游市场的竞争是残酷的,现在我们所看到的热门手游不知道是干掉了多少款手游才出现在我们的眼前.不过这样的竞争对于像我们一样的玩家来说却是一件好事,因为在不断的竞争中,一些劣质手游自动被淘汰了,能留下来的 ...

  9. 和方舟rust一样的手游_偶像梦幻祭2新活动 ES手游全新开服

    毕竟四年前也没玩过什么手游,当时也就fgo和es了,所以对于游戏良不良心没什么概念,只是和单机比,手游确实费钱. 退坑最开始的原因是撕逼,是cp之间的撕逼,然后国服官方这边撩一下那边撩一下,作为玩家心 ...

最新文章

  1. 完美解决Error:Execution failed for task ':APP:transformClassesWithDexForDebug'...问题
  2. Cloud for Customer UI checkbox控件在PC和mobile端的不同显示
  3. linux自带磁盘加密工具下载,TrueCrypt(磁盘加密工具)
  4. 重启openstack服务_如何“ Kubernetize” OpenStack服务
  5. 智能会议系统(14)---Linphone探索:1 . Linphone官方源码探究
  6. Linux版Silverlight - Moonlight宣布停止更新
  7. 《Java 就业培训教程》
  8. 微信机器人框架【Python】
  9. Mybatis框架Mybatis下载步骤
  10. java web 页面布局框架_jsp框架(jsp实现页面框架布局)
  11. 批量删除文件到回收站
  12. 基于uni-app的模板,支持h5,小程序,安卓,ios,request请求封装,全局路由拦截,也可作为项目基础模板使用
  13. wamp中php无法启动,wamp无法正常启动
  14. ENVI5.3.1 去除影像四周的黑色背景
  15. 电路杂谈——硬件经典面试题
  16. 【Al TIME】博硕论坛064期 | 清华计算机系大佬齐论Al
  17. 可以免费下载视频素材和模板网站汇总
  18. 利用python和Sen2cor对Sentinel2进行批量大气校正
  19. 起用 RabbitMQ (二)
  20. win10系统升级没有声音?老司机教你怎么重新安装声卡驱动

热门文章

  1. JAVa调用aidl_远程接口调用AIDL
  2. 10、门禁系统安装与调试知识大全
  3. ie自带css定位,IE浏览器的CSS定位问题
  4. java中^怎么用_^运算符在Java中做什么?
  5. python pymysql模块下载_Python Pymysql模块
  6. 近百单神秘外卖被送至多地消防队 留言暖心
  7. ArtCAM入门简单教程(二)——浮雕
  8. 利用CAD绘制粗糙的横纵断面图(手工绘制)
  9. php编程json,php字符转json对象的方法
  10. 自己写的一个动画,包含自定义的动画set