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。
我的解决方法:
- 检查 "Deployment Target" 等于 Podfile "Platform"
- 删除派生数据(/Users/yourUser/Library/Developer/Xcode)
- Pod 安装(终端)
- Clean/Build 项目
P.s。如果需要可以添加更多信息。
仅供参考,相关 pods 的最新版本似乎已经解决了这个问题。
具体来说,似乎是 GoogleInterchangeUtilities 从 1.0.0 升级到 1.1.0 才起作用。
如果您看到这个,"pod update" 应该会让一切变得更好!
在我的例子中,原因是我刚刚更新了 pods
,然后将 deployment target
更改为低于之前的水平,并收到了这样的警告。 运行 pod
再次更新解决问题。
在targets/BuildSettings/Linking/Other链接器标志中,添加
-w
为我关闭警告。
我最近将 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。
我的解决方法:
- 检查 "Deployment Target" 等于 Podfile "Platform"
- 删除派生数据(/Users/yourUser/Library/Developer/Xcode)
- Pod 安装(终端)
- Clean/Build 项目
P.s。如果需要可以添加更多信息。
仅供参考,相关 pods 的最新版本似乎已经解决了这个问题。
具体来说,似乎是 GoogleInterchangeUtilities 从 1.0.0 升级到 1.1.0 才起作用。
如果您看到这个,"pod update" 应该会让一切变得更好!
在我的例子中,原因是我刚刚更新了 pods
,然后将 deployment target
更改为低于之前的水平,并收到了这样的警告。 运行 pod
再次更新解决问题。
在targets/BuildSettings/Linking/Other链接器标志中,添加
-w
为我关闭警告。