2015年9月8日,蘋果宣布iOS 9操作系統的正式版在太平洋時間9月16日正式推出,北京時間9月17日凌晨1點推送。
新的iOS 9系統比iOS8更穩定,功能更全面,而且還更加開放。iOS 9加入了更多的新功能,包括更加智能的Siri,新加入的省電模式。iOS 9為開發者提供5000個全新的API。
iOS9新的特性
這對于使用者來說固然是一個好消息,每一次版本更新帶來的都是更多的便利和更全面的功能,接受新的系統固然會有一些不適應,新的系統也有可能會有一些缺陷,但是至少蘋果在不斷地更新,讓我們體驗更好的產品.
然而,對于我們開發者來說,這就不能說是一個好消息了,系統更新迭代,伴隨的是我們需要快速的接受新的知識,掌握新的技巧,以及大量的修改我們的工程,不過也沒辦法,誰讓我們是程序員呢,不更新自己就會被科技淘汰,相信很多朋友在這上面被坑過,那么請繼續往下看.
步入正題,最近一段時間,我總結了前一段時間遇到的一些伴隨新系統出現的問題,經過自己的測試以及網上的資料,同時總結了解決方案.
接下來讓我們更新一下我們的知識吧!
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協議是為了解決這三大風險而設計的:所有信息都是加密傳播,第三方無法竊聽。具有校驗機制,一旦被篡改,通信雙方會立刻發現。配備身份證書,防止身份被冒充。
NSAPPTransportSecurity - NSAllowsArbitraryLoads
這個子節點的意思是:是否仍然允許加載?!
設為YES的話就將禁用了AppTransportSecurity轉而使用用戶自定義的設置,這個問題就解決了。
應該有朋友在真機調試的時候發現在使用微博微信等第三方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瘦身。
解決方式:
在iOS8只是彈出一個窗問你是否需要讓手機信任這個應用,但是在iOS9卻直接禁止,如果真的想信任需要自己去手動開啟。類似于Mac系統從未知開發者處下載的dmg直接打不開,然后要到系統偏好設置的安全性與隱私手動打開。
解決方式:
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>
以前我們為了能夠實時的控制頂部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;}
iOS9中,中文系統字體變為了專為中國設計的“蘋方”,字體有輕微的加粗效果,并且最關鍵的是字體間隙變大了!
所以很多原本寫死了width的label可能會出現“...”的情況。
包括在很多時候我們自動計算行高行寬的時候出現偏差,導致一些不可知的錯誤
解決方式:
// 字體的大小CGSize size = [title sizeWithAttributes:@{NSFontAttributeName: [UIFont systemFontOfSize:14.0f]}];CGSize adjustedSize = CGSizeMake(ceilf(size.width), ceilf(size.height));
加上向上取整 ceilf()就能解決了.
為了迎合iOS新版本的升級, AFNetworking在3.0版本中刪除了基于 NSURLConnection API的所有支持。
如果你的項目以前使用過這些API,建議立即升級到基于 NSURLsession 的API的AFNetworking的版本。
具體解決方案我將會過幾天在另一篇文章中詳細說明,關于AFNetworking 3.0的遷移,如果有感興趣的朋友可以關注下。
以上就是我所總結的有關于iOS9的新特性以及適配方案,可能還會有一些遺漏或者錯誤的地方,
歡迎大家指出和補充,知識只有交流才能進步,讓我們一起成長,一起學習,一起提高自己!
新聞熱點
疑難解答