SDWebimage 加载不出网络图片

闲来无聊写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的请求也要满足以下规定:

  1. 传输层协议(TLS)至少为1.2版本
  2. 连接的加密方式要提供Forward Secrecy,加密算法详见苹果官方文档https://developer.apple.com/library/content/documentation/General/Reference/InfoPlistKeyReference/Articles/CocoaKeys.html#//apple_ref/doc/uid/TP40009251-SW33
  3. 证书至少要使用一个SHA256的指纹与任一个2048位或者更高位的RSA密钥,或者是256位或者更高位的ECC密钥。如果不符合其中一项,请求将被中断并返回nil.

上面新增的配置中的NSAppTransportSecurity是ATS配置的根节点,配置了节点表示告诉系统要走自定义的ATS设置。而NSAllowsAritraryLoads节点则是控制是否禁用ATS特性,设置YES就是禁用ATS功能。

总结:

如果请求源是HTTP,则按以上方法处理
如果请求源是HTTPS,则需要根据是否满足以上三个条件来针对性地配置plist

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容