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。
我的方法来解决:
- 检查“部署目标”是否等于Podfile“平台”
- 删除DerivedData(/ Users / yourUser / Library / Developer / Xcode)
- Pod安装(terminal)
- 清理/build立项目
Ps如果需要,可以添加更多的信息。
在目标/构build设置/链接/其他链接器标志中 ,添加
-w
为我沉默警告。
仅供参考,最新版本的相关豆荚似乎已经解决了这个问题。
具体来说,它看起来像是把GoogleInterchangeUtilities从1.0.0升级到1.1.0这个技巧。
如果你看到这个,“pod更新”应该会更好!
在我的情况下,原因是我只是更新pods
然后将deployment target
更改为更低,然后得到这样的警告。 再次运行pod
更新解决了这个问题。