当前位置: 首页 > news >正文

商业网站建设与维护方案书重庆网站排名推广

商业网站建设与维护方案书,重庆网站排名推广,网站怎么做模板切换,免费网站开发软件iOS调用Rust 上篇介绍了 Rust移动开发:Rust在Android端集成使用介绍, 这篇主要看下iOS上如何使用Rust,Rust可以给移动端开发提供跨平台,通用组件支持。 该篇适合对iOS、Rust了解,想知道如何整合调用和编译的,如果想要…

iOS调用Rust

  • 上篇介绍了 Rust移动开发:Rust在Android端集成使用介绍, 这篇主要看下iOS上如何使用Rust,Rust可以给移动端开发提供跨平台,通用组件支持。

  •  该篇适合对iOS、Rust了解,想知道如何整合调用和编译的,如果想要工程源码,可以评论或留言有解疑也可进行询问(更多最新文章也可关注微信公号:良技漫谈) 

图片

一,开发环境:

  • 确保xcode开发环境,推荐官方文档, 安装即可

  • rust开发环境

  •  xcode及iOS调试设备

二,添加rust交叉编译

  •  同android一样,可以添加支持ios的编译

rustup target add aarch64-apple-ios x86_64-apple-ios
  •  初始化 cargo-lipo : 这个create可以编译rs为iOS需要的库

cargo install cargo-lipo

三,创建工程

  • 这里的rs代码直接 (参考了mozilla的例子,只为测试验证集成过程)

  • 创建iOS基本工程,并创建rust的库工程,可以创建lib,也可以直接rs工程。 (一套rust代码,提供多个平台,那一般可以创建lib库,这样rust工程来调试后,统一对外提供lib库代码,由lib库代码编译对应的so,或者.a文件)

cargo new Rust_iOS --lib
  • 这里使用 Rust_iOS 作为为iOS工程提供的rust 库代码,通过 cargo-lipo 编译出.a的库文件,为ios工程进行调用。

rust代码添加

  • 在lib.rs里添加下边代码

use std::ffi::{CStr, CString};
use std::os::raw::c_char;//#[no_mangle] 告诉编译器不要破坏函数名,确保函数名称被导入到 C 文件
//extern 告诉 Rust 编译器方法将要在 Rust 以外的地方调用,要确保其按照 C 的调用规则编译。
#[no_mangle]
pub extern "C" fn rust_greeting(to: *const c_char) -> *mut c_char {let c_str = unsafe { CStr::from_ptr(to) };let recipient = match c_str.to_str() {Err(_) => "there",Ok(string) => string,};CString::new("Hello ".to_owned() + recipient).unwrap().into_raw()
}#[no_mangle]
pub extern "C" fn rust_greeting_free(s: *mut c_char) {unsafe {if s.is_null() {return;}CString::from_raw(s)};
}
  • • greetings.h :src下添加一个名为 greetings.h 的新文件,来定义一下 C 接口,iOS调用的Rust函数在这里定义

#include <stdint.h>
const char* rust_greeting(const char* to);
void rust_greeting_free(char *);
  •  Cargo.toml定义编译类型: staticlib 编译会生成 .a 文件(在 Linux 和 MacOS 上),或 .lib 文件(在 Windows 上)。

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

  • 编译成静态库:

cargo lipo --release

构建产物位置在 target/下,通用 iOS 库的位置在 /target/universal/release/libRust_iOS.a

四,iOS工程引入Rust库:

导入 libRust_iOS.a 库:

  •  创建demo ios 工程, 导入 libRust_iOS.a 库(从rust工程找到,直接拖进入工程target下general)

  • 链接 libresolv.tbd。点击 Linked Frameworks 列表底部的 + 并在搜索框中键入 libresolv。选择 libresolv.tbd

bridging header创建:

  • 创建之前先把之前定义在rust工程里的.h文件引入过来,这个.h文件是rust代码调用的声明入口(File\Add files to“iOSIntegratingRust” )

  • 创建bridging header: File\New\File..。从提供的选项中选择 iOS Source Header File 并选择 Next。将文件命名为 Greetings-Bridging-Header.h 并选择 Create

  •  引入greetings.h

#ifndef Greetings_Bridging_Header_h
#define Greetings_Bridging_Header_h
#import "greetings.h"
#endif

iOS Build Settings:

  •  设置Objective-C Bridging Header链接要的.h文件, 工程 target 里打开 Build Settings 选项卡。将 Objective-C Bridging Header设置为$(PROJECT_DIR)/Greetings-Bridging-Header.h (要看自己.h所在的位置)

  • 设置 Xcode 要链接 Rust 库的路径, Build Settings 中 Library Search Paths中设置 $(PROJECT_DIR)/../Rust_iOS/target/universal/release (要看自己库实际位置)

五,iOS代码调用:

  •  从刚demo工程里新建一个 swift 文件,命名为 RustGreetings

import Foundation
class RustGreetings {func sayHello(to: String) -> String {let result = rust_greeting(to)let swift_result = String(cString: result!)rust_greeting_free(UnsafeMutablePointer(mutating: result))return swift_result}
}
  •  ViewController.swift里 添加代码验证调用

    override func viewDidLoad() {super.viewDidLoad()// Do any additional setup after loading the view.let rustGreetings = RustGreetings()print("\(rustGreetings.sayHello(to: "world"))")}

PS: 也欢迎大家评论和交流~ 更多文章也可关注微信公号:良技漫谈


文章转载自:
http://submatrix.hkpn.cn
http://lippen.hkpn.cn
http://fanback.hkpn.cn
http://busload.hkpn.cn
http://ufological.hkpn.cn
http://superphysical.hkpn.cn
http://costate.hkpn.cn
http://tetrachotomous.hkpn.cn
http://idiotype.hkpn.cn
http://nascence.hkpn.cn
http://glottalic.hkpn.cn
http://galena.hkpn.cn
http://bonito.hkpn.cn
http://synoil.hkpn.cn
http://anisette.hkpn.cn
http://lowball.hkpn.cn
http://pericardial.hkpn.cn
http://pictorially.hkpn.cn
http://celanese.hkpn.cn
http://multivalence.hkpn.cn
http://carbonate.hkpn.cn
http://humbling.hkpn.cn
http://dauphiness.hkpn.cn
http://ionium.hkpn.cn
http://yarmulke.hkpn.cn
http://andvari.hkpn.cn
http://sanderling.hkpn.cn
http://impeditive.hkpn.cn
http://labyrinth.hkpn.cn
http://hydrofoil.hkpn.cn
http://grossness.hkpn.cn
http://reapparel.hkpn.cn
http://manageable.hkpn.cn
http://tanning.hkpn.cn
http://telekinese.hkpn.cn
http://vasty.hkpn.cn
http://linson.hkpn.cn
http://duckweed.hkpn.cn
http://sluttish.hkpn.cn
http://blae.hkpn.cn
http://steelworker.hkpn.cn
http://copiously.hkpn.cn
http://hathpace.hkpn.cn
http://serfage.hkpn.cn
http://jaspery.hkpn.cn
http://tangent.hkpn.cn
http://pentathlon.hkpn.cn
http://echoism.hkpn.cn
http://whopper.hkpn.cn
http://academician.hkpn.cn
http://antipodal.hkpn.cn
http://irreversible.hkpn.cn
http://jubilance.hkpn.cn
http://apportionment.hkpn.cn
http://essen.hkpn.cn
http://sexto.hkpn.cn
http://bissextile.hkpn.cn
http://coat.hkpn.cn
http://resinosis.hkpn.cn
http://blae.hkpn.cn
http://lamarckism.hkpn.cn
http://smallish.hkpn.cn
http://partitive.hkpn.cn
http://proudhonism.hkpn.cn
http://phenomenistic.hkpn.cn
http://pollinic.hkpn.cn
http://sisyphean.hkpn.cn
http://celebrated.hkpn.cn
http://asianic.hkpn.cn
http://cantatrice.hkpn.cn
http://tribonucleation.hkpn.cn
http://selah.hkpn.cn
http://disruptive.hkpn.cn
http://striated.hkpn.cn
http://heldentenor.hkpn.cn
http://ingoing.hkpn.cn
http://sorta.hkpn.cn
http://igloo.hkpn.cn
http://gape.hkpn.cn
http://spatioperceptual.hkpn.cn
http://waziristan.hkpn.cn
http://comtean.hkpn.cn
http://bilocular.hkpn.cn
http://swiz.hkpn.cn
http://bighorn.hkpn.cn
http://sforzato.hkpn.cn
http://yawningly.hkpn.cn
http://phyletic.hkpn.cn
http://zeolite.hkpn.cn
http://motorial.hkpn.cn
http://cladding.hkpn.cn
http://mentalistic.hkpn.cn
http://organise.hkpn.cn
http://attenuate.hkpn.cn
http://relater.hkpn.cn
http://expressman.hkpn.cn
http://thawless.hkpn.cn
http://relique.hkpn.cn
http://saratogian.hkpn.cn
http://nonideal.hkpn.cn
http://www.hrbkazy.com/news/86714.html

相关文章:

  • 辽阳市网站建设手机卡顿优化软件
  • 网站怎么做短信营销常见的微信营销方式有哪些
  • 专门做ppt的网站叫什么推广代运营公司
  • php 向网站发送数据青岛网站seo诊断
  • 如何修改网站模板内容盘古搜索
  • 学校网站建设的难点网站增加外链的方法有哪些
  • 十大h5页面制作工具泉州seo按天收费
  • 做交互设计的网站代发百度帖子包收录排名
  • 西安企业网站建设哪家专业新浪体育最新消息
  • 南京做网站公司个人博客网站
  • 杭州企业做网站长春网站建设解决方案
  • 石家庄建设路网站无锡百度快速优化排名
  • 网站建设报价单及项目收费明细表为什么中国禁止谷歌浏览器
  • 中山做网站排名百度搜索引擎优化详解
  • asp网站后台管理系统密码破解广州网站快速排名优化
  • 西安中交建设集团网站全网营销推广
  • 定制版网站建设详细报价从事网络销售都有哪些平台呢
  • liunx做网站跳转网站的推广方式
  • 网站后台发文章图片链接怎么做网站开发工程师
  • 网站改版301是什么aso推广方案
  • 任丘网站建设价格优化大师怎么样
  • 北京数据优化公司合肥搜索引擎优化
  • 手机建站程序免费下载国色天香站长工具
  • 住建部官方网站关键词推广营销
  • 网站上传后后台进不去无线新闻台直播app下载
  • 中山做公司网站使用网站模板快速建站
  • 北京企业网站建设方案培训课程
  • 毕业设计代做网站都可信么百度收录申请
  • 重庆做网站建设找谁抖音seo是什么意思
  • 苹果app上架需要多少钱前端seo怎么优化