2015年9月8日,蘋果宣布iOS 9操作系統(tǒng)的正式版在太平洋時間9月16日正式推出帽揪,北京時間9月17日凌晨1點推送。
新的iOS 9系統(tǒng)比iOS8更穩(wěn)定辅斟,功能更全面转晰,而且還更加開放。iOS 9加入了更多的新功能士飒,包括更加智能的Siri查邢,新加入的省電模式。iOS 9為開發(fā)者提供5000個全新的API酵幕。
iOS9新的特性
這對于使用者來說固然是一個好消息,每一次版本更新帶來的都是更多的便利和更全面的功能,接受新的系統(tǒng)固然會有一些不適應(yīng),新的系統(tǒng)也有可能會有一些缺陷,但是至少蘋果在不斷地更新,讓我們體驗更好的產(chǎn)品.
然而,對于我們開發(fā)者來說,這就不能說是一個好消息了,系統(tǒng)更新迭代,伴隨的是我們需要快速的接受新的知識,掌握新的技巧,以及大量的修改我們的工程,不過也沒辦法,誰讓我們是程序員呢,不更新自己就會被科技淘汰,相信很多朋友在這上面被坑過,那么請繼續(xù)往下看.
步入正題,最近一段時間,我總結(jié)了前一段時間遇到的一些伴隨新系統(tǒng)出現(xiàn)的問題,經(jīng)過自己的測試以及網(wǎng)上的資料,同時總結(jié)了解決方案.
接下來讓我們更新一下我們的知識吧!
1. 限制HTTP協(xié)議,全部改用更安全的HTTPS
iOS9讓所有的HTTP默認(rèn)使用了HTTPS扰藕,原來的HTTP協(xié)議傳輸都改成TLS1.2協(xié)議進(jìn)行傳輸。直接造成的情況就是App發(fā)請求的時候彈出網(wǎng)絡(luò)無法連接芳撒。
對于這個問題的解決方案,網(wǎng)上有一篇博客已經(jīng)總結(jié)的很好了,我在這就簡要的說明怎么處理這種問題.
HTTPS和HTTP的區(qū)別在于哪里呢?
舉個簡單的栗子:原來的 HTTP 是塑料水管实胸,容易被戳破他嫡;那么如今新設(shè)計的 HTTPS 就像是在原有的塑料水管之外,
再包一層金屬水管庐完。一來钢属,原有的塑料水管照樣運行;二來门躯,用金屬加固了之后淆党,不容易被戳破。
Apple讓你的HTTP采用SSL/TLS協(xié)議讶凉,就是讓你從HTTP轉(zhuǎn)到HTTPS.
不使用SSL/TLS的HTTP通信染乌,就是不加密的通信!
所有信息明文傳播懂讯,帶來了三大風(fēng)險:
竊聽風(fēng)險(eavesdropping):第三方可以獲知通信內(nèi)容荷憋。
篡改風(fēng)險(tampering):第三方可以修改通信內(nèi)容。
冒充風(fēng)險(pretending):第三方可以冒充他人身份參與通信褐望。
SSL/TLS協(xié)議是為了解決這三大風(fēng)險而設(shè)計的:
所有信息都是加密傳播勒庄,第三方無法竊聽。
具有校驗機(jī)制瘫里,一旦被篡改实蔽,通信雙方會立刻發(fā)現(xiàn)。
配備身份證書谨读,防止身份被冒充局装。
- 在 Info.plist 中聲明,倒退回不安全的網(wǎng)絡(luò)請求依然能讓App訪問指定http劳殖,甚至任意的http(蘋果不建議這么做):
NSAppTransportSecurity - NSAllowsArbitraryLoads
這個子節(jié)點的意思是:是否仍然允許加載铐尚?! 設(shè)為YES的話就將禁用了AppTransportSecurity轉(zhuǎn)而使用用戶自定義的設(shè)置哆姻,這個問題就解決了宣增。
- 果斷讓公司升級HTTPS服務(wù)器,保障數(shù)據(jù)安全,升級方法請點我
2. Bitcode
應(yīng)該有朋友在真機(jī)調(diào)試的時候發(fā)現(xiàn)在使用微博微信等第三方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默認(rèn)開啟bitcode模式,bitcode的理解應(yīng)該是把程序編譯成的一種過渡代碼,然后蘋果再把這個過渡代碼編譯成可執(zhí)行的程序填具。bitcode也允許蘋果在后期重新優(yōu)化我們程序的二進(jìn)制文件,可以直接理解為APP瘦身匆骗。
解決方式:
- 某些第三方庫還不支持bitcode,我們只能等待庫的開發(fā)者升級了此項功能.(這個是我們所不能掌握的,嘿嘿)
-
直接禁用bitcode,禁用的方法就是找到如下配置劳景,選為NO.注意:iOS中bitcode是默認(rèn)YES,watchOS中bitcodes是不讓改的必須為YES碉就。
3. 企業(yè)級分發(fā)
在iOS8只是彈出一個窗問你是否需要讓手機(jī)信任這個應(yīng)用盟广,但是在iOS9卻直接禁止,如果真的想信任需要自己去手動開啟瓮钥。類似于Mac系統(tǒng)從未知開發(fā)者處下載的dmg直接打不開筋量,然后要到系統(tǒng)偏好設(shè)置的安全性與隱私手動打開烹吵。
解決方式:
- 設(shè)置-->通用--->描述文件 自行添加信任.
4. URL scheme
URL scheme一般使用的場景是應(yīng)用程序有分享或跳其他平臺授權(quán)的功能,分享或授權(quán)后再跳回來.
在iOS8并沒有做過多限制桨武,但是iOS9需要將你要在外部調(diào)用的URL scheme列為白名單肋拔,才可以完成跳轉(zhuǎn).
如果iOS9沒做適配 會報如下錯誤 :
canOpenURL: failed for URL : "[mqzone://qqapp](mqzone://qqapp)" - error: "This app is not allowed to query for scheme mqzone"
例如在實現(xiàn)第三方登錄時,不能直接跳轉(zhuǎn)到相應(yīng)的app直接獲取權(quán)限.
解決方式為:
- 設(shè)置應(yīng)用白名單 否則不能直接關(guān)聯(lián)上你手機(jī)里的應(yīng)用
在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**
以前我們?yōu)榱四軌驅(qū)崟r的控制頂部statusbar的樣式呀酸,可能會在喜歡使用
[[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent]
[[UIApplication sharedApplication]setStatusBarHidden:YES];
但是這么做之前需要將 info.plist 里面加上View controller-based status bar appearance BOOL值設(shè)為NO凉蜂,就是把控制器控制狀態(tài)欄的權(quán)限給禁了,用UIApplication來控制性誉。
但是這種做法在iOS9不建議使用了窿吩,建議我們使用把那個BOOL值設(shè)為YES,然后用控制器的方法來管理狀態(tài)欄比如错览。
- (UIStatusBarStyle)preferredStatusBarStyle
{
return UIStatusBarStyleLightContent;
}
###6. 字體
iOS9中纫雁,中文系統(tǒng)字體變?yōu)榱藢橹袊O(shè)計的“蘋方”,字體有輕微的加粗效果,并且最關(guān)鍵的是字體間隙變大了倾哺!
所以很多原本寫死了width的label可能會出現(xiàn)“...”的情況轧邪。
**包括在很多時候我們自動計算行高行寬的時候出現(xiàn)偏差,導(dǎo)致一些不可知的錯誤**
解決方式:
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的版本闲勺。
具體解決方案在我這一篇文檔中有詳細(xì)說明[**AFNetworking 3.0的遷移**](http://www.reibang.com/p/0ab3ffa9c5f5),如果有感興趣的朋友可以看看.
###8.UIAlertController
這其實不算是新特性,只是在iOS9版本,廢棄了UIAlertView,Action Sheets,因此我們必須要掌握UIAlertController的使用,現(xiàn)在為了適配iOS7,很多項目還是會繼續(xù)使用UIAlertView,Action Sheets,但是下幾個版本應(yīng)該就會慢慢不用了.
這里我只列出簡單的使用方法,具體的方式有一個[博客](http://www.cocoachina.com/ios/20141126/10320.html)詳細(xì)說明.
UIAlertController *alertController = [UIAlertController alertControllerWithTitle:@"標(biāo)題"
message:@"這個是UIAlertController的默認(rèn)樣式" preferredStyle:UIAlertControllerStyleAlert];
UIAlertAction *cancelAction = [UIAlertAction actionWithTitle:@"取消" style:UIAlertActionStyleCancel handler:nil];
UIAlertAction *okAction = [UIAlertAction actionWithTitle:@"好的" style:UIAlertActionStyleDefault handler:nil];
[alertController addAction:cancelAction];
[alertController addAction:okAction];
[self presentViewController:alertController animated:YES completion:nil];
###9.堆棧視圖(UIStackView)
相信很多朋友還沒有發(fā)現(xiàn)這個好東西,UIStackView提供了一個高效的接口用于平鋪一行或一列的視圖組合。對于嵌入到StackView的視圖扣猫,你不用再添加自動布局的約束了菜循。Stack View管理這些子視圖的布局,并幫你自動布局約束申尤。也就是說癌幕,這些子視圖能夠適應(yīng)不同的屏幕尺寸。
**舉個栗子:**
以前我們?nèi)绻胍趚ib上橫向布局三個按鈕,讓三個按鈕距離相等,我們可能需要再加三個View,將button放在View上面,再將View布局三等分,類似于
![三個按鈕](http://upload-images.jianshu.io/upload_images/1149840-0e1f36350cc5bd99.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
這樣子是不是比較麻煩呢?有了Stack View
![StackView](http://upload-images.jianshu.io/upload_images/1149840-745fec18805b7d07.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
有了這個玩意兒,整個過程會簡化很多,這里我也不具體說明如何使用了,因為我也在摸索中,[詳細(xì)介紹博客](http://www.cocoachina.com/ios/20150820/13118.html).
以上就是我所總結(jié)的有關(guān)于iOS9的新特性以及適配方案,可能還會有一些遺漏或者錯誤的地方,歡迎大家指出和補(bǔ)充,知識只有交流才能進(jìn)步,讓我們一起成長,一起學(xué)習(xí),一起提高自己!
如果覺得文章對你有幫助的話,請點贊噢!謝謝.