美文网首页
2021创建Swift Framework

2021创建Swift Framework

作者: 麻辣柠檬 | 来源:发表于2021-12-03 10:11 被阅读0次
  1. 新建一个iOS framework项目

  2. 设置项目版本号

  3. 到build setting中,将【Build Active Architecture Only】改为NO。默认是Yes,意思是只对当前平台进行编译

  4. 如果使用Xcode 12及以上版本编译出的【模拟器framework】,是包含arm64结构的,目的是适应M1芯片的mac模拟器。这会在合并真机与模拟器文件的时候造成冲突。所以需要在【Excluded Architectures】中的 【Release】 添加【Any iOS Simulator SDK】 ,并设置为 arm64。意思是编译framework时,对模拟器版本移除所有的arm64结构。可以通过【lipo -info】命令来查看包含的结构。注意【arm64】中间没有空格,如果不小心多打了个空格会不起作用。

4.1 【Mach-O Type】 修改为 【static Library】

  1. 【Bitcode】 默认为Yes,可以根据需要进行更改,或者使用默认即可。

  2. 在进行编译前,对所有的【edit scheme】选项设置为【release】。然后选择设备对【Any iOS device】编译一次,再对随意一个模拟器编译一次。

  3. 之后对项目中的【framework】文件【show in finder】

  4. 会出现两个文件夹,一个是真机版本的framework,一个是模拟器版本的framework

  5. 找到framework文件夹下【与framework名称相同但是没有后缀的文件】,以下简称【目标文件】

  6. 打开终端,使用命令 lipo -info [目标文件的路径]

  7. 例如 lipo -info /User/xx/xx/xx/目标文件

  8. 之后会显示该文件包含的内容,真机一般为 arm64 与 armv7。【如果没有armv7说明你选择的iOS版本比较高,并无大碍】

  9. 模拟器一般为 x86_64,i386。如果没有执行第4步还有可能显示arm64。如果显示arm64就需要删除该framework,重新执行第四步,然后重新编译一次。【如果没有i386说明你选择的iOS版本较高,并无大碍】

  10. 接下来是合并工作。

  11. 打开终端输入 lipo -create -output [参数1] [参数2] [参数3]

  12. 该命令是合并命令,需要三个参数。参数1与参数3相同,是真机目录中【目标文件的路径】,参数2为模拟器目录中【目标文件的路径】。参数顺序传错可能会导致合并失败的问题。

  13. 之后目标文件就合并完毕了,但是还没有结束。

  14. 还需要到模拟器的framework文件夹中,将Modules下的【目标文件.swiftmodule】文件夹中所有文件合并到真机的相同目录下。

  15. 注意不要替换或覆盖文件,是将i386.xx ,x86_64.xxx等等文件,以及Project文件夹下的所有文件,一并复制到真机目录相同的位置。

  16. 这时才算真正的合并完成,然后将真机的framework文件拿到项目中

  17. 就会发现真机可以用,但是编译模拟器时,会在导入模块的位置报类似这样错,

  18. “ was created for incompatible target arm64-apple-ios10.0”

  19. 这时候在【使用该framework的项目】中再次执行第四步,屏蔽掉Debug和Release两个环境的【Any iOS Simulator SDK】的arm64,就可以用了。

  20. 因为涉及到合并modules文件夹,并且需要修改一些配置,所以网上的某些脚本文件可能有一些不能用了,有能力的可以自己写一个。

注意:在编写framework代码的时候,OC的代码需要暴露头文件,需要在Bulid Phasses中的>Headers栏目中,将要暴露的头文件拖入到public中。

但是swift不需要,swift只需要控制好open和public即可。

随便写写记录一下,就不把文章搞得那么详细了

相关文章

网友评论

      本文标题:2021创建Swift Framework

      本文链接:https://www.haomeiwen.com/subject/ujypxrtx.html