一、前言
XCFramework是伴随着Xcode 11,苹果推出的新的二进制框架分发格式。
之前Swift也可以编译成framework,但是对于不同版本的Xcode,因为Swift版本的不同,编译器版本的不同,从而生成的framework无法在不同Xcode版本运行;
而 XCFramework 就能解决这种问题。
二、制作 XCFramework 方式
目前市面上创建 XCFramework 的主流方式无非就是通过 【xcodebuild archive】 + 【xcodebuild -create】 或者 Carthage 命令行来创建。
如果无需 CI 来完成工作流的项目,建议使用 Carthage 来操作。
三、开始制作 XCFramework
前置条件:
- 开发设备已经配置好 Carthage 。
创建一个 Framework 工程,并设置好版本支持。
设置 Framework 工程 schemes 为 shared。
终端进入工程根目录下并执行以下命令:
carthage build --no-skip-current --use-xcframeworks
编译成功后再跟目录下会出现 Carthage 文件夹,里面就有我们需要的 XCFramework 了。
如果编译失败,可以看下这里面是否是空的。
四、测试制作好的 XCFramework
新建一个工程,并将 上面输出好的 XCFramework 文件复制到工程根目录下。
工程添加引用。
代码测试,正常。
至此,XCFramework 已经制作好了。
四、XCFramework 混编
回到 XCFramework 工程,并加入 MJRefresh 代码。
工程引入 MJRefresh 后,需要将以下必要文件设置为公有。
MJRefreshConfig.h
MJRefreshAutoNormalFooter.h
MJRefreshAutoStateFooter.h
MJRefreshAutoFooter.h
MJRefreshFooter.h
MJRefreshConst.h
MJRefreshNormalHeader.h
MJRefreshStateHeader.h
MJRefreshHeader.h
UIScrollView+MJRefresh.h
MJRefreshComponent.h
打开工程的 .h 文件,并添加一下代码。
重新生产 XCFramework 代码,并重新引入到测试工程中,并编译。
至此,一个混编的 XCFramework 组件库完成。
五、Swift Package 使用 XCFramework
按照这里的方式重新制作一个 workspace 并添加工程以及 Swift Package。
将之前的做好的 XCFramework 拷贝到 Package 根目录下,XCFramework 会自动出现在工程中。
调整 MyLibray 文件以及修改 Package.swift 文件。
开发工程引入 Package。
主工程编写测试代码。
XCFramework 中的 Swift 代码和 OC 代码都可以被工程调用。
至此,Swift Package 使用 XCFramework 完成。