Xcode 7警告:对象文件是为较新的iOS版本构建的,而不是链接

时间:2015-08-05 22:30:23

标签: ios objective-c xcode7 xcode7-beta4

我最近将Google云消息集成到面向iOS 7和iOS 8的应用中。刚刚抓住Xcode 7 beta 4开始支持iOS 9,现在我从链接器收到错误:

ld: warning: object file (.../Pods/GoogleInterchangeUtilities/Libraries
/libProtocolBuffers.a(Descriptor.pb.o)) was built for newer iOS version (8.3)
than being linked (7.0)

和一些更像是libProtocolBuffers.a的部分内容。

这是否意味着iOS 8.3需要使用GCM库?如果是这样,为什么Xcode 6会愉快地吐出代码(通过我在iOS 7设备测试中的所有外观)向iOS 7.3发送推送通知而没有问题?

鉴于它们只是警告,我仍然可以正常编译,但我不想发布错误的代码。

修改:我通过电子邮件发送谷歌,他们说顶级人物会调查它。与此同时,如果您正在阅读此内容并受到警告的困扰,也许还会发送电子邮件,以便鼓励他们处理此事。

6 个答案:

答案 0 :(得分:34)

这仅仅意味着GCM依赖的其中一个库(协议缓冲区)是为8.3而构建的,尽管它与GC的min sdk版本兼容,即7.0。 XCode 7更加严重,并将其作为警告报告,但它始终没有被先前版本报告。

总的来说,这只是无害的,一切都应该正常。除非Google通过使用min sdk版本(7.0)构建所有依赖关系来补丁GCM,否则你无能为力。

答案 1 :(得分:33)

实际上,这意味着所包含的库的最小部署目标为8.3,并将其与较低的最低部署目标链接会产生此警告。

在这种情况下,库不正式支持低于8.3的目标。虽然将此库链接到具有最低部署目标的目标仍然有效,但如果只有8.3代码,它可能会在运行时产生崩溃在运行旧系统而不是8.3的设备上执行。

为什么开发人员将8.3设置为最低目标,并且此警告不应被忽略。在这种情况下它可能是无害的,但在其他情况下它不一定是无害的!

要修复这些警告,请使用旧版本的库或将最低部署目标设置为8.3。

答案 2 :(得分:20)

我的修复方法:

  1. 检查"部署目标"等于Podfile" Platform"
  2. 删除DerivedData(/ Users / yourUser / Library / Developer / Xcode)
  3. Pod安装(终端)
  4. 清洁/建造项目
  5. P.S。如果需要,可以添加更多信息。

答案 3 :(得分:8)

目标/构建设置/链接/其他链接器标志中,添加

  

-w

为我保持警告。

答案 4 :(得分:3)

仅供参考,相关豆荚的最新版本似乎解决了这个问题。

具体来说,看起来GoogleInterchangeUtilities的升级从1.0.0升级到1.1.0就可以了。

如果您看到这一点,“pod更新”应该会让一切变得更好!

答案 5 :(得分:1)

在我的情况下,原因是我刚刚更新pods然后将deployment target更改为低于之前的状态并获得此类警告。再次运行pod更新可解决此问题。