Xcode 7 条警告:目标文件是为比链接更新的 iOS 版本构建的

Xcode 7 warnings: object file was built for newer iOS version than being linked

我最近将 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 台设备进行的测试中)毫无问题地向 iOS 7.3 发送推送通知?

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

编辑: 我给 google 发了邮件,他们说高层会调查的。同时,如果您正在阅读本文并且对警告感到困扰,也可以发送电子邮件,以便鼓励他们处理它。

这只是意味着 GCM 所依赖的库之一(此处为 Protocol Buffers)是为 8.3 构建的,尽管它与 GCM 的最小 sdk 版本(即 7.0)兼容。 XCode 7 只是更严重,并将其报告为警告,但它始终存在,只是以前的版本没有报告。

总的来说,这只是无害的,一切都应该工作正常。此外,除非 Google 通过使用最低 sdk 版本 (7.0) 构建所有依赖项来修补 GCM,否则您无能为力。

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

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

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

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

我的解决方法:

  1. 检查 "Deployment Target" 等于 Podfile "Platform"
  2. 删除派生数据(/Users/yourUser/Library/Developer/Xcode)
  3. Pod 安装(终端)
  4. Clean/Build 项目

P.s。如果需要可以添加更多信息。

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

具体来说,似乎是 GoogleInterchangeUtilities 从 1.0.0 升级到 1.1.0 才起作用。

如果您看到这个,"pod update" 应该会让一切变得更好!

在我的例子中,原因是我刚刚更新了 pods,然后将 deployment target 更改为低于之前的水平,并收到了这样的警告。 运行 pod 再次更新解决问题。

targets/BuildSettings/Linking/Other链接器标志中,添加

-w

为我关闭警告。