?
目錄[-]
- Xcode的Architectures和Valid Architectures的區別
- Architectures
- Valid Architectures
- 原因解釋如下:
- 參考1:
- 所有IOS設備詳情列表 List of iOS devices - Wikipedia, the free encyclopedia
- 參考2:
- iOS 7: 如何為iPhone 5S編譯64位應用。
- 參考3:
- What's the difference between “Architectures” and “Valid Architectures” in Xcode Build Settings?
- 參考4:
- Xcode 5 and iOS 7: Architecture and Valid architectures
- 參考5:
- how to stop xcode5.1 building for 64bit
- 參考6:
- 1. Xcode Build Setting Reference (蘋果官方文檔)
- 2. 64-Bit transition Guide for Cocoa Touch (蘋果官方文檔)
- 3. Xcode設置項之Architectures和Valid Architectures
作者:shede333?
主頁:http://my.oschina.net/shede333?
版權聲明:原創文章,版權聲明:自由轉載-非商用-非衍生-保持署名 |?Creative Commons BY-NC-ND 3.0
Xcode的Architectures和Valid Architectures的區別
Architectures
這代表,在這個項目里你想要Xcode編譯的目標設備列表。
Valid Architectures
還不是太明確這個設置的意圖,但是一般來說是不需要更改的。
在Xcode5.0里的Valid Architectures?設置里,有2個選項:
- 默認為
standard architectures (including 64-bit)(armv7,armv7s,arm64)
,這樣設置,你的Deployment target最低只能設置為 6.0,(在Xcode5.0.1 之后,最低能夠兼容IOS 5.1.1); standard architectures (armv7,armv7s)
,這樣設置,你的Deployment target最低能設置為 4.3;
原因解釋如下:
使用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的性能。
參考1:
所有IOS設備詳情列表 List of iOS devices - Wikipedia, the free encyclopedia
armv6:iPhone 2G/3G,iPod 1G/2G?
armv7:iPhone 3GS/4/4s,iPod 3G/4G,iPad 1G/2G/3G ,iPad Mini 1?
armv7s:iPhone5 ,iPhone5C ,iPad4?
armv8:iPhone5S ,iPad5(iPad Air), iPad Mini 2(iPad Mini Retina)
參考2:
iOS 7: 如何為iPhone 5S編譯64位應用。
Xcode 5編譯的iOS 7程序包含了32位和64位兩套二進制代碼,在32位的iOS系統上會調用32位的二進制代碼,在64位系統上會調用64位的二進制代碼,以此來解決向后兼容的問題。
同時,考慮到很多32位的程序可能在沒有重新編譯的情況下部署到64位系統上,64位的iOS系統中帶有兩套FrameWork,一套是32位的,一套是64位的。?
當64位的iOS系統運行原來的32位程序時,系統會調用32位的FrameWork作為底層支撐,當系統運行64位程序時,系統會調用64位的FrameWork作為底層支撐。也就是說,當一個iPhone 5S上同時運行32位程序和64位程序時,系統同時將32位和64位兩套FrameWork載入了內存中,所以消耗的內存也比較多。
如果一臺64位的iOS設備上運行的所有程序都是為64位系統編譯過的,iOS系統將只載入64位的FrameWork,這將節省好多內存。所以,如果大家都可以快速將程序傳換成64位的,iOS將跑得更快。真的是“大家好才是真的好”。
參考3:
What's the difference between “Architectures” and “Valid Architectures” in Xcode Build Settings?
Architectures are the ones you want to build, valid architectures are the ones you could conceive of building with your codebase.
So maybe you only want to build your binary for armv7s, but the same source code would compile fine for armv7 and armv6. So?VALID_ARCHS = armv6 armv7 armv7s
, but you set?ARCHS = armv7s
?because that's all you actually?want?to build with your code.
Or, in Apple-ese:
ARCHS (Architectures)
Space-separated list of identifiers. Specifies the architectures (ABIs, processor models) to which the binary is targeted. When this build setting specifies more than one architecture, the generated binary may contain object code for each of the specified architectures.
and:
VALID_ARCHS (Valid Architectures)
Space-separated list of identifiers. Specifies the architectures for which the binary may be built. During the build, this list is intersected with the value of ARCHS build setting; the resulting list specifies the architectures the binary can run on. If the resulting architecture list is empty, the target generates no binary.
Source:?Xcode Build Setting Reference
In practice, you leave?VALID_ARCHS
?alone and don't worry about changing it, and just fiddle with?ARCHS
to set the architectures you want to build. Typically, you set a Debug build to just?NATIVE_ARCH
, since you only want to build the debug version for the machine you'll be testing/running it on, and Release builds for the full spectrum of architectures you plan to support.
參考4:
Xcode 5 and iOS 7: Architecture and Valid architectures
Set the architecture in build setting to?Standard architectures(armv7,armv7s)
iPhone 5S is powered by A7 64bit processor. From?apple docs
Xcode can build your app with both 32-bit and 64-bit binaries included. This combined binary requires a minimum deployment target of iOS 7 or later.
Note: A future version of Xcode will let you create a single app that supports the 32-bit runtime on iOS 6 and later, and that supports the 64-bit runtime on iOS 7.
From the documentation what i understood is
- Xcode can create both 64bit 32bit binaries for a single app but the?
deployment target should be iOS7. They are saying in future it will?
be iOS 6.0 - 32 bit binary will work fine in iPhone 5S(64 bit processor).
Update (Xcode 5.0.1)?
In Xcode 5.0.1 they added the support to create 64 bit binary for iOS 5.1.1 onwards.
Xcode 5.0.1 can build your app with both 32-bit and 64-bit binaries included. This combined binary requires a minimum deployment target of iOS 5.1.1 or later. The 64-bit binary runs only on 64-bit devices running iOS 7.0.3 and later.
Update (Xcode 5.1)?
Xcode 5.1 made significant change in the architecture section. This?answer?will be a followup for you.?
Check this
參考5:
how to stop xcode5.1 building for 64bit
OP is posted the solution along with the question itself. But I feel it would be better to add it as an answer. In?Xcode 5.1
?apple made significant changes to the?architecture
?section. They made?arm64
?as part of?Standard architectures. That means the projects using the default setting will be automatically build for?arm64
?also. So?what you will do if your app does not support?arm64
?.
Doc says:
Projects not able to support 64-bit need to specifically set the architectures build setting to not include 64-bit.
How to do that?
-
Goto Targets–>Build Settings–>Architectures–>Architectures
-
Double click on the architecture will popup a menu. Choose others
-
Delete the existing row - $(ARCH_STANDARD). Add the required architectures one by one
-
Now your architecture section will look like this
參考6:
1.?Xcode Build Setting Reference (蘋果官方文檔)
2.?64-Bit transition Guide for Cocoa Touch (蘋果官方文檔)
3.?Xcode設置項之Architectures和Valid Architectures
- Xcode的Architectures和Valid Architectures的區別
- Architectures
- Valid Architectures
- 原因解釋如下:
- 參考1:
- 所有IOS設備詳情列表 List of iOS devices - Wikipedia, the free encyclopedia
- 參考2:
- iOS 7: 如何為iPhone 5S編譯64位應用。
- 參考3:
- What's the difference between “Architectures” and “Valid Architectures” in Xcode Build Settings?
- 參考4:
- Xcode 5 and iOS 7: Architecture and Valid architectures
- 參考5:
- how to stop xcode5.1 building for 64bit
- 參考6:
- 1. Xcode Build Setting Reference (蘋果官方文檔)
- 2. 64-Bit transition Guide for Cocoa Touch (蘋果官方文檔)
- 3. Xcode設置項之Architectures和Valid Architectures
作者:shede333?
主頁:http://my.oschina.net/shede333?
版權聲明:原創文章,版權聲明:自由轉載-非商用-非衍生-保持署名 |?Creative Commons BY-NC-ND 3.0
Xcode的Architectures和Valid Architectures的區別
Architectures
這代表,在這個項目里你想要Xcode編譯的目標設備列表。
Valid Architectures
還不是太明確這個設置的意圖,但是一般來說是不需要更改的。
在Xcode5.0里的Valid Architectures?設置里,有2個選項:
- 默認為
standard architectures (including 64-bit)(armv7,armv7s,arm64)
,這樣設置,你的Deployment target最低只能設置為 6.0,(在Xcode5.0.1 之后,最低能夠兼容IOS 5.1.1); standard architectures (armv7,armv7s)
,這樣設置,你的Deployment target最低能設置為 4.3;
原因解釋如下:
使用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的性能。
參考1:
所有IOS設備詳情列表 List of iOS devices - Wikipedia, the free encyclopedia
armv6:iPhone 2G/3G,iPod 1G/2G?
armv7:iPhone 3GS/4/4s,iPod 3G/4G,iPad 1G/2G/3G ,iPad Mini 1?
armv7s:iPhone5 ,iPhone5C ,iPad4?
armv8:iPhone5S ,iPad5(iPad Air), iPad Mini 2(iPad Mini Retina)
參考2:
iOS 7: 如何為iPhone 5S編譯64位應用。
Xcode 5編譯的iOS 7程序包含了32位和64位兩套二進制代碼,在32位的iOS系統上會調用32位的二進制代碼,在64位系統上會調用64位的二進制代碼,以此來解決向后兼容的問題。
同時,考慮到很多32位的程序可能在沒有重新編譯的情況下部署到64位系統上,64位的iOS系統中帶有兩套FrameWork,一套是32位的,一套是64位的。?
當64位的iOS系統運行原來的32位程序時,系統會調用32位的FrameWork作為底層支撐,當系統運行64位程序時,系統會調用64位的FrameWork作為底層支撐。也就是說,當一個iPhone 5S上同時運行32位程序和64位程序時,系統同時將32位和64位兩套FrameWork載入了內存中,所以消耗的內存也比較多。
如果一臺64位的iOS設備上運行的所有程序都是為64位系統編譯過的,iOS系統將只載入64位的FrameWork,這將節省好多內存。所以,如果大家都可以快速將程序傳換成64位的,iOS將跑得更快。真的是“大家好才是真的好”。
參考3:
What's the difference between “Architectures” and “Valid Architectures” in Xcode Build Settings?
Architectures are the ones you want to build, valid architectures are the ones you could conceive of building with your codebase.
So maybe you only want to build your binary for armv7s, but the same source code would compile fine for armv7 and armv6. So?VALID_ARCHS = armv6 armv7 armv7s
, but you set?ARCHS = armv7s
?because that's all you actually?want?to build with your code.
Or, in Apple-ese:
ARCHS (Architectures)
Space-separated list of identifiers. Specifies the architectures (ABIs, processor models) to which the binary is targeted. When this build setting specifies more than one architecture, the generated binary may contain object code for each of the specified architectures.
and:
VALID_ARCHS (Valid Architectures)
Space-separated list of identifiers. Specifies the architectures for which the binary may be built. During the build, this list is intersected with the value of ARCHS build setting; the resulting list specifies the architectures the binary can run on. If the resulting architecture list is empty, the target generates no binary.
Source:?Xcode Build Setting Reference
In practice, you leave?VALID_ARCHS
?alone and don't worry about changing it, and just fiddle with?ARCHS
to set the architectures you want to build. Typically, you set a Debug build to just?NATIVE_ARCH
, since you only want to build the debug version for the machine you'll be testing/running it on, and Release builds for the full spectrum of architectures you plan to support.
參考4:
Xcode 5 and iOS 7: Architecture and Valid architectures
Set the architecture in build setting to?Standard architectures(armv7,armv7s)
iPhone 5S is powered by A7 64bit processor. From?apple docs
Xcode can build your app with both 32-bit and 64-bit binaries included. This combined binary requires a minimum deployment target of iOS 7 or later.
Note: A future version of Xcode will let you create a single app that supports the 32-bit runtime on iOS 6 and later, and that supports the 64-bit runtime on iOS 7.
From the documentation what i understood is
- Xcode can create both 64bit 32bit binaries for a single app but the?
deployment target should be iOS7. They are saying in future it will?
be iOS 6.0 - 32 bit binary will work fine in iPhone 5S(64 bit processor).
Update (Xcode 5.0.1)?
In Xcode 5.0.1 they added the support to create 64 bit binary for iOS 5.1.1 onwards.
Xcode 5.0.1 can build your app with both 32-bit and 64-bit binaries included. This combined binary requires a minimum deployment target of iOS 5.1.1 or later. The 64-bit binary runs only on 64-bit devices running iOS 7.0.3 and later.
Update (Xcode 5.1)?
Xcode 5.1 made significant change in the architecture section. This?answer?will be a followup for you.?
Check this
參考5:
how to stop xcode5.1 building for 64bit
OP is posted the solution along with the question itself. But I feel it would be better to add it as an answer. In?Xcode 5.1
?apple made significant changes to the?architecture
?section. They made?arm64
?as part of?Standard architectures. That means the projects using the default setting will be automatically build for?arm64
?also. So?what you will do if your app does not support?arm64
?.
Doc says:
Projects not able to support 64-bit need to specifically set the architectures build setting to not include 64-bit.
How to do that?
-
Goto Targets–>Build Settings–>Architectures–>Architectures
-
Double click on the architecture will popup a menu. Choose others
-
Delete the existing row - $(ARCH_STANDARD). Add the required architectures one by one
-
Now your architecture section will look like this