我最近将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发送推送通知而没有问题?
鉴于它们只是警告,我仍然可以正常编译,但我不想发布错误的代码。
修改:我通过电子邮件发送谷歌,他们说顶级人物会调查它。与此同时,如果您正在阅读此内容并受到警告的困扰,也许还会发送电子邮件,以便鼓励他们处理此事。
答案 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)
我的修复方法:
P.S。如果需要,可以添加更多信息。
答案 3 :(得分:8)
在目标/构建设置/链接/其他链接器标志中,添加
-w
为我保持警告。
答案 4 :(得分:3)
仅供参考,相关豆荚的最新版本似乎解决了这个问题。
具体来说,看起来GoogleInterchangeUtilities的升级从1.0.0升级到1.1.0就可以了。
如果您看到这一点,“pod更新”应该会让一切变得更好!
答案 5 :(得分:1)
在我的情况下,原因是我刚刚更新pods
然后将deployment target
更改为低于之前的状态并获得此类警告。再次运行pod
更新可解决此问题。