iOS9的新特性以及適配方案-----轉載

2015年9月8日,蘋果宣佈iOS 9操做系統的正式版在太平洋時間9月16日正式推出,北京時間9月17日凌晨1點推送。html

新的iOS 9系統比iOS8更穩定,功能更全面,並且還更加開放。iOS 9加入了更多的新功能,包括更加智能的Siri,新加入的省電模式。iOS 9爲開發者提供5000個全新的API。
iOS9新的特性python

這對於使用者來講當然是一個好消息,每一次版本更新帶來的都是更多的便利和更全面的功能,接受新的系統當然會有一些不適應,新的系統也有可能會有一些缺陷,可是至少蘋果在不斷地更新,讓咱們體驗更好的產品.ios


然而,對於咱們開發者來講,這就不能說是一個好消息了,系統更新迭代,伴隨的是咱們須要快速的接受新的知識,掌握新的技巧,以及大量的修改咱們的工程,不過也沒辦法,誰讓咱們是程序員呢,不更新本身就會被科技淘汰,相信不少朋友在這上面被坑過,那麼請繼續往下看.程序員

步入正題,最近一段時間,我總結了前一段時間遇到的一些伴隨新系統出現的問題,通過本身的測試以及網上的資料,同時總結了解決方案.api

接下來讓咱們更新一下咱們的知識吧!安全

1. 限制HTTP協議,所有改用更安全的HTTPS

iOS9讓全部的HTTP默認使用了HTTPS,原來的HTTP協議傳輸都改爲TLS1.2協議進行傳輸。直接形成的狀況就是App發請求的時候彈出網絡沒法鏈接。
對於這個問題的解決方案,網上有一篇博客已經總結的很好了,我在這就簡要的說明怎麼處理這種問題.服務器

HTTPS和HTTP的區別在於哪裏呢?
舉個簡單的栗子:原來的 HTTP 是塑料水管,容易被戳破;那麼現在新設計的 HTTPS 就像是在原有的塑料水管以外,
再包一層金屬水管。一來,原有的塑料水管照樣運行;二來,用金屬加固了以後,不容易被戳破。

Apple讓你的HTTP採用SSL/TLS協議,就是讓你從HTTP轉到HTTPS.
不使用SSL/TLS的HTTP通訊,就是不加密的通訊!

全部信息明文傳播,帶來了三大風險:
竊聽風險(eavesdropping):第三方能夠獲知通訊內容。
篡改風險(tampering):第三方能夠修改通訊內容。
冒充風險(pretending):第三方能夠冒充他人身份參與通訊。

SSL/TLS協議是爲了解決這三大風險而設計的:
全部信息都是加密傳播,第三方沒法竊聽。
具備校驗機制,一旦被篡改,通訊雙方會馬上發現。
配備身份證書,防止身份被冒充。
  • 在 Info.plist 中聲明,倒退回不安全的網絡請求依然能讓App訪問指定http,甚至任意的http(蘋果不建議這麼作):

須要添加的節點

參考 :http://www.cnblogs.com/endtel/p/4810042.html
NSAppTransportSecurity - NSAllowsArbitraryLoads
這個子節點的意思是:是否仍然容許加載?!微信

設爲YES的話就將禁用了AppTransportSecurity轉而使用用戶自定義的設置,這個問題就解決了。markdown

2. Bitcode

應該有朋友在真機調試的時候發如今使用微博微信等第三方SDK的時候,會提示報錯,網絡

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

Xcode默認開啓bitcode模式,bitcode的理解應該是把程序編譯成的一種過渡代碼,而後蘋果再把這個過渡代碼編譯成可執行的程序。bitcode也容許蘋果在後期從新優化咱們程序的二進制文件,能夠直接理解爲App瘦身


解決方式:

  1. 某些第三方庫還不支持bitcode,咱們只能等待庫的開發者升級了此項功能.(這個是咱們所不能掌握的,嘿嘿)
  2. 直接禁用bitcode,禁用的方法就是找到以下配置,選爲NO.注意:iOS中bitcode是默認YES,watchOS中bitcodes是不讓改的必須爲YES。

    選爲NO禁用

3. 企業級分發

在iOS8只是彈出一個窗問你是否須要讓手機信任這個應用,可是在iOS9卻直接禁止,若是真的想信任須要本身去手動開啓。相似於Mac系統從未知開發者處下載的dmg直接打不開,而後要到系統偏好設置的安全性與隱私手動打開。
解決方式:

  • 設置-->通用--->描述文件 自行添加信任.
選擇描述文件
添加信任
這個跟着找一下就找到了。

4. URL scheme

URL scheme通常使用的場景是應用程序有分享或跳其餘平臺受權的功能,分享或受權後再跳回來.
在iOS8並無作過多限制,可是iOS9須要將你要在外部調用的URL scheme列爲白名單,才能夠完成跳轉.
若是iOS9沒作適配 會報以下錯誤 :

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

例如在實現第三方登陸時,不能直接跳轉到相應的app直接獲取權限.
解決方式爲:

  • 設置應用白名單 不然不能直接關聯上你手機裏的應用
    在info.plist中加入
    <key>LSApplicationQueriesSchemes</key> <array> <!-- 微信 URL Scheme 白名單--> <string>wechat</string> <string>weixin</string> <!-- 新浪微博 URL Scheme 白名單--> <string>sinaweibohd</string> <string>sinaweibo</string> <string>sinaweibosso</string> <string>weibosdk</string> <string>weibosdk2.5</string> <!-- QQ、Qzone URL Scheme 白名單--> <string>mqqapi</string> <string>mqq</string> <string>mqqOpensdkSSoLogin</string> <string>mqqconnect</string> <string>mqqopensdkdataline</string> <string>mqqopensdkgrouptribeshare</string> <string>mqqopensdkfriend</string> <string>mqqopensdkapi</string> <string>mqqopensdkapiV2</string> <string>mqqopensdkapiV3</string> <string>mqzoneopensdk</string> <string>wtloginmqq</string> <string>wtloginmqq2</string> <string>mqqwpa</string> <string>mqzone</string> <string>mqzonev2</string> <string>mqzoneshare</string> <string>wtloginqzone</string> <string>mqzonewx</string> <string>mqzoneopensdkapiV2</string> <string>mqzoneopensdkapi19</string> <string>mqzoneopensdkapi</string> <string>mqzoneopensdk</string> <!-- 支付寶 URL Scheme 白名單--> <string>alipay</string> <string>alipayshare</string></array>

5. statusBar

之前咱們爲了可以實時的控制頂部statusbar的樣式,可能會在喜歡使用

[[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent] [[UIApplication sharedApplication]setStatusBarHidden:YES];

可是這麼作以前須要將 info.plist 裏面加上View controller-based status bar appearance BOOL值設爲NO,就是把控制器控制狀態欄的權限給禁了,用UIApplication來控制。
可是這種作法在iOS9不建議使用了,建議咱們使用把那個BOOL值設爲YES,而後用控制器的方法來管理狀態欄好比。

- (UIStatusBarStyle)preferredStatusBarStyle { return UIStatusBarStyleLightContent; }

6. 字體

iOS9中,中文系統字體變爲了專爲中國設計的「蘋方」,字體有輕微的加粗效果,而且最關鍵的是字體間隙變大了!
因此不少本來寫死了width的label可能會出現「...」的狀況。
包括在不少時候咱們自動計算行高行寬的時候出現誤差,致使一些不可知的錯誤
解決方式:

// 字體的大小
CGSize size = [title sizeWithAttributes:@{NSFontAttributeName: [UIFont systemFontOfSize:14.0f]}];
CGSize adjustedSize = CGSizeMake(ceilf(size.width), ceilf(size.height));
加上向上取整 ceilf()就能解決了.

7. AFNetworking

爲了迎合iOS新版本的升級, AFNetworking在3.0版本中刪除了基於 NSURLConnection API的全部支持。

若是你的項目之前使用過這些API,建議當即升級到基於 NSURLSession 的API的AFNetworking的版本。

具體解決方案我將會過幾天在另外一篇文章中詳細說明,關於AFNetworking 3.0的遷移,若是有感興趣的朋友能夠關注下。

以上就是我所總結的有關於iOS9的新特性以及適配方案,可能還會有一些遺漏或者錯誤的地方,

歡迎你們指出和補充,知識只有交流才能進步,讓咱們一塊兒成長,一塊兒學習,一塊兒提升本身!

轉自:http://www.cnblogs.com/congli0220/

相關文章
相關標籤/搜索