2015-10-01 2 views
0

Я получил эту ошибку, когда пытаюсь получить изображения через сервер.
Вот мой код для извлечения изображения с помощью сервера:NSURLSession/NSURLConnection Ошибка загрузки HTTP (kCFStreamErrorDomainSSL, -9802) в ios 9

-(void)downloadThumbnailWithHeight:(NSInteger)height width:(NSInteger)width callback:(void (^)(UIImage*))callback { 
    NSString* key = [NSString stringWithFormat:@"%ldx%ld", (long)width, (long)height]; 
    UIImage* __block thumbnail = [_thumbnails objectForKey:key]; 
    if (thumbnail) { callback(thumbnail); return; } 
    HttpRequest* request = [HttpRequest requestWithRelativePath:[NSString stringWithFormat:@"/api/v1/incident/%@/resize?height=%d&width=%d",self.uuid, (int)height, (int)width]]; 
    [HttpResponse processAsynchronousRequest:request onCompletion:^(HttpResponse* response) { 
     dispatch_async(dispatch_get_main_queue(), ^{ 
      thumbnail = [UIImage imageWithData:response.responseData]; 
      if (!thumbnail) thumbnail = [UIImage imageNamed:@"gray_thumbnail_background.png"]; 
      [_thumbnails setObject:thumbnail forKey:key]; 
      callback(thumbnail); 
     }); 
    }]; 
} 

Перед тем, как задать этот вопрос в StackOverflow я уже пытаюсь добавить это в моем info.plist. Вот мой plsit:

<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> 
<plist version="1.0"> 
<dict> 
    <key>NSAppTransportSecurity</key> 
    <dict> 
     <key>NSAllowsArbitraryLoads</key> 
     <true/> 
    </dict> 
    <key>NSLocationAlwaysUsageDescription</key> 
    <string>To Find out your location</string> 
    <key>NSLocationWhenInUseUsageDescription</key> 
    <string>To Find out your location</string> 
    <key>CFBundleIdentifier</key> 
    <string>com.abc.def</string> 
    <key>CFBundleExecutable</key> 
    <string>${EXECUTABLE_NAME}</string> 
    <key>CFBundleInfoDictionaryVersion</key> 
    <string>6.0</string> 
    <key>CFBundleShortVersionString</key> 
    <string>1.0</string> 
    <key>CFBundleVersion</key> 
    <string>1</string> 
    <key>CFBundleDevelopmentRegion</key> 
    <string>en</string> 
    <key>CFBundlePackageType</key> 
    <string>BNDL</string> 
    <key>CFBundleSignature</key> 
    <string>????</string> 
</dict> 
</plist> 

Но он все еще не работает.
IT дает мне следующее сообщение об ошибке, когда я запускаю приложение:

App транспортная безопасность заблокировала читаемую HTTP (HTTP: //) ресурс нагрузки, так как это небезопасно. Временные исключения могут быть настроены с помощью файла Info.plist вашего приложения в файле .

Пожалуйста, помогите мне, потому что я уже занимаю много времени, чтобы решить эту проблему.
Спасибо, заранее.

+0

после добавления NSAllowsArbitraryLoads в PLIST вы должны попытаться удалить приложение и удалить полученную папку данных Xcode и чистый и запустить проект ... .! это работает для меня ..! –

+0

не работает чувак. –

ответ

2

Если вы по каким-либо причинам предпочитаете использовать ключ NSAllowsArbitraryLoads, чтобы игнорировать ограничения безопасности, вы должны поместить его в словарь NSAppTransportSecurity, для этого просто введите свой ключ под ключ NSAppTransportSecurity.

<key>NSAppTransportSecurity</key> 
<dict> 
    <key>NSAllowsArbitraryLoads</key><true/> 
</dict> 

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

Лучшим решением может быть добавление исключения в определенный домен.

Ссылка: https://developer.apple.com/library/prerelease/ios/technotes/App-Transport-Security-Technote/index.html

Вашего NSAppTransportSecurity раздел затем может выглядеть следующим образом:

<key>NSAppTransportSecurity</key> 
<dict> 
    <key>NSExceptionDomains</key> 
    <dict> 
    <key>yourdomain.com</key> 
    <dict> 
     <key>NSIncludesSubdomains</key> 
     <true/> 
     <key>NSExceptionAllowsInsecureHTTPLoads</key> 
     <true/> 
     <key>NSExceptionMinimumTLSVersion</key> 
     <string>TLSv1.2</string> 
    </dict> 
    </dict> 
</dict> 
+0

Я уже пробовал это, но все еще не работал никаких других предложений? –

+0

Пожалуйста, уточните мой обновленный вопрос. Есть ли проблема в моем plist? –

+0

Его не «Вы должны», его «вы можете временно сделать обход». Но вызывающе не «должен». Слово должно подразумевать, что это рекомендуемая практика, которую люди должны делать. – Gruntcakes