第三章 Swift Package 使用 XCFramework

1,765 阅读2分钟

一、前言

XCFramework是伴随着Xcode 11,苹果推出的新的二进制框架分发格式。

之前Swift也可以编译成framework,但是对于不同版本的Xcode,因为Swift版本的不同,编译器版本的不同,从而生成的framework无法在不同Xcode版本运行;

而 XCFramework 就能解决这种问题。

二、制作 XCFramework 方式

目前市面上创建 XCFramework 的主流方式无非就是通过 【xcodebuild archive】 + 【xcodebuild -create】 或者 Carthage 命令行来创建。

如果无需 CI 来完成工作流的项目,建议使用 Carthage 来操作。

三、开始制作 XCFramework

前置条件:

  • 开发设备已经配置好 Carthage

创建一个 Framework 工程,并设置好版本支持。

image.png

image.png

加入 SnapkitAlamofire 源码。

image.png

设置 Framework 工程 schemes 为 shared。

image.png

image.png

终端进入工程根目录下并执行以下命令:

carthage build --no-skip-current --use-xcframeworks

image.png

编译成功后再跟目录下会出现 Carthage 文件夹,里面就有我们需要的 XCFramework 了。

image.png

如果编译失败,可以看下这里面是否是空的。

image.png

四、测试制作好的 XCFramework

新建一个工程,并将 上面输出好的 XCFramework 文件复制到工程根目录下。

image.png

工程添加引用。

image.png

代码测试,正常。

image.png

至此,XCFramework 已经制作好了。

四、XCFramework 混编

回到 XCFramework 工程,并加入 MJRefresh 代码。

image.png

工程引入 MJRefresh 后,需要将以下必要文件设置为公有。

MJRefreshConfig.h

MJRefreshAutoNormalFooter.h

MJRefreshAutoStateFooter.h

MJRefreshAutoFooter.h

MJRefreshFooter.h

MJRefreshConst.h

MJRefreshNormalHeader.h

MJRefreshStateHeader.h

MJRefreshHeader.h

UIScrollView+MJRefresh.h

MJRefreshComponent.h

image.png

image.png

打开工程的 .h 文件,并添加一下代码。

image.png

重新生产 XCFramework 代码,并重新引入到测试工程中,并编译。

image.png

至此,一个混编的 XCFramework 组件库完成。

五、Swift Package 使用 XCFramework

按照这里的方式重新制作一个 workspace 并添加工程以及 Swift Package。

image.png

将之前的做好的 XCFramework 拷贝到 Package 根目录下,XCFramework 会自动出现在工程中。

image.png

调整 MyLibray 文件以及修改 Package.swift 文件。

image.png

开发工程引入 Package。

image.png

image.png

主工程编写测试代码。

image.png

XCFramework 中的 Swift 代码和 OC 代码都可以被工程调用。

至此,Swift Package 使用 XCFramework 完成。