Xcode 7的警告:目标文件是为更新的iOS版本而build立的,而不是被链接的

我最近将Google Cloud Messaging集成到一个针对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设备testing中的所有外观),将推送通知发送到iOS 7.3而没有问题?

鉴于他们只是警告,我仍然可以编译好,但我不喜欢运送错误的代码。

编辑:我通过电子邮件发送谷歌,他们说高层人士将调查。 与此同时,如果您正在阅读本文并受到警告的困扰,也许还会发送电子邮件,以便鼓励他们进行处理。

这只是意味着GCM依赖的一个库(Protocol Buffers here)是为8.3构build的,尽pipe它与GCM的min sdk版本(即7.0)兼容。 XCode 7更为严重,并将其报告为警告,但始终没有被以前的版本报告过。

总的来说这只是无害的,一切都应该正常工作。 除非Google使用min sdk版本(7.0)构build所有依赖关系,否则就无法完成GCM。

这实际上意味着包含的库的最小部署目标是8.3,并且与较低的最小部署目标相链接会产生这个警告。

在这种情况下,图书馆没有正式支持低于8.3的目标。 如果使用最小部署目标的链接库仍然可以工作,那么如果在运行比8.3更早的系统的设备上执行8.3代码,它可能会在运行时产生崩溃。

开发者将8.3设为最低目标是有原因的,这个警告不应该被忽略。 在这种情况下可能是无害的,但在其他情况下并不一定是无害的!

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

我的方法来解决:

  1. 检查“部署目标”是否等于Podfile“平台”
  2. 删除DerivedData(/ Users / yourUser / Library / Developer / Xcode)
  3. Pod安装(terminal)
  4. 清理/build立项目

Ps如果需要,可以添加更多的信息。

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

-w

为我沉默警告。

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

具体来说,它看起来像是把GoogleInterchangeUtilities从1.0.0升级到1.1.0这个技巧。

如果你看到这个,“pod更新”应该会更好!

在我的情况下,原因是我只是更新pods然后将deployment target更改为更低,然后得到这样的警告。 再次运行pod更新解决了这个问题。