国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

iOS使用Rust調(diào)研

這篇具有很好參考價(jià)值的文章主要介紹了iOS使用Rust調(diào)研。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

編輯已恢復(fù)
我們已與您斷開連接。嘗試重連時(shí)會(huì)保存您所做的變更。嘗試重連

標(biāo)題 1

已保存
Bin Song
B

要發(fā)布此內(nèi)容,請(qǐng)選擇鍵盤上的 ?Enter。
發(fā)布

關(guān)閉

Rust技術(shù)空間


跨平臺(tái)使用調(diào)研
iOS使用Rust調(diào)研

添加表情符號(hào)

添加標(biāo)題圖像

添加狀態(tài)

一、iOS 項(xiàng)目接入 Rust Library
約定:
iOS 項(xiàng)目目錄 DemoApp
Rust Library:demo-library-ffi
1.1、Rust Library
將 Rust Library 代碼 Clone 到 iOS 項(xiàng)目根目錄下: DemoApp/demo-library-ffi;
修改 DemoApp/rust-library/Cargo.toml,將 Rust Library 修改為靜態(tài)庫
[lib]
crate-type = [“staticlib”]
在 DemoApp 目錄下創(chuàng)建一個(gè)新的頂層 Cargo.toml 文件:
[workspace]
members = [
“demo-library-ffi”
]
現(xiàn)在可以直接使用 cargo build 來生成 rust 靜態(tài)庫了:
DemoApp/target/debug/demo-library-ffi.a
1.2、iOS Project
1.2.1
打開 Xcode target configuration → Build Phases → Link Binary with Libraries 選項(xiàng)卡,選擇 Add files,將前面生成的 DemoApp/target/debug/demo-library-ffi.a 文件添加進(jìn)去;
是的,這個(gè)不是最終我們需要的正確靜態(tài)庫文件,因?yàn)樗挥挟?dāng)前打包機(jī)器的架構(gòu),不要緊,我們會(huì)在下面步驟中修復(fù)它;
1.2.2
用文本編輯器打開 project.pbxproj,搜索并替換 Debug 和 Release 兩處 LIBRARY_SEARCH_PATHS
LIBRARY_SEARCH_PATHS = (
( i n h e r i t e d ) " , " (inherited)", " (inherited)","(PROJECT_DIR)/target/debug”,
);
Debug 替換為:
“LIBRARY_SEARCH_PATHS[sdk=iphoneos*][arch=arm64]” = “ ( P R O J E C T D I R ) / t a r g e t / a a r c h 64 ? a p p l e ? i o s / d e b u g " ; " L I B R A R Y S E A R C H P A T H S [ s d k = i p h o n e s i m u l a t o r ? ] [ a r c h = a r m 64 ] " = " (PROJECT_DIR)/target/aarch64-apple-ios/debug"; "LIBRARY_SEARCH_PATHS[sdk=iphonesimulator*][arch=arm64]" = " (PROJECTD?IR)/target/aarch64?apple?ios/debug";"LIBRARYS?EARCHP?ATHS[sdk=iphonesimulator?][arch=arm64]"="(PROJECT_DIR)/target/aarch64-apple-ios-sim/debug”;
“LIBRARY_SEARCH_PATHS[sdk=iphonesimulator*][arch=x86_64]” = “ ( P R O J E C T D I R ) / t a r g e t / x 8 6 6 4 ? a p p l e ? i o s / d e b u g " ; R e l e a s e 替換為: " L I B R A R Y S E A R C H P A T H S [ s d k = i p h o n e o s ? ] [ a r c h = a r m 64 ] " = " (PROJECT_DIR)/target/x86_64-apple-ios/debug"; Release 替換為: "LIBRARY_SEARCH_PATHS[sdk=iphoneos*][arch=arm64]" = " (PROJECTD?IR)/target/x866?4?apple?ios/debug";Release替換為:"LIBRARYS?EARCHP?ATHS[sdk=iphoneos?][arch=arm64]"="(PROJECT_DIR)/target/aarch64-apple-ios/release”;
“LIBRARY_SEARCH_PATHS[sdk=iphonesimulator*][arch=arm64]” = “ ( P R O J E C T D I R ) / t a r g e t / a a r c h 64 ? a p p l e ? i o s ? s i m / r e l e a s e " ; " L I B R A R Y S E A R C H P A T H S [ s d k = i p h o n e s i m u l a t o r ? ] [ a r c h = x 8 6 6 4 ] " = " (PROJECT_DIR)/target/aarch64-apple-ios-sim/release"; "LIBRARY_SEARCH_PATHS[sdk=iphonesimulator*][arch=x86_64]" = " (PROJECTD?IR)/target/aarch64?apple?ios?sim/release";"LIBRARYS?EARCHP?ATHS[sdk=iphonesimulator?][arch=x866?4]"="(PROJECT_DIR)/target/x86_64-apple-ios/release”;
1.2.3
再次打開 Build Phases 選項(xiàng)卡,添加一個(gè) Script,并移動(dòng)到 Compile Sources 上方,可以命名為: Build Rust library :
bash ${PROJECT_DIR}/bin/compile-rust-lib.sh demo-library-ffi $RUSTBUILDCONF
第二個(gè)參數(shù) RUSTBUILDCONF是傳遞給腳本的環(huán)境變量,我們先定義它們:
打開 Build Settings 選項(xiàng)卡,點(diǎn)擊 + 添加 User-Defined Setting,為其命名 RUSTBUILDCONF 并根據(jù)構(gòu)建變量選擇一個(gè)值:Debug 中填寫 DEBUG,Release 中填寫 RELEASE。
1.2.4
構(gòu)建腳本 bin/compile-rust-lib.sh
#!/usr/bin/env bash

if [ “$#” -ne 2 ]
then
echo “Usage (note: only call inside xcode!):”
echo “compile-rust-lib.sh <FFI_TARGET> ”
exit 1
fi

what to pass to cargo build -p, e.g. rust_lib_ffi

FFI_TARGET=$1

RUSTBUILDCONF from our xcconfigs

RUSTBUILDCONF=$2

RELFLAG=
if [[ “$RUSTBUILDCONF” != “DEBUG” ]]; then
RELFLAG=–release
fi

set -euvx

if [[ -n “${DEVELOPER_SDK_DIR:-}” ]]; then

Assume we’re in Xcode, which means we’re probably cross-compiling.

In this case, we need to add an extra library search path for build scripts and proc-macros,

which run on the host instead of the target.

(macOS Big Sur does not have linkable libraries in /usr/lib/.)

export LIBRARY_PATH=“ D E V E L O P E R S D K D I R / M a c O S X . s d k / u s r / l i b : {DEVELOPER_SDK_DIR}/MacOSX.sdk/usr/lib: DEVELOPERS?DKD?IR/MacOSX.sdk/usr/lib:{LIBRARY_PATH:-}”
fi

IS_SIMULATOR=0
if [ “${LLVM_TARGET_TRIPLE_SUFFIX-}” = “-simulator” ]; then
IS_SIMULATOR=1
fi

for arch in A R C H S ; d o c a s e " ARCHS; do case " ARCHS;docase"arch" in
x86_64)
if [ $IS_SIMULATOR -eq 0 ]; then
echo “Building for x86_64, but not a simulator build. What’s going on?” >&2
exit 2
fi

  # Intel iOS simulator
  export CFLAGS_x86_64_apple_ios="-target x86_64-apple-ios"
  $HOME/.cargo/bin/cargo build -p $FFI_TARGET --lib $RELFLAG --target x86_64-apple-ios
  ;;

arm64)
  if [ $IS_SIMULATOR -eq 0 ]; then
    # Hardware iOS targets
    $HOME/.cargo/bin/cargo build -p $FFI_TARGET --lib $RELFLAG --target aarch64-apple-ios
  else
    $HOME/.cargo/bin/cargo build -p $FFI_TARGET --lib $RELFLAG --target aarch64-apple-ios-sim
  fi

esac
done
二、問題調(diào)研

  1. Rust訪問網(wǎng)絡(luò)是否需要原生語言的干預(yù)?需支持協(xié)議如:gRPC/RESTful/WebSocket/UDP
    Rust 可以直接訪問網(wǎng)絡(luò),并不需要原生語言的干預(yù)
  2. Rust與原生語言的協(xié)作方式,F(xiàn)FI/JNI or 其他?
    FFI
    cbindgen
    rsbind
  3. 如何接收Rust發(fā)起的回調(diào)?
    使用函數(shù)指針,可以參考這個(gè)人的代碼:?https://github.com/thombles/dw2019rust/blob/master/modules/07%20-%20Swift%20callbacks.md
    或者使用 rsbind
  4. Rust是否可以直接訪問本地(圖片/文件)/沙箱文件?
    ?https://docs.rs/cacao/latest/cacao/index.html
  5. Rust是否可以直接訪問本地?cái)?shù)據(jù)庫?本地支持哪些常用數(shù)據(jù)庫并且Rust有相應(yīng)的封裝?
    可以直接使用 sqlite,如果要用 CoreData,需要通過 FFI
  6. 構(gòu)建時(shí)各平臺(tái)的構(gòu)建步驟以及命令
    參考 1.2.4
    或者使用 rsbind
  7. Android/iOS端異常調(diào)用棧的分析方法,是否有工具/框架可以配合
  8. 打包后包大小的變化
    1.網(wǎng)絡(luò)
    方案1: reqwest, 關(guān)閉bitcode的情況下,包增加7.6MB

2.數(shù)據(jù)庫
方案1:rusqlite, 關(guān)閉bitcode的情況下,包增加3.6MB文章來源地址http://www.zghlxwxcb.cn/news/detail-621448.html

到了這里,關(guān)于iOS使用Rust調(diào)研的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • Rust編程語言入門之cargo、crates.io

    通過 release profile 來自定義構(gòu)建 在https://crates.io/上發(fā)布庫 通過 workspaces 組織大工程 從 https://crates.io/來安裝庫 使用自定義命令擴(kuò)展 cargo release profile: 是預(yù)定義的 可自定義:可使用不同的配置,對(duì)代碼編譯擁有更多的控制 每個(gè) profile 的配置都獨(dú)立于其它的 profile cargo 主要的

    2023年04月09日
    瀏覽(28)
  • 【跟小嘉學(xué) Rust 編程】十四、關(guān)于 Cargo 和 Crates.io

    【跟小嘉學(xué) Rust 編程】一、Rust 編程基礎(chǔ) 【跟小嘉學(xué) Rust 編程】二、Rust 包管理工具使用 【跟小嘉學(xué) Rust 編程】三、Rust 的基本程序概念 【跟小嘉學(xué) Rust 編程】四、理解 Rust 的所有權(quán)概念 【跟小嘉學(xué) Rust 編程】五、使用結(jié)構(gòu)體關(guān)聯(lián)結(jié)構(gòu)化數(shù)據(jù) 【跟小嘉學(xué) Rust 編程】六、枚舉

    2024年02月11日
    瀏覽(22)
  • rust crate.io 配置國內(nèi)源(cargo 國內(nèi)源) warning: spurious network error (2 tries remainin...

    rust crate.io 配置國內(nèi)源(cargo 國內(nèi)源) warning: spurious network error (2 tries remainin...

    rust 筆記 Crate 國內(nèi)源配置 作者 : 李俊才 (jcLee95):https://blog.csdn.net/qq_28550263?spm=1001.2101.3001.5343 郵箱 : 291148484@163.com 本文地址 :https://blog.csdn.net/qq_28550263/article/details/130758057 Rust 官方默認(rèn)的 Cargo 源服務(wù)器為 crates.io,其同時(shí)也是 Rust 官方的 crate 管理倉庫,但是由于官方服

    2024年02月05日
    瀏覽(23)
  • iOS14 Widget 小組件調(diào)研

    iOS14 Widget 小組件調(diào)研

    桌面小組件是iOS14推出的一種新的桌面內(nèi)容展現(xiàn)形式。 根據(jù)蘋果的統(tǒng)計(jì)數(shù)據(jù),“一般用戶每天進(jìn)入主屏幕的次數(shù)超過90次”,如果有一個(gè)我們應(yīng)用的小組件在桌面,每天都有超過90次曝光在用戶眼前的機(jī)會(huì),這絕對(duì)是一個(gè)頂級(jí)的流量入口。 “但停留的總時(shí)長不過幾分鐘”,通

    2024年01月25日
    瀏覽(26)
  • 【iOS自動(dòng)化測試】第一章:方案調(diào)研

    【iOS自動(dòng)化測試】第一章:方案調(diào)研

    目前Android端已完成了相應(yīng)的框架搭建,并實(shí)際落地產(chǎn)出了,由于Android使用的是Unittest+HtmlTestRunner產(chǎn)出報(bào)告,需要增加新功能的話需要改動(dòng)到底層框架,所以目前在負(fù)責(zé)的iOS端打算采用Pytest+Allure方式來進(jìn)行,優(yōu)點(diǎn)是更好的插件支持,報(bào)告也會(huì)更好看(裝逼)點(diǎn) PS:Android端自動(dòng)

    2024年02月09日
    瀏覽(28)
  • 選擇Rust,并在Ubuntu上使用Rust

    在過去的 8 年里,Rust 一直是開發(fā)人員最喜歡的語言,并且越來越被各種規(guī)模的軟件公司采用。然而,它的許多高級(jí)規(guī)則和抽象創(chuàng)造了一個(gè)陡峭的初始學(xué)習(xí)曲線,這可能會(huì)給人留下 Rust 是少數(shù)人的保留的印象,但這與事實(shí)相去甚遠(yuǎn)。讓我們來看看為什么 Rust 通常是一個(gè)很好的

    2024年02月11日
    瀏覽(28)
  • 【Rust 基礎(chǔ)篇】Rust Deref Trait 的使用

    在 Rust 中,Deref trait 是一種特殊的 trait,用于重載解引用操作符 * 。通過實(shí)現(xiàn) Deref trait,我們可以定義類型的解引用行為,使其在使用 * 運(yùn)算符時(shí)表現(xiàn)得像引用類型。 本篇博客將詳細(xì)介紹 Rust 中如何實(shí)現(xiàn)和使用 Deref trait,以及它在代碼中的應(yīng)用場景。 Deref trait 的定義如下:

    2024年02月17日
    瀏覽(31)
  • 【Rust 基礎(chǔ)篇】Rust Rc 智能指針的使用

    在 Rust 中,Rc(Reference Counting)是一種智能指針,用于實(shí)現(xiàn)多所有權(quán)共享數(shù)據(jù)的引用計(jì)數(shù)。Rc 智能指針允許多個(gè)所有者共享相同的數(shù)據(jù),并在沒有任何所有者時(shí)自動(dòng)釋放數(shù)據(jù)。 本篇博客將詳細(xì)介紹 Rust 中 Rc 智能指針的使用方法和相關(guān)概念,以及它在代碼中的應(yīng)用場景。 Rc 智

    2024年02月16日
    瀏覽(17)
  • 【跟小嘉學(xué) Rust 編程】三十、Rust 使用 Slint UI

    【跟小嘉學(xué) Rust 編程】三十、Rust 使用 Slint UI

    【跟小嘉學(xué) Rust 編程】一、Rust 編程基礎(chǔ) 【跟小嘉學(xué) Rust 編程】二、Rust 包管理工具使用 【跟小嘉學(xué) Rust 編程】三、Rust 的基本程序概念 【跟小嘉學(xué) Rust 編程】四、理解 Rust 的所有權(quán)概念 【跟小嘉學(xué) Rust 編程】五、使用結(jié)構(gòu)體關(guān)聯(lián)結(jié)構(gòu)化數(shù)據(jù) 【跟小嘉學(xué) Rust 編程】六、枚舉

    2024年02月04日
    瀏覽(26)
  • 【Rust 基礎(chǔ)篇】Rust 早期釋放(2-Phase Drop)的使用

    在 Rust 中,早期釋放(2-Phase Drop)是一種特殊的機(jī)制,用于在析構(gòu)函數(shù)中提前釋放資源。通過使用早期釋放機(jī)制,我們可以控制資源的釋放順序,避免資源泄漏和不一致的狀態(tài)。 本篇博客將詳細(xì)介紹 Rust 中早期釋放的使用方法和相關(guān)概念,以及它在代碼中的應(yīng)用場景。 早期

    2024年02月16日
    瀏覽(13)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包