美文网首页
iOS 如何让不支持的armv7、x86_64的SDK支持这些架

iOS 如何让不支持的armv7、x86_64的SDK支持这些架

作者: 東玖零 | 来源:发表于2021-08-18 17:14 被阅读0次

背景:最近公司的App需要接个小型打印机,有三方提供iOS/Android的SDK。

当我拿到SDK,拉到原生工程,模拟器运行报错(Building for iOS simulator, but the linked library xxx.a was built for iOS)。

WeChat0430cd3e2624e0e847b75abb06474a42.png

原生工程写了很多功能,为了接个业务以后都要连接手机调试,想想都难受,和三方沟通后的回复,这个必须连真机,我建议做个兼容,模拟器能运行,调用SDK方法时判断一下是否是真机,三方回复最近比较忙,以后有时间再支持,心里顿时有一万个羊驼在奔腾。

打个支持模拟器的包那么难?

如果每个方法都做兼容确实有点麻烦,既然三方不能提供,为了我能自己调试方便就想想办法,能不能生成一个相同的库,合并到一起。


模拟器的是i386、x86_64,相关详尽的知识还需要自行搜索。


于是我自己新建立了一个静态库工程,名字建议和拿到SDK的xxAPI.h文件名相同。


WX20210818-161008@2x.png

工程创建后,我们就发现工程里有两个文件xxAPI.h和xxAPI.m。我们把三方提供的xxAPI.h里的方法名全部复制过来,然后在xxAPI.m也复制一份,将所有的方法加上大括号,需要有返回值的都返回个对类型的默认值,然后选中模拟器再Command+B,我们要的模拟器库就出来了,基本就花了5分钟吧。

WX20210818-163755@2x.png

将xxAPI.a复制到桌面的test文件夹里,打开终端cd到test文件夹,输入查看命令:

lipo -info xxAPI.a
// Architectures in the fat file: xxAPI.a are: x86_64

我们将模拟器的库名这改为xxAPI-simulator.a,然后将三方提供的xxAPI.a也拖到test文件夹,这时候我就开始合并,合并的命令如下:

lipo -create xxAPI-simulator.a xxAPI.a -output lib.a
// 等待命令执行完毕

打开test文件夹,就发现lib.a文件,将这个新出炉的静态库放重新导入到工程,选择模拟器运行,app成功run起来。

code业务好几天,当我准备打包时发现报错,报错如下:

xx.xcodeproj The linked library 'libxxAPI.a' is missing one or more architectures required by this target: armv7.
'Pods_xx.framework' is missing one or more architectures required by this target: armv7.
WX20210818-170206@2x.png

和三方沟通后得到结果是三方提供的静态库用了一别的库不支持armv7,那我们还是自力更生吧。

网上搜索了一下架构相关的如下:目前为止Apple移动设备默认指令集(2014.8.22)


armv6 设备: iPhone, iPhone2, iPhone3G, 第一代、第二代 iPod Touch

armv7 设备: iPhone3GS, iPhone4, iPhone4S, iPad, iPad2, iPad3(The New iPad), iPad mini,iPod Touch 3G, iPod Touch4

armv7s设备: iPhone5, iPhone5C, iPad4(iPad with Retina Display)

arm64 设备: iPhone5S, iPad Air, iPad mini2(iPad mini with Retina Display)


网上搜索了很多没有太详尽的资料(时间有限),iphone 5s 以后的手机都是arm64架构吧。

当前是2021年8月iphone 5s及以前的手机应该都淘汰了吧,那么我们就暂时忽略这些设备,就算有老设备,至少能安装上,这个打印业务用不了,但其他业务可以用啊!!!!

于是我打开静态库工程,将模拟器换成设备,将打包设置成armv7然后Command+B,一会儿armv7的包就出来,重复上面的方法将armv7合并到新生成的库上,更新原工程里的静态库,打包就正常了。


WX20210818-170457@2x.png

注意:自行编译支持的架构下对应方法实体是空的,肯定是达不到三方提供效果,只是为了用起来方便,此方法是个野路子,建议还是三方提供较好。

疑问:最新流行的手机都支持arm64,只支持arm64打包还小,他不香嘛?那我们打包只支持arm64不可以嘛?答:只支持arm64那当然是可以的,不过xcode当前的默认配置是包含armv7的,手动去armv7打包xcode会有提示,既然官有提示那一定有他的道理(暂且不研究),所以支持一下默认配置还是较好的。

相关文章

网友评论

      本文标题:iOS 如何让不支持的armv7、x86_64的SDK支持这些架

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