当我打开在Xcode 4中创建的Google Maps项目时,Xcode 5会警告我的架构设置

时间:2013-09-19 15:33:12

标签: ios xcode linker cpu-architecture google-maps-sdk-ios

我刚刚更新到新发布的Xcode 5.我正在开发一款使用Google Maps iOS SDK的iOS应用。回到我在Xcode 4中开发时,我在项目设置中更改了Architectures设置,根据Google instructions for adding the SDK to the project的第7步:

  

7。选择项目而不是特定目标,然后打开“构建设置”选项卡。   用armv7替换Architectures的默认值。   在Other Linker Flags部分中,添加-ObjC。如果看不到这些设置,请将Build Settings栏中的过滤器从Basic更改为All。

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

  

验证项目设置

     

更新为推荐设置

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

  

项目“您的项目” - 自动选择体系结构

     

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

我尝试点击“执行更改”并让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编译好了 - 但当然我收到了警告。

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

3 个答案:

答案 0 :(得分:10)

哎呀 - 因为它发生了这个问题,我在发布这个问题之后只花了几秒钟的时间来找到答案:

  1. 单击“问题导航器”中的“验证项目设置”警告。
  2. 取消选中“自动选择体系结构”建议更改左侧的复选框。
  3. 点击“完成”(或“执行更改”,如果列表中还有其他更改,您实际上想要制作 - 在我的情况下,这是唯一的更改)。
  4. 现在您的设置与之前一样,您可以为iPhone 5构建,但警告已经消失。

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

答案 1 :(得分:3)

Google Maps SDK v1.5现在支持ARMv7S。来自v1.5 release notes

  

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

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

答案 2 :(得分:-1)

链接器正在给您一个错误,因为您使用的 GoogleMaps框架不支持armv7s架构。也许最新版本的GoogleMaps框架有这样的支持,或者您可能需要等待Google的更新。