2016-11-28 1 views
0

Поскольку Apple заставит нас включить ATS с 2017 года, я занимаюсь некоторыми расследованиями, но имею некоторые сомнения относительно класса SDWebImage.Почему 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; 
    }); 
}); 

Как это делает SDWebImage?

ответ

1

Убедитесь, что «NSAllowsArbitraryLoads» не указан в вашем файле Info.plist.

Насколько я могу судить, SDWebImage подчиняется тем же ограничениям ATS, что и все другие приложения.

Например, когда я подключаю ваш URL-адрес к демонстрационному приложению SDWebImage (in their MasterViewController.m) и отключает исключения ATS, я получаю сообщение «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.» в консоли Xcode.

+0

Вы правы, SDWebImage подчиняется тем же ограничениям ОВД. И я, наконец, нашел причину, когда я впервые проверил загрузку http-изображений, я отключил ATS, поэтому SDWebImage может загрузить изображение успешно, но затем я включил ATS, SDWebImage все равно может загрузить изображение успешно, но это потому, что SDWebImage кэшировало изображение, а не загружалось из Интернета, поэтому, если я изменю параметр на другой URL-адрес URL-адреса при включенном ATS, он все равно не загрузится. –

0

Невероятно, но, возможно, в случае отказа загрузки SDWebImage просматривает схему NSURL, и если это @ "http:", она меняет ее на @ "https:"?

NSString *absoluteString = url.absoluteString; 
if ([absoluteString hasPrefix:@"http:"]) { 
    url = [NSURL URLWithString:[@"https:" stringByAppendingString:[absoluteString substringFromIndex:5]]]; 
} 
0

может получать изображение из кэша, как тот первый проверяет место sdwebimage, прежде чем он отправляет запрос на URL-адрес.

Смежные вопросы