2015-06-17 6 views
0

У меня возникла проблема с использованием NSURLSession в Xcode7 и Swift2. По какой-то причине я продолжаю получать ошибку NSURLErrordomain, но тот же код работает с Xcode6 с быстрым 1.2.Код NSURLSession не работает в Xcode7, но тот же код работает в xcode6

let baseURL = NSURL(string: "https://itunes.apple.com/search?term=one%20republic") 
let downloadTask = session.downloadTaskWithURL(baseURL!, completionHandler: { (location, response, error) -> Void in 
    if(error == nil){ 
    let objectData = NSData(contentsOfURL: location!) 
    let tmpData :NSString = NSString(data: objectData!, encoding: NSUTF8StringEncoding)! 
    print("success") 
    } else { 
    print("Failed") 
    }    
}) 
downloadTask!.resume() 

enter image description here

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

ответ

0

Я нашел решение из-за новой безопасности переноса приложений. Вам нужно добавить ключ NSAppTransportSecurity в Info.plist в качестве словаря с свойством NSAllowsArbitraryLoads, установленным в true.

enter image description here

И это должно работать нормально больше здесь NSURLSession changes in iOS9

1

Транспорт Безопасность Применение описано здесь:

https://developer.apple.com/library/prerelease/ios/technotes/App-Transport-Security-Technote/

Вы должны добавить надлежащее исключение на сервере серверным основе , NSAllowsArbitraryLoads полностью отключает AppTransportSecurity; Это обескураживает и в конечном итоге может отклонить ваше приложение.

Вы должны использовать NSExceptions только в том случае, если вы не можете использовать надлежащие https для всех URL-адресов, например. когда сервер контролирует другую сторону, для уже существующего приложения или если есть технические причины, препятствующие серверу обслуживать соединения https.

Вы должны использовать форвардные секретные исключения, если сервер не может поддерживать самые современные протоколы https.

АТС приняты протоколы по умолчанию являются следующие: TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384 TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256 TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384 TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256 TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384 TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256 TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA

Если ваш сервер поддерживает https с этими протоколами, а сертификаты настроены правильно, а версия TLS - 1,2, в файл info.plist не нужно добавлять конфигурацию безопасности приложения.

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