Xcode 6配置里定義${ARCHS_STANDARD}為armv7, arm64以及錯誤


轉發:http://www.cocoachina.com/ios/20141013/9897.html

最近一次的Xcode 6更新默認不再支持arm7s架構,究竟是要廢除不用呢還是僅僅只是一個疏忽?

目前的Xcode 6配置里定義${ARCHS_STANDARD}為armv7, arm64,當然這個定義前提是它會一再要求你刪除掉你原本設定的構建架構。如果你選擇按它所做的,你會發現你再也不能編譯任何armv7s架構的東西。

當前iPhone5的A6和iPad4的A6X兩款CPU都是armv7s架構,而之后在iPhone 5S、iPad Air以及iPad Mini Retina采用的A7處理器則是屬於64位的arm64架構。

之 前蘋果為Xcode提供了armv7s架構支持的時候使得很多采用第三方庫的開發者感到困擾,比如想使用Google Analytics,為了構建一個App就要求鏈接器所鏈接的所有靜態庫都必須支持CPU的架構。當第三方庫競相更新以支持最新架構的同時開發者們不得令 自己的App停止了對armv7s的支持。

這倒不是什么大問題,雖然或多或少存在一些瑕疵,A6一樣可以運行基於armv7架構的代碼。會讓人感到不爽的可能就是某天你的Xcode突然無法構建代碼然后告訴你一個關於丟失某架構鏈接庫的錯誤,其實不過就是因為你升級了你的Xcode而已。

Screen-Shot-2014-10-10-at-10.42.32.png

想要消滅這個錯誤輕而易舉。作為一個開發者你應該知道怎么打開Xcode的recommendation然后刪除掉你在架構設置里寫過的東西。如果設置顯示為粗體,可用"Command+Backspace"組合鍵使其恢復為項目范圍內的設置。

Screen-Shot-2014-10-10-at-10.49.50.png

如果你是提供組件而非開發的話,需要的方案可能會有所不同。你會讓開發者自行決定是否支持armv7s,因此你需要在你的靜態庫和框架內提供對armv7s架構的支持。

而 后開發者的鏈接器會選擇出應用所需的架構,你會發現在"Build Active Architecture Only"設置為No的情況下會好有好幾種架構被囊括在內。調試版本的構建默認這一設置為Yes而且只會支持當期設備或者模擬器的架構,而發行版本則默認 該項為No而且支持所有處理器架構。

在靜態庫構建日志里面你會發現一行有關所有庫及架構的,緊隨其后的一行則是關於將所有獨立庫整合進一個"碩大"的通用庫中去的。

Screen-Shot-2014-10-10-at-10.53.48.png

另一查看某一架構是否支持的方法是使用file命令:

1
2
3
4
5
file libBarCodeKit.a 
libBarCodeKit.a: Mach-O universal binary  with  3 architectures
libBarCodeKit.a ( for  architecture armv7):current ar archive random library
libBarCodeKit.a ( for  architecture arm64):current ar archive random library
libBarCodeKit.a ( for  architecture armv7s):current ar archive random library

這個庫支持了目前所有移動架構。如果你構建的是包括了模擬器架構的可運行版本的靜態庫或者靜態架構的話,那么應該是會像下面這樣:

1
2
3
4
5
6
7
file DTRichTextEditor 
DTRichTextEditor: Mach-O universal binary  with  5 architectures
DTRichTextEditor ( for  architecture armv7):current ar archive random library
DTRichTextEditor ( for  architecture armv7s):current ar archive random library
DTRichTextEditor ( for  architecture arm64):current ar archive random library
DTRichTextEditor ( for  architecture i386):current ar archive random library
DTRichTextEditor ( for  architecture x86_64):current ar archive random library

總結一下:蘋果又在此迫使我們做出新選擇:放棄對armv7s的支持,這一架構已經隨着兩代64位產品的出現而遭報銷。不過作為一個組件開發人員我認為仍然應該包括armv7s然后讓開發者去決定支不支持。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM