iOS9把全部的http請求都改成https了:iOS9系統發送的網絡請求將統一 使用TLS 1.2 SSL。採用TLS 1.2 協議,目的是 強制加強數據訪問安全,並且 系統 Foundation 框架下的相關網絡請求,將再也不默認使用 Http 等不安全的網絡協議,而默認採用 TLS 1.2。服務器所以須要更新,以解析相關數據。如不更新,可經過在 Info.plist 中聲明,倒退回不安全的網絡請求。html
在討論以前,跟往常同樣,先說下iOS程序猿們最關心的問題:ios
跟我有毛關係?須要我加班嗎?!git
首先我們來看下業內對Apple這一作法的評論:github
這是某社交App上討論,看來業內仍是吐槽聲和確定聲同在。瀏覽器
結論是:安全
跟你頗有關係,加班吧,少年!服務器
書歸正傳【嚴肅臉】,咱們正式討論下 WHAT,WHY,HOW:網絡
WHAT(什麼是SSL/TLS?跟HTTP和HTTPS有什麼關係)app
WHY(之前的HTTP不是也能用嗎?爲何要用SSL/TLS,閒得慌?!Apple是否是又在反人類?)框架
HOW(如何適配?---弱弱地問下:加班要多久?)
WHAT(什麼是SSL/TLS?跟HTTP和HTTPS有什麼關係)
跟往常同樣,先說結論:
1
|
HTTP+SSL/TLS+TCP = HTTPS
|
TLS 是 SSL 新的別稱。舉個例子:
「TLS1.0」之於「SSL3.1」,猶「公元2015」之於「民國104」,或者是「一千克」之於「一公斤」,或者是「半斤」之於「八兩」:稱呼不一樣,但意思相同。
SSL 3.0版本以後的迭代版本被從新命名爲TLS 1.0,
也就是說:
1
|
TLS 1.0 = SSL 3.1
|
因此他們是一個東西,咱們日常也常常簡單見到 「SSL/TLS」 這種說法。
經常使用的是下面這些:
SSL 2.0
SSL 3.0
TLS 1.0 (SSL 3.1)
TLS 1.1 (SSL 3.1)
TLS 1.2 (SSL 3.1)
那爲何標題是「使用HTTPS」而沒有說起SSL和TLS什麼事? 要理解這個,要看下一個公式:
1
|
HTTP+SSL/TLS+TCP = HTTPS
|
打個比方:若是原來的 HTTP 是塑料水管,容易被戳破;那麼現在新設計的 HTTPS 就像是在原有的塑料水管以外,再包一層金屬水管。一來,原有的塑料水管照樣運行;二來,用金屬加固了以後,不容易被戳破。
目前,應用最普遍的是TLS 1.0,接下來是SSL 3.0。可是,主流瀏覽器都已經實現了TLS 1.2的支持。
Apple讓你的HTTP採用SSL/TLS協議,就是讓你從HTTP轉到HTTPS
WHY(之前的HTTP不是也能用嗎?爲何要用SSL/TLS,閒得慌?!Apple是否是又在反人類?)
不使用SSL/TLS的HTTP通訊,就是不加密的通訊!
全部信息明文傳播,帶來了三大風險:
竊聽風險(eavesdropping):第三方能夠獲知通訊內容。
篡改風險(tampering):第三方能夠修改通訊內容。
冒充風險(pretending):第三方能夠冒充他人身份參與通訊。
SSL/TLS協議是爲了解決這三大風險而設計的,但願達到:
全部信息都是加密傳播,第三方沒法竊聽。
具備校驗機制,一旦被篡改,通訊雙方會馬上發現。
配備身份證書,防止身份被冒充。
HOW(如何適配?---弱弱地問下:加班要多久?)
正如文章開頭所說:
TLS 1.2 協議 強制加強數據訪問安全 系統 Foundation 框架下的相關網絡請求,將再也不默認使用 Http 等不安全的網絡協議,而默認採用 TLS 1.2。服務器所以須要更新,以解析相關數據。如不更新,可經過在 Info.plist 中聲明,倒退回不安全的網絡請求。
方案一:當即讓公司的服務端升級使用TLS 1.2
方案二:雖Apple不建議,但可經過在 Info.plist 中聲明,倒退回不安全的網絡請求依然能讓App訪問指定http,甚至任意的http,
具體作法見gif圖,示例Demo見 Demo1
正如 Apple官方文檔 所說 :
Info.plist 配置中的XML源碼以下所示:
上面是比較嚴謹的作法,指定了能訪問哪些特定的HTTP。固然也有暴力的作法: 完全倒退回不安全的HTTP網絡請求,能任意進行HTTP請求,好比你在開發一款瀏覽器App,或者你想偷懶,或者後臺想偷懶,或者公司不給你升級服務器。。。
聲明:目前Apple的官方文檔並未說起如何在 Info.plist 配置,我將密切關注官方文檔,若有說起,再來更新本文 .
Demo2_iOS9新特性_更靈活的後臺定位
Demo:GitHub地址
【iOS9 在定位的問題上,有一個壞消息一個好消息】壞消息:若是不適配iOS9,就不能偷偷在後臺定位(不帶藍條,見圖)!好消息:將容許出現這種場景:同一 App中的多個location manager:一些只能在前臺定位,另外一些可在後臺定位,並可隨時開啓或者關閉特定location manager的後臺定位。
若是沒有請求後臺定位的權限,也是能夠在後臺定位的,不過會帶藍條:
如何偷偷在後臺定位:請求後臺定位權限:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
// 1. 實例化定位管理器
_locationManager = [[CLLocationManager alloc] init];
// 2. 設置代理
_locationManager.delegate = self;
// 3. 定位精度
[_locationManager setDesiredAccuracy:kCLLocationAccuracyBest];
// 4.請求用戶權限:分爲:?只在前臺開啓定位?在後臺也可定位,
//注意:建議只請求?和?中的一個,若是兩個權限都須要,只請求?便可,
//??這樣的順序,將致使bug:第一次啓動程序後,系統將只請求?的權限,?的權限系統不會請求,只會在下一次啓動應用時請求?
if
([[[UIDevice currentDevice] systemVersion] floatValue] >= 8) {
//[_locationManager requestWhenInUseAuthorization];//?只在前臺開啓定位
[_locationManager requestAlwaysAuthorization];
//?在後臺也可定位
}
// 5.iOS9新特性:將容許出現這種場景:同一app中多個location manager:一些只能在前臺定位,另外一些可在後臺定位(並可隨時禁止其後臺定位)。
if
([[[UIDevice currentDevice] systemVersion] floatValue] >= 9) {
_locationManager.allowsBackgroundLocationUpdates = YES;
}
// 6. 更新用戶位置
[_locationManager startUpdatingLocation];
|
可是若是照着這種方式嘗試,而沒有配置Info.plist,100%你的程序會崩潰掉,並報錯:
1
|
*** Assertion failure
in
-[CLLocationManager setAllowsBackgroundLocationUpdates:], /BuildRoot/Library/Caches/com.apple.xbs/Sources/CoreLocationFramework_Sim/CoreLocation-1808.1.5/Framework/CoreLocation/CLLocationManager.m:593
|
要將 Info.plist 配置以下:
對應的 Info.plist 的XML源碼是:
Bitcode(通俗解釋:在線版安卓ART模式)
將來Watch應用須包含Bitcode,iOS不強制,但Xcode7默認會開啓Bitcode。
如何適配?
方法一:更新library使包含Bitcode,不然會出現如下中的警告;
1
|
(
null
): URGENT: all bitcode will be dropped because
'/Users/myname/Library/Mobile Documents/com~apple~CloudDocs/foldername/appname/GoogleMobileAds.framework/GoogleMobileAds(GADSlot+AdEvents.o)'
was built without 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. Note: This will be an error
in
the future.
|
方法二:關閉Bitcode,方法見下圖
更多信息,請移步 bitcode 蘋果官方文檔
,和 WWDC 2015 Session 102: "Platforms State of the Union"
企業級分發
iOS9以前,企業級分發十分方便:點擊App出現「信任按鈕」,
iOS9之後,企業級分發ipa包將遭到與Mac上dmg安裝包同樣的待遇:默認不能安裝,也再也不出現「信任按鈕」
必須讓用戶進行gif圖中的設置(相關Demo:https://github.com/ChenYilong/iOS9AdaptationTips/ )
URL scheme
在iOS9中,若是使用URL scheme必須在"Info.plist"中將你要在外部調用的URL scheme列爲白名單,不然不能使用。key叫作LSApplicationQueriesSchemes ,鍵值內容是
1
|
LSApplicationQueriesSchemes urlscheme urlscheme2 urlscheme3 urlscheme4
|
推薦一篇博客: http://awkwardhare.com/post/121196006730/quick-take-on-ios-9-url-scheme-changes
其中最關鍵的是如下部分:
1
2
|
If you call the 「canOpenURL」 method on a URL that is not
in
your whitelist, it will
return
「NO」, even
if
there is an app installed that has registered to handle
this
scheme. A 「This app is not allowed to query
for
scheme xxx」 syslog entry will appear.
If you call the 「openURL」 method on a URL that is not
in
your whitelist, it will fail silently. A 「This app is not allowed to query
for
scheme xxx」 syslog entry will appear.
|
更多信息請移步:WWDC 2015 Session 703: "Privacy and Your App" 時間在30:18左右
iPad適配Slide Over 和 Split View
【iPad適配Slide Over 和 Split View】 若想適配multi tasking特性,惟一的建議:棄純代碼,改用storyboard、xib,縱觀蘋果WWDC全部Demo均是如此: