3

我刚刚更新到新发布的 Xcode 5。我正在开发一个使用 Google Maps iOS SDK 的 iOS 应用程序。当我在 Xcode 4 中进行开发时,我根据 Google将 SDK 添加到项目Architectures的说明的第 7 步更改了项目设置中的设置:

7. 选择您的项目,而不是特定目标,然后打开 Build Settings 选项卡。将 Architectures 的默认值替换为 armv7。在其他链接器标志部分中,添加 -ObjC。如果这些设置不可见,请将 Build Settings 栏中的过滤器从 Basic 更改为 All。

在 Xcode 4 中一切都很好。但是,当我在 Xcode 5 中打开我的项目时,我在问题导航器中看到以下警告:

验证项目设置

更新到推荐设置

当我单击警告时,Xcode 会将我带到我的项目设置并显示一个带有“取消”和“执行更改”按钮的弹出窗口,以及它想要进行的更改的以下描述

Project 'Your Project' - 自动选择架构

项目“您的项目”会覆盖架构设置。这将删除设置并允许 Xcode 根据活动平台和部署目标可用的硬件自动选择架构。

我尝试点击“Perform Changes”并让 Xcode 做它想做的任何事情,并且该应用程序仍然为模拟器构建得很好。但是,当我尝试插入 iPhone 5(支持 ARMv7S)并在其上运行时,应用程序无法构建并出现以下链接器错误:

Ld /Users/macmini/Library/Developer/Xcode/DerivedData/Your_App-bmrouudjlblpafdjzhpwcuekzgwu/Build/Products/Debug-iphoneos/Your\ App.app/Your\ App normal armv7s
    cd "/Users/macmini/Documents/Your App"
    setenv IPHONEOS_DEPLOYMENT_TARGET 6.1
    setenv PATH "/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin:/Applications/Xcode.app/Contents/Developer/usr/bin:/usr/bin:/bin:/usr/sbin:/sbin"
    /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang -arch armv7s -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS7.0.sdk -L/Users/macmini/Library/Developer/Xcode/DerivedData/Your_App-bmrouudjlblpafdjzhpwcuekzgwu/Build/Products/Debug-iphoneos -F/Users/macmini/Library/Developer/Xcode/DerivedData/Your_App-bmrouudjlblpafdjzhpwcuekzgwu/Build/Products/Debug-iphoneos -F/Users/macmini/Documents/Your\ App -filelist /Users/macmini/Library/Developer/Xcode/DerivedData/Your_App-bmrouudjlblpafdjzhpwcuekzgwu/Build/Intermediates/Your\ App.build/Debug-iphoneos/Your\ App.build/Objects-normal/armv7s/Your\ App.LinkFileList -dead_strip -ObjC -fobjc-arc -fobjc-link-runtime -miphoneos-version-min=6.1 -framework SystemConfiguration -framework MapKit -framework QuartzCore -framework OpenGLES -lz -licucore -lc++ -framework ImageIO -framework GLKit -framework CoreText -framework CoreLocation -framework AVFoundation -framework CoreData -framework UIKit -framework Foundation -framework CoreGraphics -framework GoogleMaps -Xlinker -dependency_info -Xlinker /Users/macmini/Library/Developer/Xcode/DerivedData/Your_App-bmrouudjlblpafdjzhpwcuekzgwu/Build/Intermediates/Your\ App.build/Debug-iphoneos/Your\ App.build/Objects-normal/armv7s/Your\ App_dependency_info.dat -o /Users/macmini/Library/Developer/Xcode/DerivedData/Your_App-bmrouudjlblpafdjzhpwcuekzgwu/Build/Products/Debug-iphoneos/Your\ App.app/Your\ App

ld: file is universal (2 slices) but does not contain a(n) armv7s slice: /Users/macmini/Documents/Your App/GoogleMaps.framework/GoogleMaps file '/Users/macmini/Documents/Your App/GoogleMaps.framework/GoogleMaps' for architecture armv7s
clang: error: linker command failed with exit code 1 (use -v to see invocation)

一旦我恢复了 Xcode 所做的自动更改,我的应用程序再次为 iPhone 5 编译良好 - 但我当然收到了警告。

我怎样才能满足 Xcode 并摆脱警告,同时仍然允许我的应用程序为 iPhone 5 成功构建?

4

3 回答 3

11

糟糕 - 碰巧的是,在发布此问题后,我只花了几秒钟的实验时间就自己找到了答案:

  1. 单击问题导航器中的“验证项目设置”警告。
  2. 取消选中“自动选择架构”建议更改左侧的复选框。
  3. 单击“完成”(或“执行更改”,如果列表中还有您实际想要进行的其他更改 - 在我的情况下,这是唯一的更改)。

现在你的设置和以前一样,你可以为 iPhone 5 构建,但警告消失了。

我现在因为花了我的时间发布这个问题而感到有点昏暗,但我将问题和这个答案留在这里,以防将来对任何人有帮助。

于 2013-09-19T15:47:53.553 回答
3

Google Maps SDK v1.5 现在支持 ARMv7S。从 v1.5发行说明

适用于 iOS 的 Google Maps SDK 现在附带 armv7s 切片。(问题 4745)

在您的应用中支持 ARMv7S 将提高性能,因此,如果您看到问题中描述的警告,最好的做法是将您的 Google Maps SDK 版本更新到 v1.5(或更高版本,如果您正在阅读本文未来),然后双击警告并允许 Xcode 将您的架构设置更改回默认值。

于 2013-09-22T23:15:21.457 回答
-1

链接器给您一个错误,因为您使用的GoogleMaps 框架不支持 armv7s 架构。也许最新版本的谷歌地图框架有这样的支持,或者你可能不得不等待谷歌的更新。

于 2013-09-19T15:41:38.157 回答