В настоящее время я работаю над Xcode 7 beta 6. Я пытаюсь отправить запрос "DELETE" на http://mySubdomain.herokuapp.com
Получаемая ошибка:
App Transport Security заблокировала загрузку ресурса с открытым текстом HTTP (http://), поскольку она небезопасна. Временные исключения можно настроить через файл приложения Info.plist.
Ошибка при вызове API: Ошибка Домен = NSURLErrorDomain Code = -1022 Ресурс не может быть загружен, так как для политики безопасности приложения требуется использование безопасного соединения.
NSLocalizedDescription = Ресурс не может быть загружен, потому что для политики безопасности приложения требуется использование безопасного соединения. NSUnderlyingError = 0x796f7ef0 {Ошибка домена = kCFErrorDomainCFNetwork Code = -1022 "(null)" }}
В моем фактическом вызове API я помещал "https" вместо "http", и это действительно работало на мои запросы POST. Но запрос DELETE вызывает указанную выше ошибку.
Я видел решения, связанные с файлом pList, но ни один из них не работал у меня. Ниже перечислены мои попытки.
Первая попытка:
<key>NSAppTransportSecurity</key>
<dict>
<key>NSAllowsArbitraryLoads</key>
<true/>
</dict>
Вторая попытка:
<key>NSAppTransportSecurity</key>
<dict>
<key>NSExceptionDomains</key>
<dict>
<key>herokuapp.com</key>
<dict>
<key>NSIncludesSubdomains</key>
<true/>
<key>NSExceptionAllowsInsecureHTTPLoads</key>
<true/>
<key>NSExceptionRequiresForwardSecrecy</key>
<false/>
<key>NSExceptionMinimumTLSVersion</key>
<string>TLSv1.2</string>
<key>NSThirdPartyExceptionAllowsInsecureHTTPLoads</key>
<true/>
<key>NSThirdPartyExceptionRequiresForwardSecrecy</key>
<false/>
<key>NSThirdPartyExceptionMinimumTLSVersion</key>
<string>TLSv1.2</string>
<key>NSRequiresCertificateTransparency</key>
<false/>
</dict>
</dict>
</dict>
И, наконец, я даже включил все эти временные ключи так:
<key>NSAppTransportSecurity</key>
<dict>
<key>NSExceptionDomains</key>
<dict>
<key>herokuapp.com</key>
<dict>
<key>NSIncludesSubdomains</key>
<true/>
<key>NSTemporaryIncludesSubdomains</key>
<true/>
<key>NSExceptionAllowsInsecureHTTPLoads</key>
<true/>
<key>NSTemporaryExceptionAllowsInsecureHTTPLoads</key>
<true/>
<key>NSExceptionRequiresForwardSecrecy</key>
<false/>
<key>NSTemporaryExceptionRequiresForwardSecrecy</key>
<false/>
<key>NSExceptionMinimumTLSVersion</key>
<string>TLSv1.2</string>
<key>NSTemporaryExceptionMinimumTLSVersion</key>
<string>TLSv1.2</string>
<key>NSThirdPartyExceptionAllowsInsecureHTTPLoads</key>
<true/>
<key>NSTemporaryThirdPartyExceptionAllowsInsecureHTTPLoads</key>
<true/>
<key>NSThirdPartyExceptionRequiresForwardSecrecy</key>
<false/>
<key>NSTemporaryThirdPartyExceptionRequiresForwardSecrecy</key>
<false/>
<key>NSThirdPartyExceptionMinimumTLSVersion</key>
<string>TLSv1.2</string>
<key>NSTemporaryThirdPartyExceptionMinimumTLSVersion</key>
<string>TLSv1.2</string>
<key>NSRequiresCertificateTransparency</key>
<false/>
<key>NSTemporaryRequiresCertificateTransparency</key>
<false/>
</dict>
</dict>
</dict>
Все без везения! Я всегда получаю ту же ошибку. Запрос DELETE отформатирован правильно, потому что, когда я вручную его делаю из Postman, я получаю желаемый результат.
Вот как выглядит мой фактический метод вызова API, на всякий случай может быть проблема:
class func makeDELETEALLRequest(completion: (error:Bool) -> Void) {
let session = NSURLSession.sharedSession()
let url = NSURL(string:"https://mysubdomain.herokuapp.com/42kh24kh2kj2g24/clean")
let request = NSMutableURLRequest(URL: url!)
request.HTTPMethod = "DELETE"
let task = session.dataTaskWithRequest(request) { (data, response, error) -> Void in
if (error != nil) {
print("Error making API call: \(error!)")
completion(error: true)
} else {
let HTTPResponse = response as! NSHTTPURLResponse
let statusCode = HTTPResponse.statusCode
if (statusCode == 200){
print("Successfully deleted!")
completion(error: false)
} else {
print("Different status code: \(statusCode)")
completion(error: true)
}
}
}
task.resume()
}
Еще раз, я использую Xcode 7 beta 6.
ОБ МОЕМ ВЫБОРЕ ОТВЕТ Ответ, который я выбрал как правильный, был прав для меня, потому что я внес все эти изменения в неправильный файл pList в свой проект, и этот ответ был единственным, который рассматривал эту возможность. Решения, предлагаемые другими ответами, не являются ошибочными, поэтому любые другие люди, испытывающие эту проблему, должны дать им попробовать, так как они действительны. Я надеюсь, что это поможет любому, у кого есть подобные проблемы.