58

我最近将 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 发送推送通知?

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

编辑:我给谷歌发了电子邮件,他们说高层会调查它。同时,如果您正在阅读本文并被警告所困扰,也许还可以发送电子邮件,以便鼓励他们处理它。

4

6 回答 6

37

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

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

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

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

于 2015-10-05T13:58:37.940 回答
35

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

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

于 2015-08-06T20:35:28.773 回答
23

我的解决方法:

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

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

于 2015-11-07T15:47:25.157 回答
6

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

-w

为我消除警告。

于 2016-08-24T09:47:59.187 回答
3

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

具体来说,看起来是 GoogleInterchangeUtilities 从 1.0.0 升级到 1.1.0 才成功的。

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

于 2015-12-15T04:37:45.520 回答
1

就我而言,原因是我刚刚更新pods然后更改deployment target为低于之前的水平并收到此类警告。再次运行pod更新解决了这个问题。

于 2016-06-22T21:33:15.163 回答