XCFramework 允许将适用于多个平台(包括iOS设备、iOS模拟器和Mac Catalyst) 的二进制框架或库打包到一个可分发的. XCFramework包中,开发人员可以在自己的应用程序中使用这个包。
一、创建Framework项目
1.打开Xcode新建项目,选择iOS平台下的Framework,如下图所示:

2.定义该项目名为MOJiUtils(假设我们要搭建一个工具类框架),如图所示:

3.给MOJiUtils框架创建字符串工具类,如StringUtils类(字符串工具类)
.h文件如图所示:

.m文件如图所示:

4.开放字符串工具类
4.1.在MOJiUtils.h头文件中import StringUtils,如图所示:

4.2.选中项目,找到targets下的MOJiUtils,找到Build Phases下的Headers项,把Project下的StringUtils.h文件拖拽至Public中,如图所示:


然后,编译一下,在项目下的Products文件夹中找到MOJiUtils.framework,鼠标右键就可以找到该框架所在的文件路径,如图:


以上就是创建Framework项目的基本步骤。
二、如何在iOS项目中使用和调试Framework?
1.在已创建的框架项目中,创建target,然后在iOS平台下选择Single View App,暂定项目名为:MOJiUtils-debug,并点击Finish按钮完成调试项目创建,如下图所示:




2.在MOJiUtils-debug项目添加MOJiUtils框架,如图所示:

3.然后在ViewController控制器中引用该工具,如图所示:

接下来,就可以直接在MOJiUtils-debug项目中进行框架的各种调试了。
三、制作xcframework
1.编辑Scheme

2.为MOJiUtils框架创建新的脚本事件:

3.Provide build settings from选择MOJiUtils,然后在箭头指向的区域输入脚本命令(该命令可向同事获得),如图所示:

4.然后该项目的Build Configuration选择Release,如图所示:

5.继续检查设置Build Active ArchitectureOnly,如图所示:

6.紧接着在已选定的MOJiUtils框架后,分别用模拟器跟设备Build一次,如图所示:

7.这时候Products下的框架就会由红色变成白色字体,如图所示:

8.最后找到Release-universal下的MOJiUtils.xcframework,该框架就是我们最终要的xcframework框架,如图所示:

最后,如果发现Release-universal找不到对应的xcframework,或者xcframework下没有相关的打包文件,那么需要检查框架 -> build settings -> Build Libraries for Distribution是否为YES。如果为NO,请设置为YES,重新build,搞定!