第四章 制作友盟的 XCFramework

831 阅读2分钟

一、前言

由于 UMeng 提供的 Common Framework 并不是标准的 Framework,它并没有 module.modulemap。

image.png

所以如果想将友盟也通过 XCFramework 方式在 Swift Package 中分发使用,就需要而外处理一下,将 UMCommon.framework 变成标准的 Framework,再编译成 XCFramework 才行。

二、操作思路

1、制作 module.modulemap2、将多架构的 .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 文件(可以在别的地方拷贝)。

image.png

打开 module.modulemap 文件并修改为一下代码。

framework module UMCommon {
  umbrella header "UMCommon.h"

  export *
  module * { export * }
}

image.png

打开 Headers/UMCommon.h 并添加:

#import <UMCommon/MobClick.h>

image.png

制作软连接,添加支持,因为主目录下面都是软连接方式,我们也必须要创建Modules软连接到主目录。

image.png

image.png

以上,UMCommon.Framework 就调整完毕了。

四、分离 UMCommon.framework 架构

先查看 UMCommon.framework 中的可执行文件中包含的架构:

image.png

我们看到友盟的公共组件中包含了5个架构,接下来就逐一剥离拆解出来。

image.png

最后将5个独立架构的执行放到一个文件夹,方便合成。

image.png

五、重新合并可执行文件。

真机和真机合并,模拟器和模拟器合并。

image.png

image.png

六、使用新的执行文件制作新的 Framework

找个地方将调整好的 Framework 按照真机和模拟器的文件隔离。

image.png

七、制作 XCFramework

image.png

image.png

八、制作 UMDevice.xcframework

由于 UMCommon 依赖于 UMDevice,所以还需要自行设置 UMDevice.xcframework。

这里不再重复。

image.png

九、集成测试。

将两个 XCFramework 复制到测试工程目录下。

image.png

打开工程并引入 XCFramework。

image.png

在代码中测试(OC, Swift都通过)。

image.png

image.png

通过测试。就可以愉快的通过 Swift Package 进行分发了。