iOS9的新特性以及適配方案

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(蘋果不建議這么做):
需要添加的節(jié)點

NSAppTransportSecurity - NSAllowsArbitraryLoads
這個子節(jié)點的意思是:是否仍然允許加載铐尚?! 設(shè)為YES的話就將禁用了AppTransportSecurity轉(zhuǎn)而使用用戶自定義的設(shè)置哆姻,這個問題就解決了宣增。

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碉就。


    選為NO禁用

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í),一起提高自己!

如果覺得文章對你有幫助的話,請點贊噢!謝謝.
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末昧穿,一起剝皮案震驚了整個濱河市勺远,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌时鸵,老刑警劉巖胶逢,帶你破解...
    沈念sama閱讀 206,378評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異饰潜,居然都是意外死亡初坠,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,356評論 2 382
  • 文/潘曉璐 我一進(jìn)店門彭雾,熙熙樓的掌柜王于貴愁眉苦臉地迎上來碟刺,“玉大人,你說我怎么就攤上這事薯酝“牍粒” “怎么了爽柒?”我有些...
    開封第一講書人閱讀 152,702評論 0 342
  • 文/不壞的土叔 我叫張陵,是天一觀的道長者填。 經(jīng)常有香客問我浩村,道長,這世上最難降的妖魔是什么幔托? 我笑而不...
    開封第一講書人閱讀 55,259評論 1 279
  • 正文 為了忘掉前任穴亏,我火速辦了婚禮,結(jié)果婚禮上重挑,老公的妹妹穿的比我還像新娘嗓化。我一直安慰自己,他們只是感情好谬哀,可當(dāng)我...
    茶點故事閱讀 64,263評論 5 371
  • 文/花漫 我一把揭開白布刺覆。 她就那樣靜靜地躺著,像睡著了一般史煎。 火紅的嫁衣襯著肌膚如雪谦屑。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,036評論 1 285
  • 那天篇梭,我揣著相機(jī)與錄音氢橙,去河邊找鬼。 笑死恬偷,一個胖子當(dāng)著我的面吹牛悍手,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播袍患,決...
    沈念sama閱讀 38,349評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼牺汤,長吁一口氣:“原來是場噩夢啊……” “哼陆蟆!你這毒婦竟也來了馆匿?” 一聲冷哼從身側(cè)響起忙菠,我...
    開封第一講書人閱讀 36,979評論 0 259
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎肆良,沒想到半個月后筛璧,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,469評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡惹恃,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,938評論 2 323
  • 正文 我和宋清朗相戀三年夭谤,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片座舍。...
    茶點故事閱讀 38,059評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡沮翔,死狀恐怖陨帆,靈堂內(nèi)的尸體忽然破棺而出曲秉,到底是詐尸還是另有隱情采蚀,我是刑警寧澤,帶...
    沈念sama閱讀 33,703評論 4 323
  • 正文 年R本政府宣布承二,位于F島的核電站榆鼠,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏亥鸠。R本人自食惡果不足惜妆够,卻給世界環(huán)境...
    茶點故事閱讀 39,257評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望负蚊。 院中可真熱鬧神妹,春花似錦、人聲如沸家妆。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,262評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽伤极。三九已至蛹找,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間哨坪,已是汗流浹背庸疾。 一陣腳步聲響...
    開封第一講書人閱讀 31,485評論 1 262
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留当编,地道東北人届慈。 一個月前我還...
    沈念sama閱讀 45,501評論 2 354
  • 正文 我出身青樓,卻偏偏與公主長得像凌箕,于是被迫代替她去往敵國和親拧篮。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 42,792評論 2 345

推薦閱讀更多精彩內(nèi)容