关于Swift5.7/Xcode14制作静态库支持架构问题

问题描述

之前按公司需求用开发一个静态库集成用,静态库是用swift开发的,在升级xcode14之前集成是没有问题的,合并包真机和模拟器都能使用。

升级xcode14之后,合并包出现了如果先编译真机后编译模拟器之后合并形成的包,拿到使用OC创建测试工程中编译模拟器可以通过,编译真机就报错,反过来如果先编译模拟器后编译真机之后合并形成的包(我这里是使用脚本自动生成合并包的不需要终端输入命令合成),拿到工程中编译真机可以通过,编译模拟器就报错。

具体错误见如下图


报错截图.png
排查问题

从上面的报错很显然是不支持的架构,开始是怀疑脚本合成的包少了一个模拟器或者真机的架构。终端输入命令查看下:


查看合并包包支持架构.png

从图中可看到两个架构都包含,但却只能编译其中一个。
回想了工程配置没有改变,但是最近升级了xcode14,会不会跟升级的xcode有关联?
于是想要尝试使用低版本的xcode去编译试试,但是我电脑系统已经升级不能使用xcode14以下的版本了,所以这个方法行不通。
然后从上面问题描述中猜测会不会因为合并包的文件被覆盖了导致只能编译成功一个架构的包
于是带着这个疑问进行继续排查...

问题原因

翻看了之前打包的版本其中header文件中有一个文件


Header中的文件.png

跟现在升级xcode14之后内容不一样。


升级xcode14之前.png

升级xcode14之后.png

升级后头部多出的#if 0 \n #elif defined(__x86_64__) && __x86_64__ 两行代码
从中可以发现x86_64就是支持模拟器的架构,缺失了支持真机的arm64架构

可以再重新编译合并一遍再看下,如果后编译模拟器会变成这样

后编译真机.png

又变成arm64了如果放到测试工程里的话就会变成模拟器编译不通过了

于是想到在后面增加一个条件 ,如下图


补充支持架构.png

再把合并包放到OC的测试工程里调试无论是模拟器还是真机都能编译成功了

你可能感兴趣的:(关于Swift5.7/Xcode14制作静态库支持架构问题)