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

Jon*_*ive 50 objective-c ios xcode7 xcode7-beta4

我最近将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)
Run Code Online (Sandbox Code Playgroud)

和一些更像是libProtocolBuffers.a的所有部分.

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

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

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

eva*_*ent 35

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

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

  • 该警告仅在GCM的背景下是无害的,因为我已向Google人员证实该库实际上是向后兼容的,直到iOS 7.0.它只是用错误的"min_ios_version"构建而且Google已经确认他们将在下一个版本中修复警告. (4认同)
  • 如果无论它的构建版本是否有效,链接器警告的重点是什么? (2认同)

Leg*_*ess 34

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

在这种情况下,图书馆不正式支持低于8.3的目标.虽然将此库链接到具有"最低部署目标"的目标仍然有效,但如果在运行早于8.3的系统的设备上执行任何仅8.3代码,则它可能会在运行时产生崩溃.

开发人员将8.3设置为最小目标是有原因的,不应忽略此警告.在这种情况下它可能是无害的,但在其他情况下它不一定是无害的!

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


小智 21

我的修复方式:

  1. 检查"部署目标"是否等于Podfile"平台"
  2. 删除DerivedData(/ Users/yourUser/Library/Developer/Xcode)
  3. Pod安装(终端)
  4. 清洁/建造项目

如果需要,可以添加更多信息.


wj2*_*061 8

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

-w

为我保持警告.

  • 这使所有警告都沉默了.所以不是一个好的解决方案 (9认同)
  • 您不应该忽略警告,它们存在是有原因的。 (2认同)