基础介绍
XCFramework 是苹果在 Xcode 11 中引入的一种二进制框架分发格式,专门设计用于支持多种平台和架构。开发者能将不同平台(如 iOS、macOS、tvOS 等)和不同架构(如 arm64、x64 等)的二进制文件打包在一个单一的 bundle 中。
使用XCFramework时,Xcode 能自动选择匹配当前架构使用的指令集Framework,避免手动操作指令集的工作。
主要特点
支持多平台
普通 Framework 通常只为单一平台和架构设计,而XCFramework 支持包含多种架构的framework,包含iOS (arm64) 、iOS Simulator 、macOS (x86_64, arm64)、watchOS等架构。
兼容性
普通 Framework 在不同架构(如真机和模拟器)之间可能存在兼容性问题,而XCFramework 能够同时包含多个架构的二进制文件,解决了跨架构兼容性问题
分发便利性
使用普通 Framework 时,可能需要为不同平台提供不同的版本,XCFramework 将所有平台和架构的版本打包在一起,简化了分发和集成流程。
灵活性
XCFramework 提供了更好的灵活性和可扩展性,特别适合 iOS 开发中的多平台需求,并且支持静态和动态库类型,提供更高的灵活性。
简单示例
创建项目
- 使用xcode工具,按需求编译各平台framework框架,可以是静态库(.a或.framework)或动态库(.dylib);
- 使用xcodebuild将多个不同平台的框架合并为一个,命令参考如下:
xcodebuild -create-xcframework \
-framework archives/ios.xcarchive/Products/Library/Frameworks/MyFramework.framework
-framework archives/simulator.xcarchive/Products/Library/Frameworks/MyFramework.framework
-output test.xcframework
- 最终合并后的文件如下图所示:

简单使用
在Xcode项目中添加即可,如下:
- 将
.xcframework放到项目目录下; - 在
Build Phases中添加依赖; - 在
Framework&Libraries中选择Embed & Sign即可使用。
安全防范
安全问题
XCFramework相当于是一个包含多个平台和多个架构的Framework集合,里面的framework框架里的可执行文件属于machO文件格式,如果文件不被保护,则关键代码可能会被泄露,比如:
被逆向风险
虽然编译生成的二进制文件逆向分析难度较高,但由于相应的反编译工具(比如ida、Ghidra)也成熟强大,依然可以反编译为类C伪代码;
被调试风险
攻击者可通过调试工具附加应用进程进行调试,在调试过程中可能暴露敏感信息(如密钥、算法逻辑);
程序被篡改风险
攻击者可以通过修改应用内存改变程序行为,绕过安全检查或实现恶意功能,导致数据泄露;
调试符号暴漏
dylib库中包含调试符号(如函数名、变量名、函数地址),可能暴露敏感信息,则攻击者可以更容易地理解代码逻辑,对代码进行分析。
防范措施
Virbox Protector工具(简称加壳工具)在对machO格式文件的保护上有着成熟的方案,可以实现对macho格式文件进行函数级和整体保护,具体方案参考官网文档Native程序保护最佳实践。;
目前加壳工具无法直接支持对XCFramework文件夹进行加壳,但支持对framework或可执行性文件加壳,所以建议可以先对framework或可执行性文件进行保护,然后在将其打包为一个XCFramework文件。