博客 / 詳情

返回

XCFramework 小傳:一隻盒子裝下所有蘋果芯

2019 年,蘋果在 Xcode 11 的更新日誌裏低調扔下一行:
“New archive format: XCFramework.”
從此,iOS、macOS、tvOS、watchOS 乃至 Mac Catalyst 的各指令集切片,都能裝進同一只“框架收納盒”。

它到底解決了啥痛點

① 架構打架

以前把“真機.framework”拖進項目,再順手把“模擬器.framework”也拖進去,Xcode 會立刻紅字警告:
both contain arm64, duplicate symbols.
XCFramework 出場後,Xcode 自動挑片,衝突秒消失。

② 發版“拖家帶口”

舊流程:
MySDK_iOS.zip
MySDK_Simulator.zip
MySDK_Mac.zip
README 還要寫“請按需下載”。
新流程:
MySDK.xcframework.zip —— 一句“全平台通用”即可。

③ 動靜庫混搭

同一只盒子裏既能放靜態 .a,也能放動態 .framework;甚至能把 libFoo.aFoo.framework 並排塞入,Xcode 照樣自動鏈接。

三步“盒”成

1. 先切好“食材”

Scheme 選 Generic iOS Device → Archive → 得到 iOS.xcarchive
Scheme 選 Any iOS Simulator → Archive → 得到 Sim.xcarchive
Scheme 選 My Mac → Archive → 得到 Mac.xcarchive

2. 一鍵打包

xcodebuild -create-xcframework \
  -framework Archives/iOS.xcarchive/Products/Library/Frameworks/Bar.framework \
  -framework Archives/Sim.xcarchive/Products/Library/Frameworks/Bar.framework \
  -framework Archives/Mac.xcarchive/Products/Library/Frameworks/Bar.framework \
  -output Bar.xcframework

終端回顯 XCFramework successfully created. 即代表盒子焊好。

3. 工程裏“開箱即用”

Bar.xcframework 進項目 → TARGETS → Frameworks, Libraries, and Embedded Content → 選 Embed & Sign → 編譯,0 error 0 warning,收工。

給盒子加把鎖

可能的坑

  • 逆向:Mach-O 被 IDA 秒出偽代碼;
  • 調試:lldb 附加後斷點隨便下;
  • Patch:運行時內存一改,校驗邏輯直接失效;
  • 符號:函數名 getLicenseKey 明晃晃躺在那裏。

低成本方案

Virbox Protector 目前雖不能直接對 .xcframework 整盒加殼,卻支持對裏面的 .framework 或可執行文件提前做:

  • 指令虛擬化
  • 代碼加密
  • 符號混淆
  • 反調試
    加固完再重新 xcodebuild -create-xcframework 打包,盒子外表依舊簡潔,內部已穿盔甲。

尾聲
XCFramework 就像蘋果送開發者的“瑞士軍刀”:一片刀片對應一個架構,合上盒子輕如鴻毛,打開後卻啥平台都能削。提前給刀片鍍層防鏽(加殼),你的框架就能既鋒利又耐腐,隨取隨用。

user avatar
0 位用戶收藏了這個故事!

發佈 評論

Some HTML is okay.