閑來無聊寫Demo凰荚,發(fā)現(xiàn)SDWebImage加載不出網(wǎng)絡(luò)圖片燃观,之前都是大神帶著飛,現(xiàn)在自己?jiǎn)沃槐闵悬c(diǎn)惶恐缆毁,記錄一下遇到的問題。代碼如下到涂。
[cell.imageView sd_setImageWithURL:[NSURL URLWithString:imagePath] placeholderImage:self.placeholderImage];
解決方法
在Info.plist中添加 App Transport Security Settings 類型 Dictionary ;
并在App Transport Security Settings 下添加 Allow Arbitrary Loads 類型Boolean, 值設(shè)為 YES
或者在plist source code添加
<key>NSAppTransportSecurity</key>
<dict>
<key>NSAllowsArbitraryLoads</key>
<true/>
</dict>
二者效果等同
https://developer.apple.com/library/content/documentation/General/Reference/InfoPlistKeyReference/Articles/CocoaKeys.html#//apple_ref/doc/uid/TP40009251-SW33
解決后簡(jiǎn)單翻閱了Apple官方文檔得知
ATS限制使用HTTP, 數(shù)據(jù)請(qǐng)求盡量通過HTTPS加密傳輸,
且HTTPS的請(qǐng)求也要滿足以下規(guī)定:
- 傳輸層協(xié)議(TLS)至少為1.2版本
- 連接的加密方式要提供Forward Secrecy,加密算法詳見蘋果官方文檔https://developer.apple.com/library/content/documentation/General/Reference/InfoPlistKeyReference/Articles/CocoaKeys.html#//apple_ref/doc/uid/TP40009251-SW33
- 證書至少要使用一個(gè)SHA256的指紋與任一個(gè)2048位或者更高位的RSA密鑰脊框,或者是256位或者更高位的ECC密鑰。如果不符合其中一項(xiàng)践啄,請(qǐng)求將被中斷并返回nil.
上面新增的配置中的NSAppTransportSecurity是ATS配置的根節(jié)點(diǎn)浇雹,配置了節(jié)點(diǎn)表示告訴系統(tǒng)要走自定義的ATS設(shè)置。而NSAllowsAritraryLoads節(jié)點(diǎn)則是控制是否禁用ATS特性屿讽,設(shè)置YES就是禁用ATS功能昭灵。
總結(jié):
如果請(qǐng)求源是HTTP,則按以上方法處理
如果請(qǐng)求源是HTTPS,則需要根據(jù)是否滿足以上三個(gè)條件來針對(duì)性地配置plist