由于Apple将迫使我们从2017年开始使用ATS,我正在做一些调查工作,但对git blame file
课有一些疑问。
如果我使用下面的代码,图像将成功加载
SDWebImage
但如果我在[self.myImageView sd_setImageWithURL:[NSURL URLWithString:@"http://f.hiphotos.baidu.com/image/h%3D200/sign=1c3f18c4524e9258b93481eeac83d1d1/b7fd5266d0160924be0452bbd00735fae6cd3468.jpg"]];
中使用该方法,图片将无法加载。
NSData
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
NSData *data = [NSData dataWithContentsOfURL:[NSURL URLWithString:@"http://f.hiphotos.baidu.com/image/h%3D200/sign=1c3f18c4524e9258b93481eeac83d1d1/b7fd5266d0160924be0452bbd00735fae6cd3468.jpg"]];
UIImage *image = [UIImage imageWithData:data];
dispatch_async(dispatch_get_main_queue(), ^{
self.myImageView.image = image;
});
});
如何做到这一点?
答案 0 :(得分:1)
确保Info.plist文件中未设置“NSAllowsArbitraryLoads
”。
据我所知,SDWebImage受到与所有其他应用程序相同的ATS限制。
例如,当我将您的URL插入SDWebImage的演示应用程序(in their MasterViewController.m文件)并关闭ATS异常时,我在Xcode控制台中收到“SDWebImage iOS Demo[6714:130852] App Transport Security has blocked a cleartext HTTP (http://) resource load since it is insecure. Temporary exceptions can be configured via your app's Info.plist file.
”消息。
答案 1 :(得分:0)
不太可能,但也许,如果加载失败,SDWebImage会查看NSURL方案,如果是" http:",则会将其更改为@" https :"
NSString *absoluteString = url.absoluteString;
if ([absoluteString hasPrefix:@"http:"]) {
url = [NSURL URLWithString:[@"https:" stringByAppendingString:[absoluteString substringFromIndex:5]]];
}
答案 2 :(得分:0)
可能是从缓存中获取图像,因为sdwebimage在将请求发送到URL之前首先检查它。