XCFramework 漫游指南:把“多架构”装进同一个抽屉
抽屉的诞生
Xcode 11 之前,苹果开发者习惯把不同架构的 Framework 摊在桌面:
MyFramework_ios.deviceMyFramework_ios.simulatorMyFramework_macos
像三只散落的抽屉,谁用谁搬。
2019 年,苹果递来一只“万能抽屉”——XCFramework,外表只有一个拉手,内部却分出 iOS、macOS、tvOS、watchOS 多层隔板,每层再按 arm64、x86_64、arm64e 贴好标签。Xcode 编译时像贴心的管家,自动拉开对应隔板,取出最合适的那块二进制。
抽屉的四大卖点
1. 隔板不打架
同名的类、符号被隔离在不同架构目录,链接器再也不会抱怨“duplicate symbol”。
2. 发版像寄抽屉
以前:附赠三张说明书——“真机版请拖 A,模拟器版请拖 B,Mac 版请拖 C”。
现在:把整只抽屉快递过去,收件人拆包即用。
3. 动静混放
隔板一端放静态 .a,另一端放动态 .framework,中间还能塞 .dylib 小格,互不影响。
4. 老项目也能拉
最低部署目标只要高于 iOS 9 / macOS 10.11,老工程无需改代码,直接链接抽屉拉手。
三分钟制作抽屉
1. 先裁好隔板
分别 Archive 出:
ios_device.xcarchiveios_simulator.xcarchivemac_device.xcarchive
2. 拼装抽屉
xcodebuild -create-xcframework \
-framework Archives/ios_device.xcarchive/Products/Library/Frameworks/Zoo.framework \
-framework Archives/ios_simulator.xcarchive/Products/Library/Frameworks/Zoo.framework \
-framework Archives/mac_device.xcarchive/Products/Library/Frameworks/Zoo.framework \
-output Zoo.xcframework
终端提示“XCFramework successfully created”即代表抽屉成型。
3. 把抽屉塞进衣柜
拖 Zoo.xcframework 进 Xcode 侧边栏 → TARGETS → Frameworks, Libraries, and Embedded Content → 选 Embed & Sign → 编译通过,衣柜门关上,外观整洁。
给抽屉加锁芯
潜在风险
抽屉板子再整齐,也怕别人撬开:
- 逆向:IDA 像螺丝刀,三两下拆成伪代码;
- 调试:lldb 像万能钥匙,插进来就能翻箱倒柜;
- 符号:函数名
validateReceipt贴在隔板外侧,一目了然。
低成本锁芯方案
Virbox Protector 暂不支持直接给整只抽屉上锁,但能对每一块隔板(.framework 或可执行文件)提前加固:
- 代码加密
- 虚拟化
- 符号混淆
- 反调试
处理完再重新xcodebuild -create-xcframework打包,抽屉拉手依旧顺滑,内部却已暗藏锁芯。
结语
XCFramework 这只抽屉,让“架构碎片化”从搬家现场变成收纳美学:对外只有一根拉手,对内却万物井然。提前给隔板加把锁,你的框架就能既好看又抗揍,随用随拉,永不卡壳。

浙公网安备 33010602011771号