iOS9之后我們需要關注的事情

jopen 8年前發布 | 11K 次閱讀 iOS開發 移動開發


iOS9
</div>

應用隱私控制-外部調用

iOS9增加了隱私控制,自己的應用如果需要調用其它應用,需要在工程的info.plist中添加一個key為LSApplicationQueriesSchemes的數組值,里面包含需要添加白名單的string類型的scheme。即使用URL scheme將其加入白名單。如項目中使用了qq,微信等分享登錄功能,需要添加的值為:

mqqopensdkapiV2

mqqOpensdkSSoLogin

mqq

mqzoneopensdkapiV2

mqzoneopensdkapi19

mqzoneopensdkapi

mqzoneopensdk

mqzone

weixin

wechat ...</pre>


示例
</div>

如果不添加該項,使用canOpenURL:判斷應用是否安裝時會報錯。

canOpenURL: failed for URL: "mqqopensdkapiV2://qqapp" - error: "This app is not allowed to query for scheme mqqopensdkapiV2”

bitcode

bitcode是被編譯程序的一種中間形式的代碼。包含bitcode配置的程序將會在App store上被編譯和鏈接。bitcode允許蘋果在后期重新優化我們程序的二進制文件,而不需要我們重新提交一個新的版本到App store上。

Xcode7 默認開啟了bitcode,如果App使用的第三方類庫不支持bitcode會提示錯誤,只需要在”Build Settings”->”Enable Bitcode”選項中關閉bitcode即可。

開啟Bitcode編譯后,編譯產生的文件體積會變大 (因為是中間代碼,不是用戶下載的包),且dSYM文件不能用來崩潰日志的符號化 (用戶下載的包是Apple服務重新編譯產生的,有產生新的符號文件)。通過Archive方式上傳AppStore的包,可以在 Xcode的Organizer工具中下載對應安裝包的新的符號文件。

改用更安全的HTTPS

如果在Xcode 9之前使用的時http請求,那么在XCode 9上編譯的App是不能聯網的。iOS9把所有的http請求都改為https了:iOS9系統發送的網絡請求將統一使用TLS 1.2 SSL。采用TLS 1.2 協議,目的是 強制增強數據訪問安全,而且 系統 Foundation 框架下的相關網絡請求,將不再默認使用 Http 等不安全的網絡協議,而默認采用 TLS 1.2。

修改方法是要么使服務器支持https訪問,要么關閉https的使用。第一種方法對于個人開發者來說代價還是比較大的,第二種方法:在工程的Info.plist文件里添加NSAppTransportSecurity字典類型的,添加一個元素:key為NSAllowsArbitraryLoads,值為YES。

什么是SSL/TLS

HTTP+SSL/TLS+TCP = HTTPS
TLS 是 SSL 新的別稱。SSL 3.0版本之后的迭代版本被重新命名為TLS 1.0。

SSL/TLS協議解決的問題

1.所有信息都是加密傳播,第三方無法竊聽。
2.具有校驗機制,一旦被篡改,通信雙方會立刻發現。
3.配備身份證書,防止身份被冒充。

iOS9中新增App Transport Security(簡稱ATS)特性, 主要使原來請求的時候用到的HTTP,都轉向TLS1.2協議進行傳輸。這也意味著所有的HTTP協議都強制使用了HTTPS協議進行傳輸。

在Info.plist新增一段用于控制ATS的配置:


控制ATS的配置
</div>

這段配置中的NSAppTransportSecurity是ATS配置的根節點,配置了節點表示告訴系統要走自定義的ATS設置。而NSAllowsAritraryLoads節點則是控制是否禁用ATS特性,設置YES就是禁用ATS功能。

其實ATS并不單單針對HTTP進行了限制,而是對HTTPS也有一定的要求,如果你希望自己所有的域名,除了一些已知并不會使用ATS之外的,所有通信都使用ATS。這種情況下你可以指定一些不使用ATS的特殊情況,而其余的情況使用ATS。對于這種場景,可以使用NSExceptionDomains來標識使用ATS默認設置的域。
以QQdemo為例:


QQdemo
</div>

其中NSIncludesSubdomains設置為YES表示子級域名都使用相同設置。NSExceptionRequiresForwardSecrecy為NO由于不支持ForwardSecrecy,因此屏蔽掉改功能。最后NSExceptionAllowInsecureHTTPLoads設置為YES,則表示允許訪問沒有證書或者是自簽名、過期、主機名不匹配的證書引發的錯誤的域名(這里檢查過QQ的證書貌似沒有什么問題,但是還是需要設置此項才允許訪問)。這是比較嚴謹的做法,指定了能訪問哪些特定的HTTP。

forward secrecy

中文可叫做前向保密。perfect forward secrecy,叫做完全前向保密,要求一個密鑰只能訪問由它所保護的數據;用來產生密鑰的元素一次一換,不能再產生其他的密鑰;一個密鑰被破解,并不影響其他密鑰的安全性。

支持Forward Secrecy的加密方式

TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384
TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256
TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384
TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA
TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256
TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA
TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384
TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256
TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384
TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256
TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA

來自: http://www.jianshu.com/p/bd5dcb604cb6

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!