闲来无聊写Demo,发现SDWebImage加载不出网络图片,之前都是大神带着飞,现在自己单只,有点惶恐,记录一下遇到的问题。代码如下。
[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, 值设为 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
解决后简单翻阅了Apple官方文档得知
ATS限制使用HTTP, 数据请求尽量通过HTTPS加密传输,
且HTTPS的请求也要满足以下规定:
- 传输层协议(TLS)至少为1.2版本
- 连接的加密方式要提供Forward Secrecy,加密算法详见苹果官方文档https://developer.apple.com/library/content/documentation/General/Reference/InfoPlistKeyReference/Articles/CocoaKeys.html#//apple_ref/doc/uid/TP40009251-SW33
- 证书至少要使用一个SHA256的指纹与任一个2048位或者更高位的RSA密钥,或者是256位或者更高位的ECC密钥。如果不符合其中一项,请求将被中断并返回nil.
上面新增的配置中的NSAppTransportSecurity是ATS配置的根节点,配置了节点表示告诉系统要走自定义的ATS设置。而NSAllowsAritraryLoads节点则是控制是否禁用ATS特性,设置YES就是禁用ATS功能。
总结:
如果请求源是HTTP,则按以上方法处理
如果请求源是HTTPS,则需要根据是否满足以上三个条件来针对性地配置plist
网友评论