头图

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 就像苹果送开发者的“瑞士军刀”:一片刀片对应一个架构,合上盒子轻如鸿毛,打开后却啥平台都能削。提前给刀片镀层防锈(加壳),你的框架就能既锋利又耐腐,随取随用。


深盾安全
1 声望0 粉丝

深耕软件安全领域30载