认识下XCFramework格式

基础介绍

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 开发中的多平台需求,并且支持静态和动态库类型,提供更高的灵活性。

简单示例

创建项目

  1. 使用xcode工具,按需求编译各平台framework框架,可以是静态库(.a或.framework)或动态库(.dylib);
  2. 使用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
  1. 最终合并后的文件如下图所示:

简单使用

在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文件。

滚动至顶部
售前客服
周末值班
电话

电话

13910187371

企业微信
企业微信二维码