Architectures
這代表,在這個項目里你想要Xcode編譯的目標設備列表。
Valid Architectures
還不是太明確這個設置的意圖,但是一般來說是不需要更改的,和Architectures一樣就可以。
在Xcode5.1里的 Valid Architectures 設置里, 默認為 Standard architectures(armv7,armv7s,arm64),如果你想改的話,自己在other中更改。
原因解釋如下:
使用 standard architectures (including 64-bit)(armv7,armv7s,arm64) 參數,則打的包里面有32位、64位兩份代碼,
在iPhone5s( iPhone5s的cpu是64位的 )下,會首選運行64位代碼包,
其余的iPhone( 其余iPhone都是32位的,iPhone5c也是32位 ), 只能運行32位包,
但是包含兩種架構的代碼包,只有運行在ios6,ios7系統上。
這也就是說,這種打包方式,對手機幾乎沒啥要求,但是對系統有要求,即ios6以上。
而使用 standard architectures (armv7,armv7s) 參數, 則打的包里只有32位代碼, iPhone5s的cpu是64位,但是可以兼容32位代碼,即可以運行32位代碼。但是這會降低iPhone5s的性能。 其余的iPhone對32位代碼包更沒問題, 而32位代碼包,對系統也幾乎也沒什么限制。
所以總結如下:
要發揮iPhone5s的64位性能,就要包含64位包,那么系統最低要求為ios6。 如果要兼容ios5以及更低的系統,只能打32位的包,系統都能通用,但是會喪失iPhone5s的性能。
Build Active Architecture Only
這個屬性設置為yes,是為了debug的時候編譯速度更快,它只編譯當前的architecture版本。
而設置為no時,會編譯所有的版本。
這個是設備對應的architecture:
armv6:iPhone 2G/3G,iPod 1G/2G
armv7:iPhone 3GS/4/4s,iPod 3G/4G,iPad 1G/2G/3G
armv7s:iPhone5, iPod5
arm64:iPhone5s,ipad air,ipad mini2
編譯出的版本是向下兼容的,比如你設置此值為yes,用iphone4編譯出來的是armv7版本的,iphone5也可以運行,但是armv6的設備就不能運行。
所以,一般debug的時候可以選擇設置為yes,release的時候要改為no,以適應不同設備。
通過對以上參數配置的了解,我解決了問題。
xcode5.1你的程序如果支持了arm64,那么你的所有靜態庫或者framework都要支持才可以,所以你要重新編譯一遍。