一、前言
由于 UMeng 提供的 Common Framework 并不是标准的 Framework,它并没有 module.modulemap。
所以如果想将友盟也通过 XCFramework 方式在 Swift Package 中分发使用,就需要而外处理一下,将 UMCommon.framework 变成标准的 Framework,再编译成 XCFramework 才行。
二、操作思路
1、制作 module.modulemap 。
2、将多架构的 .framework 中的所有架构的执行文件全部分离出来(arm64,armv7,x86_64,i386)
3、拆解后,真机架构(arm64)和真机架构(armv7)合并。
4、拆解后,模拟器架构(x86_64)和模拟器架构(i386)合并。
5、两个执行文件创建好后,手动生成两个.framework 格式文件。
6、将原来的.framework中除了执行文件,原封不动的拷贝到我们手动创建的.framework(如果不拷贝会出编译时会各种奇怪的问题)。
6.在终端通指令xcodebuild -create-xcframework指令生成xcframework。
三、处理 UMCommon.Framework
在以下图示路径中创建 Modules 文件以及创建 module.modulemap 文件(可以在别的地方拷贝)。
打开 module.modulemap 文件并修改为一下代码。
framework module UMCommon {
umbrella header "UMCommon.h"
export *
module * { export * }
}
打开 Headers/UMCommon.h 并添加:
#import <UMCommon/MobClick.h>
制作软连接,添加支持,因为主目录下面都是软连接方式,我们也必须要创建Modules软连接到主目录。
以上,UMCommon.Framework 就调整完毕了。
四、分离 UMCommon.framework 架构
先查看 UMCommon.framework 中的可执行文件中包含的架构:
我们看到友盟的公共组件中包含了5个架构,接下来就逐一剥离拆解出来。
最后将5个独立架构的执行放到一个文件夹,方便合成。
五、重新合并可执行文件。
真机和真机合并,模拟器和模拟器合并。
六、使用新的执行文件制作新的 Framework
找个地方将调整好的 Framework 按照真机和模拟器的文件隔离。
七、制作 XCFramework
八、制作 UMDevice.xcframework
由于 UMCommon 依赖于 UMDevice,所以还需要自行设置 UMDevice.xcframework。
这里不再重复。
九、集成测试。
将两个 XCFramework 复制到测试工程目录下。
打开工程并引入 XCFramework。
在代码中测试(OC, Swift都通过)。
通过测试。就可以愉快的通过 Swift Package 进行分发了。