Framework 转换 XCFramework

2021-03-05  本文已影响0人  Jerome_e7ec

先说一下XCFramework的好处吧:

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

Framework简单解析

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

% cd path/ImSDK.framework # path 为 framework 路径
ImSDK.framework % tree -L 1
.
├── Headers # 头文件夹
├── ImSDK # 可执行文件
├── Info.plist
└── Modules # Modules 文件夹

2 directories, 2 files

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

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

XCFramework简单解析

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

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)(不一定全部有
ImSDK.framework % lipo ImSDK -thin x86_64 -output ImSDK-x86_64

依次分离出所有架构:
.
├── ImSDK-arm64
├── ImSDK-armv7
├── ImSDK-x86_64
├── ImSDK-i386
  1. 拆解后,真机架构(arm64)和真机架构(armv7)合并
% mkdir -p ImSDK-arm/ImSDK.framework
% lipo -create ImSDK-arm64 ImSDK-armv7 -output ImSDK-arm/ImSDK.framework/ImSDK
  1. 拆解后,模拟器架构(x86_64)和模拟器架构(i386)合并。(有几个合并几个
% mkdir -p ImSDK-simulator/ImSDK.framework
% lipo -create ImSDK-x86_64 ImSDK-i386 -output ImSDK-simulator/ImSDK.framework/ImSDK
  1. 将原来的.framework中除了可执行文件,原封不动的拷贝到我们手动创建的.framework。(如果不拷贝会出编译时会各种奇怪的问题)
# 真机
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
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

上一篇 下一篇

猜你喜欢

热点阅读