整理iOS9適配中出現的坑,ios9適配

來源:互聯網
上載者:User

整理iOS9適配中出現的坑(圖文),ios9適配

本文主要是說一些iOS9適配中出現的坑,如果只是要單純的瞭解iOS9新特性可以看瞄神的開發人員所需要知道的 iOS 9 SDK 新特性。9月17日淩晨,蘋果給使用者推送了iOS9正式版,隨著有使用者陸續升級iOS9,也就逐漸的衍生出了一系列的問題,筆者也在趕忙為自己維護的App做適配,本文寫的一些坑基本都是親身體驗了。

一、NSAppTransportSecurity

iOS9讓所有的HTTP預設使用了HTTPS,原來的HTTP協議傳輸都改成TLS1.2協議進行傳輸。直接造成的情況就是App發請求的時候彈出網路無法串連。解決辦法就是在項目的info.plist 檔案裡加上如下節點:

NSAppTransportSecurity - NSAllowsArbitraryLoads

這個子節點的意思是:是否允許任性的載入?! 設為YES的話就將禁用了AppTransportSecurity轉而使用使用者自訂的設定,這個問題就解決了。

如果你不是在董鉑然部落格園看到本文,請點擊查看原文。

 

上面說是蘋果限制了HTTP協議,但是也並不是說所有的HTTPS都能完美適配iOS9了。

舉個栗子,從app內起webView載入https的網頁。建立個項目寫幾行起網頁的代碼

- (void)loadView{    UIWebView *web = [[UIWebView alloc]initWithFrame:[UIScreen mainScreen].bounds];    self.view = web;}- (void)viewDidLoad {    [super viewDidLoad];        UIWebView *web = (UIWebView *)self.view; //董鉑然    NSURL *url = [NSURL URLWithString:@"https://github.com/"];    NSURLRequest *request = [NSURLRequest requestWithURL:url];    [web loadRequest:request];}

中間的url就是我們想要載入的https地址,用https://baidu.com/ 和 https://github.com/ 分別試一下,結果不同

  

github的網頁能開啟,百度的網頁打不開,下面列印了一行log

NSURLSession/NSURLConnection HTTP load failed (kCFStreamErrorDomainSSL, -9802)

原因是蘋果的官方資料說首先必須要基於TLS 1.2版本協議。然後認證的加密的演算法還需要達到SHA256或者更高位的RSA密鑰或ECC密鑰,如果不符合,請求將被中斷並返回nil.

在瀏覽器中是可以直接查看這個網站的密碼編譯演算法的,先點綠鎖再點認證資訊。

從右邊兩張圖可以看出,github帶RSA加密的SHA-256符合蘋果的要求,所以才可以展示。

針對百度的情況可以在info.plist中配置如下,如果網站引用的比較多應該是需要針對每個網站進行配置。

NSAppTransportSecurity,NSExceptionDomains,NSIncludesSubdomains,NSExceptionRequiresForwardSecrecy,NSExceptionAllowInsecureHTTPLoads 寫在下面便於複製。

其中的ForwardSecrecy理解為超前的密碼保護演算法,在官方資料裡有寫,一共是11種。配置完畢百度可以訪問。

   

  

二、Bitcode

bitcode的理解應該是把程式編譯成的一種過渡代碼,然後蘋果再把這個過渡代碼編譯成可執行檔程式。bitcode也允許蘋果在後期重新最佳化我們程式的二進位檔案,有類似於App瘦身的思想。

用了xcode7的編譯器編譯之前沒問題的項目可能會出現下列報錯。

XXXX’ does not contain bitcode. You must rebuild it with bitcode enabled (Xcode setting ENABLE_BITCODE), obtain an updated library from the vendor, or disable bitcode for this target. for architecture arm64

問題的原因是:某些第三方庫還不支援bitcode。要不然是等待庫的開發人員升級了此項功能我們更新庫,要不就是把這個bitcode禁用。

禁用的方法就是找到如下配置,選為NO.(iOS中bitcode是預設YES,watchOS中bitcodes是不讓改的必須YES。)

 

三、設定信任

這一條只和企業級應用或inhose 有關,和AppStore渠道的應用無關。

在iOS8隻是彈出一個窗問你是否需要讓手機信任這個應用,但是在iOS9卻直接禁止,如果真的想信任需要自己去手動開啟。類似於Mac系統從未知開發人員處下載的dmg直接打不開,然後要到系統喜好設定的安全性與隱私手動開啟。 展示左邊iOS8,右邊iOS9

 

使用者需要去 設定---》通用---》描述檔案 裡面自行添加信任。

這種問題的處理方法也就兩種:1.提前周知暫時不要升級iOS9  2.大多是公司員工使用的企業級應用,群發一個指導郵件。 

 

四、字型

iOS8中,字型是Helvetica,中文的字型有點類似於“華文細黑”。只是蘋果手機內建渲染,所以看上去可能比普通的華文細黑要美觀。iOS9中,中文系統字型變為了專為中國設計的“蘋方” 有點類似於一種word字型“幼圓”。字型有輕微的加粗效果,並且最關鍵的是字型間隙變大了!

所以很多原本寫死了width的label可能會出現“...”的情況。

 iOS8

 iOS9 蛋疼

上面這兩張圖也可以直觀的看出同一個介面,同一個label的變化。

所以為了在介面顯示上不出錯,就算是固定長度的文字也還是建議使用sizetofit 或者ios向上取整 ceilf() 或者提前計算

    CGSize size = [title sizeWithAttributes:@{NSFontAttributeName: [UIFont systemFontOfSize:14.0f]}];    CGSize adjustedSize = CGSizeMake(ceilf(size.width), ceilf(size.height));

 

五、URL scheme

URL scheme一般使用的情境是應用程式有分享或跳其他平台授權的功能,分享或授權後再跳回來。

在iOS8並沒有做過多限制,但是iOS9需要將你要在外部調用的URL scheme列為白名單,才可以完成跳轉

如果iOS9沒做適配 會報如下錯誤

canOpenURL: failed for URL : "mqzone://qqapp" - error: "This app is not allowed to query for scheme mqzone"

具體的解決方案也是要在info.plist中設定 LSApplicationQueriesSchemes 類型為數組,下面添加所有你用到的scheme

 

六、tableView

雖然現在的iOS9已經推送正式版了,但是iOS9使用時還是會感覺到App比以前更加卡頓了,tableView拖動時卡頓顯示的最為明顯。 並且之前遇到一個bug,原本好的項目用xcode7一編譯,tableView重新整理出了問題 ,[tableView reloadData]無效 有一行cell明明改變了但是重新整理不出來。 感覺可能是這個方法和某種新加的特性衝突了,猜測可能是reloadData的操作被延遲到下一個RunLoop執行最終失效。

解決的方法是,注釋[tableView reloadData],改用局部重新整理,問題居然就解決了。

[self.tableView reloadSections:[NSIndexSet indexSetWithIndex:0] withRowAnimation:UITableViewRowAnimationNone];

 

如果你不是在董鉑然部落格園看到本文,請點擊查看原文。 

暫時遇到這些問題,感覺iOS9的出現讓所有iOS開發都是菊花一緊,希望蘋果這種大刀闊斧做改變,特立獨行的風格發展下去以後別和government 產生矛盾,然後公司倒閉 導致開發人員失業,也許是我想多了。預祝所有的iOS都能及時的做好適配改完bug,下個版本一上線,所有問題都解決。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.