美文网首页IOS个人开发iOS菜鸟级开发iOS学习
iOS 静态库-因为CPU架构引起的小问题

iOS 静态库-因为CPU架构引起的小问题

作者: 判若两人丶 | 来源:发表于2016-10-14 21:36 被阅读960次

前言

最初 AppStore 不允许自制动态库的上传(但在14年的WWDC上开放了动态库),动态库与静态库的架构例子基本一样的。本文的内容是没什么难度的,避免在后续的开发中忽略掉这个问题,只是做一个记录。

问题

首先看一下在下面图中Xcode的报错问题:

这个错误其实比较常见了,通过Undefined symbols for architecture x86_64发现它的意思是:没有这个x86_64architecture(架构)。图中的"_OBJC_CLASS_$_Scorpio", referenced from:Scorpio就是我打包出来的静态库,这个静态库分为2种,一个是真机另一个是模拟器如下图:

导入到项目中的是真机环境下的静态库,而项目是在模拟器环境下编译的,所以才会报错。

iOS的CPU架构简单说明

其实不用去真正理解CPU架构,只要明白不同的iPhone设备,它都是有不同的CPU架构(也有相同的),我们开发的App都会在不同的CPU架构下运行。当编译时,Xcode会先看看你是在模拟器还是在真机,然后确定CPU架构,最后在明确你的静态库支不支持这个CPU架构,如果不支持编译就会报错。
来看一下iPhone设备的CPU架构(iPhone 7 Plus还不确定):

可以通过lipo -info libScorpio.a(libScorpio.a就是你得静态库)命令行来查看静态库当前支持的架构,随便找个第三方SDK (例如:个推推送) 来看看:

注意:只要支持armv7就不用再支持armv7s

个推推送的静态库是支持所有的CPU架构,它的做法就是把真机与模拟器的静态库,合并成一个静态库(合并的方法不多解释,相信大家都会)。这种做法的缺点就是静态库会很大,最好的办法就是提供2种文件给我们使用,一个是真机一个是模拟器,在App上线我们只需要真机的静态库。

静态库可以是.a或者.framework,现在我们的静态库一般都用.framework,这两种支持CPU架构的方法都是一样的。

本文章首发地址:http://www.jianshu.com/p/f2a3e5027ff8

相关文章

网友评论

  • 某非著名程序员:想问下,那个.a什么时候是真机,什么时候是模拟器?
    某非著名程序员:最近也是遇到这样的问题,项目在真机上,运行打包都没问题。在模拟器上只能release模式正常,debug模式报错,求大神指点
  • 谦言忘语:现在的第三方SDK一般都会包含模拟器和真机的架构,因为这样确实方便调试。而且,按道理来说,我们打成ipa包之后,就算SDK里面有模拟器的架构,应该也不会增加包的体积的。我觉得在打ipa包的时候,Xcode应该会自动忽略模拟器的架构的。
  • Thebloodelves:我以后遇到这个问题注意一下
  • 2a392233fc62:我试了怎么不管用
    判若两人丶: @noaicooder 哪地方不管用?

本文标题:iOS 静态库-因为CPU架构引起的小问题

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