自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

iOS 9 適配系列教程

移動(dòng)開(kāi)發(fā)
iOS9把所有的http請(qǐng)求都改為https了:iOS9系統(tǒng)發(fā)送的網(wǎng)絡(luò)請(qǐng)求將統(tǒng)一使用TLS 1.2 SSL。采用TLS 1.2 協(xié)議,目的是 強(qiáng)制增強(qiáng)數(shù)據(jù)訪問(wèn)安全,而且 系統(tǒng) Foundation 框架下的相關(guān)網(wǎng)絡(luò)請(qǐng)求,將不再默認(rèn)使用 Http 等不安全的網(wǎng)絡(luò)協(xié)議,而默認(rèn)采用 TLS 1.2。服務(wù)器因此需要更新,以解析相關(guān)數(shù)據(jù)。如不更新,可通過(guò)在 Info.plist 中聲明,倒退回不安全的網(wǎng)絡(luò)請(qǐng)求。

  本文是投稿文章,作者:ChenYilong(https://github.com/ChenYilong/iOS9AdaptationTips

 

Demo1_iOS9網(wǎng)絡(luò)適配_改用更安全的HTTPS

iOS9把所有的http請(qǐng)求都改為https了:iOS9系統(tǒng)發(fā)送的網(wǎng)絡(luò)請(qǐng)求將統(tǒng)一使用TLS 1.2 SSL。采用TLS 1.2 協(xié)議,目的是 強(qiáng)制增強(qiáng)數(shù)據(jù)訪問(wèn)安全,而且 系統(tǒng) Foundation 框架下的相關(guān)網(wǎng)絡(luò)請(qǐng)求,將不再默認(rèn)使用 Http 等不安全的網(wǎng)絡(luò)協(xié)議,而默認(rèn)采用 TLS 1.2。服務(wù)器因此需要更新,以解析相關(guān)數(shù)據(jù)。如不更新,可通過(guò)在 Info.plist 中聲明,倒退回不安全的網(wǎng)絡(luò)請(qǐng)求。

在討論之前,跟往常一樣,先說(shuō)下iOS程序猿們最關(guān)心的問(wèn)題:

跟我有毛關(guān)系?需要我加班嗎?!

首先咱們來(lái)看下業(yè)內(nèi)對(duì)Apple這一做法的評(píng)論:

1.jpg

這是某社交App上討論,看來(lái)業(yè)內(nèi)還是吐槽聲和肯定聲同在。

結(jié)論是:

跟你很有關(guān)系,加班吧,少年!

書(shū)歸正傳【嚴(yán)肅臉】,我們正式討論下 WHAT,WHY,HOW:

  1. WHAT(什么是SSL/TLS?跟HTTP和HTTPS有什么關(guān)系)

  2. WHY(以前的HTTP不是也能用嗎?為什么要用SSL/TLS,閑得慌?!Apple是不是又在反人類(lèi)?)

  3. HOW(如何適配?---弱弱地問(wèn)下:加班要多久?)

WHAT(什么是SSL/TLS?跟HTTP和HTTPS有什么關(guān)系)

跟往常一樣,先說(shuō)結(jié)論:

  1. HTTP+SSL/TLS+TCP = HTTPS 

TLS 是 SSL 新的別稱(chēng)。舉個(gè)例子:

“TLS1.0”之于“SSL3.1”,猶“公元2015”之于“民國(guó)104”,或者是“一千克”之于“一公斤”,或者是“半斤”之于“八兩”:稱(chēng)呼不同,但意思相同。

SSL 3.0版本之后的迭代版本被重新命名為T(mén)LS 1.0,

也就是說(shuō):

  1. TLS 1.0 = SSL 3.1 

所以他們是一個(gè)東西,我們平常也經(jīng)常簡(jiǎn)單見(jiàn)到 “SSL/TLS” 這種說(shuō)法。

常用的是下面這些:

  • SSL 2.0

  • SSL 3.0

  • TLS 1.0 (SSL 3.1)

  • TLS 1.1 (SSL 3.1)

  • TLS 1.2 (SSL 3.1)

那為什么標(biāo)題是“使用HTTPS”而沒(méi)有提及SSL和TLS什么事? 要理解這個(gè),要看下一個(gè)公式:

  1. HTTP+SSL/TLS+TCP = HTTPS 

blob.png

打個(gè)比方:如果原來(lái)的 HTTP 是塑料水管,容易被戳破;那么如今新設(shè)計(jì)的 HTTPS 就像是在原有的塑料水管之外,再包一層金屬水管。一來(lái),原有的塑料水管照樣運(yùn)行;二來(lái),用金屬加固了之后,不容易被戳破。

目前,應(yīng)用最廣泛的是TLS 1.0,接下來(lái)是SSL 3.0。但是,主流瀏覽器都已經(jīng)實(shí)現(xiàn)了TLS 1.2的支持。

Apple讓你的HTTP采用SSL/TLS協(xié)議,就是讓你從HTTP轉(zhuǎn)到HTTPS

#p#

WHY(以前的HTTP不是也能用嗎?為什么要用SSL/TLS,閑得慌?!Apple是不是又在反人類(lèi)?)

不使用SSL/TLS的HTTP通信,就是不加密的通信!

所有信息明文傳播,帶來(lái)了三大風(fēng)險(xiǎn):

  1. 竊聽(tīng)風(fēng)險(xiǎn)(eavesdropping):第三方可以獲知通信內(nèi)容。

  2. 篡改風(fēng)險(xiǎn)(tampering):第三方可以修改通信內(nèi)容。

  3. 冒充風(fēng)險(xiǎn)(pretending):第三方可以冒充他人身份參與通信。

SSL/TLS協(xié)議是為了解決這三大風(fēng)險(xiǎn)而設(shè)計(jì)的,希望達(dá)到:

  1. 所有信息都是加密傳播,第三方無(wú)法竊聽(tīng)。

  2. 具有校驗(yàn)機(jī)制,一旦被篡改,通信雙方會(huì)立刻發(fā)現(xiàn)。

  3. 配備身份證書(shū),防止身份被冒充。

HOW(如何適配?---弱弱地問(wèn)下:加班要多久?)

正如文章開(kāi)頭所說(shuō):

TLS 1.2 協(xié)議 強(qiáng)制增強(qiáng)數(shù)據(jù)訪問(wèn)安全 系統(tǒng) Foundation 框架下的相關(guān)網(wǎng)絡(luò)請(qǐng)求,將不再默認(rèn)使用 Http 等不安全的網(wǎng)絡(luò)協(xié)議,而默認(rèn)采用 TLS 1.2。服務(wù)器因此需要更新,以解析相關(guān)數(shù)據(jù)。如不更新,可通過(guò)在 Info.plist 中聲明,倒退回不安全的網(wǎng)絡(luò)請(qǐng)求。

方案一:立即讓公司的服務(wù)端升級(jí)使用TLS 1.2

方案二:雖Apple不建議,但可通過(guò)在 Info.plist 中聲明,倒退回不安全的網(wǎng)絡(luò)請(qǐng)求依然能讓App訪問(wèn)指定http,甚至任意的http,

具體做法見(jiàn)gif圖,示例Demo見(jiàn) Demo1

2.gif

正如 Apple官方文檔 所說(shuō) :

blob.png

blob.png

blob.png

Info.plist 配置中的XML源碼如下所示:

645.jpg

上面是比較嚴(yán)謹(jǐn)?shù)淖龇?,指定了能訪問(wèn)哪些特定的HTTP。當(dāng)然也有暴力的做法: 徹底倒退回不安全的HTTP網(wǎng)絡(luò)請(qǐng)求,能任意進(jìn)行HTTP請(qǐng)求,比如你在開(kāi)發(fā)一款瀏覽器App,或者你想偷懶,或者后臺(tái)想偷懶,或者公司不給你升級(jí)服務(wù)器。。。

646.jpg

聲明:目前Apple的官方文檔并未提及如何在 Info.plist 配置,我將密切關(guān)注官方文檔,如有提及,再來(lái)更新本文 。

#p#

 

Demo2_iOS9新特性_更靈活的后臺(tái)定位

0.jpg

Demo:GitHub地址

【iOS9在定位的問(wèn)題上,有一個(gè)壞消息一個(gè)好消息】壞消息:如果不適配iOS9,就不能偷偷在后臺(tái)定位(不帶藍(lán)條,見(jiàn)圖)!好消息:將允許出現(xiàn)這種場(chǎng)景:同一App中的多個(gè)location manager:一些只能在前臺(tái)定位,另一些可在后臺(tái)定位,并可隨時(shí)開(kāi)啟或者關(guān)閉特定location manager的后臺(tái)定位。

如果沒(méi)有請(qǐng)求后臺(tái)定位的權(quán)限,也是可以在后臺(tái)定位的,不過(guò)會(huì)帶藍(lán)條:

1.jpg

如何偷偷在后臺(tái)定位:請(qǐng)求后臺(tái)定位權(quán)限:

 
  1.  // 1. 實(shí)例化定位管理器 
  2. _locationManager = [[CLLocationManager alloc] init]; 
  3. // 2. 設(shè)置代理 
  4. _locationManager.delegate = self; 
  5. // 3. 定位精度 
  6. [_locationManager setDesiredAccuracy:kCLLocationAccuracyBest]; 
  7. // 4.請(qǐng)求用戶(hù)權(quán)限:分為:?只在前臺(tái)開(kāi)啟定位?在后臺(tái)也可定位, 
  8. //注意:建議只請(qǐng)求?和?中的一個(gè),如果兩個(gè)權(quán)限都需要,只請(qǐng)求?即可, 
  9. //??這樣的順序,將導(dǎo)致bug:第一次啟動(dòng)程序后,系統(tǒng)將只請(qǐng)求?的權(quán)限,?的權(quán)限系統(tǒng)不會(huì)請(qǐng)求,只會(huì)在下一次啟動(dòng)應(yīng)用時(shí)請(qǐng)求? 
  10. if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 8) { 
  11.     //[_locationManager requestWhenInUseAuthorization];//?只在前臺(tái)開(kāi)啟定位 
  12.     [_locationManager requestAlwaysAuthorization];//?在后臺(tái)也可定位 
  13. // 5.iOS9新特性:將允許出現(xiàn)這種場(chǎng)景:同一app中多個(gè)location manager:一些只能在前臺(tái)定位,另一些可在后臺(tái)定位(并可隨時(shí)禁止其后臺(tái)定位)。 
  14. if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 9) { 
  15.     _locationManager.allowsBackgroundLocationUpdates = YES; 
  16. // 6. 更新用戶(hù)位置 
  17. [_locationManager startUpdatingLocation]; 

但是如果照著這種方式嘗試,而沒(méi)有配置Info.plist,100%你的程序會(huì)崩潰掉,并報(bào)錯(cuò):

 
  1. *** Assertion failure in -[CLLocationManager setAllowsBackgroundLocationUpdates:], 
  2. /BuildRoot/Library/Caches/com.apple.xbs/Sources/CoreLocationFramework_Sim/CoreLocation-1808.1.5/
  3. Framework/CoreLocation/CLLocationManager.m:593 

要將 Info.plist 配置如下:

blob.png

對(duì)應(yīng)的 Info.plist 的XML源碼是:

blob.png

Bitcode(通俗解釋?zhuān)涸诰€版安卓ART模式)

未來(lái)Watch應(yīng)用須包含Bitcode,iOS不強(qiáng)制,但Xcode7默認(rèn)會(huì)開(kāi)啟Bitcode。

如何適配?

方法一:更新library使包含Bitcode,否則會(huì)出現(xiàn)以下中的警告;

  1. (null): URGENT: all bitcode will be dropped because '/Users/myname/Library/
  2. Mobile Documents/com~apple~CloudDocs/foldername/appname/GoogleMobileAds.framework/
  3. GoogleMobileAds(GADSlot+AdEvents.o)' was built without bitcode. 
  4. You must rebuild it with bitcode enabled (Xcode setting ENABLE_BITCODE), 
  5. obtain an updated library from the vendor, or disable bitcode for this target. 
  6. Note: This will be an error in the future. 
方法二:關(guān)閉Bitcode,方法見(jiàn)下圖

1.gif

更多信息,請(qǐng)移步 bitcode 蘋(píng)果官方文檔,和 WWDC 2015 Session 102: "Platforms State of the Union"

[[140110]]

#p#

企業(yè)級(jí)分發(fā)

iOS9之前,企業(yè)級(jí)分發(fā)十分方便:點(diǎn)擊App出現(xiàn)“信任按鈕”,

1.jpg

iOS9以后,企業(yè)級(jí)分發(fā)ipa包將遭到與Mac上dmg安裝包一樣的待遇:默認(rèn)不能安裝,也不再出現(xiàn)“信任按鈕”

2.jpg

必須讓用戶(hù)進(jìn)行g(shù)if圖中的設(shè)置(相關(guān)Demo:https://github.com/ChenYilong/iOS9AdaptationTips/ )

3.gif

URL scheme

在iOS9中,如果使用URL scheme必須在"Info.plist"中將你要在外部調(diào)用的URL scheme列為白名單,否則不能使用。key叫做LSApplicationQueriesSchemes ,鍵值內(nèi)容是

  1. LSApplicationQueriesSchemes urlscheme urlscheme2 urlscheme3 urlscheme4 

推薦一篇博客: http://awkwardhare.com/post/121196006730/quick-take-on-ios-9-url-scheme-changes

其中最關(guān)鍵的是以下部分:

  1. If you call the “canOpenURL” method on a URL that is not in your whitelist,
  2.  it will return “NO”, even if there is an app installed that has registered to handle this scheme.
  3.  A “This app is not allowed to query for scheme xxx” syslog entry will appear. 
  4. If you call the “openURL” method on a URL that is not in your whitelist, it will fail silently. 
  5. A “This app is not allowed to query for scheme xxx” syslog entry will appear. 

更多信息請(qǐng)移步:WWDC 2015 Session 703: "Privacy and Your App" 時(shí)間在30:18左右

blob.png

iPad適配Slide Over 和 Split View

1.gif

【iPad適配Slide Over 和 Split View】 若想適配multi tasking特性,唯一的建議:棄純代碼,改用storyboard、xib,縱觀蘋(píng)果WWDC所有Demo均是如此:

  1. Mysteries of Auto Layout, Part 1

  2. What's New in Storyboards

  3. Implementing UI Designs in Interface Builder

  4. Getting Started with Multitasking on iPad in iOS 9

  5. Optimizing Your App for Multitasking on iPad in iOS

 

責(zé)任編輯:倪明
相關(guān)推薦

2015-06-24 10:06:09

iOS 9適配后臺(tái)

2015-09-23 10:30:44

iOS 9UIStack Vie

2015-09-16 09:55:12

ios9學(xué)習(xí)UIKit Dynam

2015-09-25 09:44:24

ios9MapkitTrans

2015-08-20 09:00:23

ios9api

2015-08-24 09:24:21

ios學(xué)習(xí)contacts fr

2015-10-12 11:26:12

iOS 9適配

2016-03-18 11:19:57

ios9replaykit入門(mén)

2015-08-24 09:19:05

ios9split scree

2017-11-10 13:02:44

iOSUI代碼

2020-10-25 08:56:21

適配器模式

2015-07-02 16:25:09

iOS 9UIStackView

2015-08-20 09:19:46

ios9uistackview

2013-11-26 16:39:21

Android設(shè)計(jì)模式

2021-02-18 08:39:28

設(shè)計(jì)模式場(chǎng)景

2016-10-12 10:32:54

ios10siriqq

2015-09-28 11:23:09

iOS8iOS 9 開(kāi)發(fā)

2013-07-23 07:34:54

iOS開(kāi)發(fā)學(xué)習(xí)適配iphone5

2013-12-17 16:21:17

iOSiOS性能優(yōu)化

2015-01-26 13:16:30

NFCAndroid
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)