先說(shuō)一下XCFramework的好處吧:
- 多架構(gòu)合并服猪,模擬器正林,真機(jī)可以通用隨便跑
- 上架AppStore首装,不需要將
.xcframework
中的真機(jī)架構(gòu)分離,.framework
還需要用腳本分離兰吟,這實(shí)在太棒了
Framework簡(jiǎn)單解析
拿騰訊IM的舉例吧通惫,其實(shí).framework
就是個(gè)文件夾里面裝著封裝好的文件。
% cd path/ImSDK.framework # path 為 framework 路徑
ImSDK.framework % tree -L 1
.
├── Headers # 頭文件夾
├── ImSDK # 可執(zhí)行文件
├── Info.plist
└── Modules # Modules 文件夾
2 directories, 2 files
通過(guò)lipo -info
查看.framework
中的可執(zhí)行文件中包含的架構(gòu):
ImSDK.framework % lipo -info ImSDK
Architectures in the fat file: ImSDK are: x86_64 armv7 arm64
XCFramework簡(jiǎn)單解析
.xcframework
是由兩個(gè)文件夾和一個(gè)配置文件組成:
ImSDK.xcframework % tree -L 1
.
├── Info.plist
├── ios-arm64_armv7 # arm64 以及 armv7的真機(jī)支持
└── ios-x86_64-simulator # i386 以及 x86_64的模擬器支持
2 directories, 1 file
在編譯過(guò)程中混蔼,編譯器通過(guò)識(shí)別設(shè)備的架構(gòu)不同架構(gòu)的設(shè)備履腋,去.xcframework
中取對(duì)應(yīng)的支持執(zhí)行文件。
.xcframework
只是封裝了真機(jī)和模擬器的.framework
Framework架構(gòu)的分離以及合并
- 將多架構(gòu)的
.framework
中的所有架構(gòu)的執(zhí)行文件全部分離出來(lái)(arm64
,armv7
,x86_64
,i386
)(不一定全部有
ImSDK.framework % lipo ImSDK -thin x86_64 -output ImSDK-x86_64
依次分離出所有架構(gòu):
.
├── ImSDK-arm64
├── ImSDK-armv7
├── ImSDK-x86_64
├── ImSDK-i386
- 拆解后拄丰,真機(jī)架構(gòu)(arm64)和真機(jī)架構(gòu)(armv7)合并
% mkdir -p ImSDK-arm/ImSDK.framework
% lipo -create ImSDK-arm64 ImSDK-armv7 -output ImSDK-arm/ImSDK.framework/ImSDK
- 拆解后府树,模擬器架構(gòu)(x86_64)和模擬器架構(gòu)(i386)合并俐末。(有幾個(gè)合并幾個(gè)
% mkdir -p ImSDK-simulator/ImSDK.framework
% lipo -create ImSDK-x86_64 ImSDK-i386 -output ImSDK-simulator/ImSDK.framework/ImSDK
- 將原來(lái)的
.framework
中除了可執(zhí)行文件料按,原封不動(dòng)的拷貝到我們手動(dòng)創(chuàng)建的.framework
。(如果不拷貝會(huì)出編譯時(shí)會(huì)各種奇怪的問(wèn)題)
# 真機(jī)
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
- 在終端通指令
xcodebuild -create-xcframework
指令生成xcframework
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