iOS開發:在多平台、裝置及64位架構上運行

來源:互聯網
上載者:User

標籤:相容 ios 64bit achitecture ios7

   最近在新工程上線是遇到很多適配的問題,尤其是舊工程64位裝置的適配,現在整理一下。

Base SDK vs. Deplyment Target

1.配置Base SDK設定

   1)選擇工程導航面板上的工程檔案

   2)編輯面板上搜尋base sdk

650) this.width=650;" src="http://s3.51cto.com/wyfs02/M00/27/47/wKiom1Nxn2uSUkobAABEc-GNbzE945.jpg" title="base SDK.png" alt="wKiom1Nxn2uSUkobAABEc-GNbzE945.jpg" />

   Base SDK設定引導編譯器使用該版本的SDK編譯和構建應用,也就是說,它會直接控制應用使用哪些API。

2.Deplyment Target運行應用需要的最低作業系統版本

650) this.width=650;" src="http://s3.51cto.com/wyfs02/M02/27/47/wKiom1Nxn4DwPSDjAAAtytrqB3E411.jpg" title="deployment target.png" alt="wKiom1Nxn4DwPSDjAAAtytrqB3E411.jpg" />

   支援多個SDK時的注意事項:

  1. 架構的可用性有時新的SDK會增加一個完整架構,較早的作業系統上該架構是停用如iOS5的Twitter.frame,只對iOS5以上的裝置可用。同理還有,iOS6中的PassKit.frameworkiOS7中的GameController.Framework

  2. 類的可用性有時新SDK可能在已有架構中增加了新類。這意味著即使該架構連結了,也並不所有的符號都能在早期作業系統中可用。如iOS7裡UIKit.framework中定義的NSLayoutManager類。檢查控制項是否可用:

    if ([NSLayoutManager class]) {       //使用該類   } else {       //   }


方法的可用性

  • 檢查某個類是否存在某個方法:

    if ([self.view respondsToSelector:@selector(setTintColor:)]) {    //設定tintColor}


  • 如果檢量的方法是C全域函數

    if(CFunction != NULL) {     CFunction(a); }


  • 檢查架構、類和方法的可用性

  1.   開發人員文檔

  2.   iOS標頭檔中的宏

  • 檢測裝置及判斷功能  
    正確的方法是,應該來檢測硬體或感應器的可用性,而不是假設裝置具有某些功能。

  • 檢測硬體和感應器

    iOS6 PTL例子的源碼:

    https://github.com/iosptl/ios6ptl/tree/master/ch16/UIDeviceAdditions

iPhone5和5s的支援

Auto Layout自動調整CAlayer以相容iPhone5


-(void)viewWillLayoutSubviews {    self.patternLayer.frame = self.view.bounds;    [super viewWillLayoutSubviews];}

iPhone 5s 和新的64位架構iPhone 5s支援一種新的指令:arm64。

64位模擬器要配置成x86_64的指令。

在“Build Setting”中將“Architectures”改成“Standard Architectures (including 64-bit)”

650) this.width=650;" src="http://s3.51cto.com/wyfs02/M02/27/6D/wKioL1Ny7XOQT0gNAADN3-Esk78345.jpg" title="architecture.png" alt="wKioL1Ny7XOQT0gNAADN3-Esk78345.jpg" />

轉換成iOS7注意的問題

  • Auto Layout

  • 支援 iOS6

  • Application Icon :iOS7 ICON尺寸不同

  • 無加粗線框的按鈕

  • Tint Color:iOS7新添屬性

  • Artwork Updates:iOS7支援更多藝術字

過渡到64位架構

第一步是用NSInteger、NSUInteger、CGFloat變為float、int。如果你編譯一個應用,用NSInteger會用64位 integers(long) 代替 32位integers(int)。CGFloat同理。

比較常見的問題是,tableview行高傳回值是flaot而非CGFloat,表格無法正常顯示。


參考文檔:

《iOS6 開發實戰》

iOS 7: 如何為iPhone 5S編譯64位應用

開發人員文檔:64-Bit Transition Guide


本文出自 “現實的理想主義者” 部落格,請務必保留此出處http://sookie.blog.51cto.com/5955569/1410391

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.