Framework转换XCFramework之旅

Framework转换XCFramework之旅

Jerome Xiong

XCFramework 是 Apple 推荐的 Framework 分发格式,支持多架构合并。本文详细介绍从 Framework 到 XCFramework 的转换流程。

先说一下XCFramework的好处吧:

  1. 多架构合并,模拟器,真机可以通用随便跑
  2. 上架AppStore,不需要将.xcframework中的真机架构分离,.framework还需要用脚本分离,这实在太棒了

Framework简单解析

拿腾讯IM的举例吧,其实.framework就是个文件夹里面装着封装好的文件。

1
2
3
4
5
6
7
8
9
% cd path/ImSDK.framework # path 为 framework 路径
ImSDK.framework % tree -L 1
.
├── Headers # 头文件夹
├── ImSDK # 可执行文件
├── Info.plist
└── Modules # Modules 文件夹

2 directories, 2 files

通过lipo -info查看.framework中的可执行文件中包含的架构:

1
2
ImSDK.framework % lipo -info ImSDK 
Architectures in the fat file: ImSDK are: x86_64 armv7 arm64

XCFramework简单解析

.xcframework是由两个文件夹和一个配置文件组成:

1
2
3
4
5
6
7
ImSDK.xcframework % tree -L 1
.
├── Info.plist
├── ios-arm64_armv7 # arm64 以及 armv7的真机支持
└── ios-x86_64-simulator # i386 以及 x86_64的模拟器支持

2 directories, 1 file

在编译过程中,编译器通过识别设备的架构不同架构的设备,去.xcframework中取对应的支持执行文件。

.xcframework只是封装了真机和模拟器的.framework

Framework架构的分离以及合并

  1. 将多架构的.framework 中的所有架构的执行文件全部分离出来(arm64, armv7, x86_64, i386)(不一定全部有
1
2
3
4
5
6
7
8
ImSDK.framework % lipo ImSDK -thin x86_64 -output ImSDK-x86_64

依次分离出所有架构:
.
├── ImSDK-arm64
├── ImSDK-armv7
├── ImSDK-x86_64
├── ImSDK-i386
  1. 拆解后,真机架构(arm64)和真机架构(armv7)合并
1
2
% mkdir -p ImSDK-arm/ImSDK.framework
% lipo -create ImSDK-arm64 ImSDK-armv7 -output ImSDK-arm/ImSDK.framework/ImSDK
  1. 拆解后,模拟器架构(x86_64)和模拟器架构(i386)合并。(有几个合并几个
1
2
% mkdir -p ImSDK-simulator/ImSDK.framework
% lipo -create ImSDK-x86_64 ImSDK-i386 -output ImSDK-simulator/ImSDK.framework/ImSDK
  1. 将原来的.framework中除了可执行文件,原封不动的拷贝到我们手动创建的.framework。(如果不拷贝会出编译时会各种奇怪的问题)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
# 真机
ImSDK.framework % tree -L 2 ImSDK-arm
ImSDK-arm
└── ImSDK.framework
├── Headers
├── ImSDK
├── Info.plist
└── Modules

3 directories, 2 files

# 模拟器
ImSDK.framework % tree -L 2 ImSDK-simulator
ImSDK-simulator
└── ImSDK.framework
├── Headers
├── ImSDK
├── Info.plist
└── Modules

3 directories, 2 files
  1. 在终端通指令xcodebuild -create-xcframework指令生成xcframework
1
xcodebuild -create-xcframework -framework ImSDK-arm/ImSDK.framework -framework ImSDK-simulator/ImSDK.framework -output ImSDK.xcframework

提示 xcframework successfully written out to: path/ImSDK.framework/ImSDK.xcframework即合并成功

完成以上步骤后即可生成XCFramework,用法和Framework一样

最后如果想要使用xcframework ,在File -> workspcaeSetting 中只用new Build System

  • 标题: Framework转换XCFramework之旅
  • 作者: Jerome Xiong
  • 创建于 : 2021-06-01 18:00:00
  • 更新于 : 2026-07-16 15:31:40
  • 链接: https://jeromexiong.github.io/2021/06/01/iOS-Swift/Framework转换XCFramework之旅/
  • 版权声明: 本文章采用 CC BY-NC-SA 4.0 进行许可。
评论