2015-07-08 5 views
4

Мое приложение, которое отлично работает под iOS8, больше не работает под iOS9. Проблема заключается в том, что, несмотря на наличие следующих в моем .plist файле:App Transport Security breaks Веб-просмотр

<key>NSAppTransportSecurity</key> 
<dict> 
    <!--Include to allow all connections (DANGER)--> 
    <key>NSAllowsArbitraryLoads</key> 
    <true/> 
</dict> 

следующий код:

NSURL *targetURL = [NSURL URLWithString:_caseStudyListTitleURL]; 
NSURLRequest *request = [NSURLRequest requestWithURL:targetURL]; 
[_myWebView loadRequest:request]; 

приводит к ошибке:
NSURLSession/NSURLConnection HTTP загрузка не удалась (kCFStreamErrorDomainSSL, -9813)

Это, конечно, приводит к отображению пустого webView.

Все остальные коды NSURLSession в приложении функционируют правильно.

Я запускаю XCode 7 Beta 3 и iOS 9 на своем тестовом iPad.

Любые идеи на это были бы очень признательны!

+0

Вы разобрались? Был ли целевой URL с использованием HTTP или HTTPS? Можете ли вы воспроизвести это с помощью URL-адреса, который вы можете публиковать публично? –

ответ

2

Попробуйте это решение:

<key>NSAppTransportSecurity</key> 
<dict> 
    <key>NSExceptionDomains</key> 
    <dict> 
     <key>yourdomain.com</key> 
     <dict> 
      <key>NSIncludesSubdomains</key> 
      <true/> 
      <key>NSTemporaryExceptionAllowsInsecureHTTPLoads</key> 
      <true/> 
      <key>NSTemporaryExceptionMinimumTLSVersion</key> 
      <string>TLSv1.1</string> 
     </dict> 
    </dict> 
</dict> 
0

Это происходит потому, что вы используете самозаверяющий сертификат, необходимо добавить дополнительный код. Поскольку по умолчанию iOS отклонит все ненадежные https-соединения.

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

Используйте этот метод для обхода аутентификации вызова:

-(void)connection:(NSURLConnection *)connection didReceiveAuthenticationChallenge:(NSURLAuthenticationChallenge *)challenge{ 

//code to cancel authentication challenge 

} 

В случае, если вы не знаете, как использовать его, чтобы отменить вызов аутентификации, то вы можете найти большую помощь от этого article regarding loading HTTPS url in WebView.

Also have a look at this answer as well.