Почему быстрый синтаксический анализ.getDataInBackgroundWithBlock заблокирован как HTTP-запрос в виде открытого текста?
Я пишу быстрое приложение для iOS, которое использует Parse, размещенный на Heroku. Насколько я знаю, весь транспорт данных выполняется по протоколу HTTPS, и у меня нет обходного пути безопасности транспорта приложений для info.plist (и я намерен сохранить его таким образом). До сих пор все запросы Parse выполнялись без ошибок как на симуляторе, так и на реальном iphone с 9.3.3 или 9.3.5.
Это было до сих пор, когда я добавил этот код, который работает безупречно на симуляторе, но вылетает на iphone из-за запроса открытого текста по HTTP. Но почему запрос будет сделан через HTTP?
override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCellWithIdentifier(idInstagramFeedCell, forIndexPath: indexPath) as! InstagramFeedCell
let imageFile = feed[indexPath.row].imageFile as PFFile
imageFile.getDataInBackgroundWithBlock({ (data, error) in
if let image = UIImage(data: data!) {
cell.postImage.image = image
} else {
cell.postImage.image = UIImage(named: defaultImageFile)
}
})
cell.postUsername.text = feed[indexPath.row].username
cell.postCaption.text = feed[indexPath.row].caption
return cell
}
Оскорбительная линия изолирована от imageFile.getDataInBackgroundWithBlock({ ... })
так как, если это закомментировано, приложение не падает на iphone.
Ошибки в консоли:
2016-08-18 18:51:56.074 ParseStarterProject-Swift[3694:2189084] 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.
2016-08-18 18:51:56.081 ParseStarterProject-Swift[3694:2189342] [Error]: The resource could not be loaded because the App Transport Security policy requires the use of a secure connection. (Code: 100, Version: 1.12.0)
2016-08-18 18:51:56.081 ParseStarterProject-Swift[3694:2189342] [Error]: Network connection failed. Making attempt 1 after sleeping for 1.373388 seconds.
2016-08-18 18:51:56.084 ParseStarterProject-Swift[3694:2189342] [Error]: The resource could not be loaded because the App Transport Security policy requires the use of a secure connection. (Code: 100, Version: 1.12.0)
Как ни странно, у этого плаката есть своего рода противоположная проблема. Любая помощь приветствуется.
Дополнительные наблюдения: я на самом деле только что видел сбой даже на симуляторе. Первоначально все изображения, загруженные (т.е. размещенные) в Parse, являются фотографиями из самого симулятора. Когда приложение, запущенное на реальном устройстве, пытается загрузить эти образы, происходит сбой, как описано выше. С тех пор с помощью приложения выложил пару фотографий с реального устройства на Parse. Когда приложение, запущенное на симуляторе, пытается загрузить эти фотографии, симулятор вылетает с той же ошибкой, что и выше.
2 ответа
Предоставлено @luizmb на GitHub, решение простое. Видимо, есть эта малоизвестная (по крайней мере мне) переменная сервера Parse publicServerURL
который должен содержать то же значение, что и serverURL
, Если для управления экземпляром вы используете консоль Heroku Parse, вы можете установить ее, задав переменную окружения PARSE_PUBLIC_SERVER_URL
, Если у вас есть экземпляр для настройки, вам нужно добавить эту строку в index.js
когда вы создаете экземпляр Parse:
publicServerURL: process.env.PARSE_PUBLIC_SERVER_URL || process.env.PARSER_SERVER_URL || process.env.SERVER_URL,
Однако есть два предостережения: 1) Если у вас есть какие-либо файлы изображений, загруженные до реализации этого решения, как я, вы все равно можете столкнуться с ошибкой ATS. Чтобы решить эту проблему, вы должны удалить все такие изображения из вашего экземпляра, как я должен был сделать. 2) Я мог заставить его работать только на реальном устройстве (iOS 9.3.5), но при запуске точно такого же приложения на симуляторе (iOS 9.3), ошибка ATS не появляется, но они делают, что я не нашел способа байпас:
NSURLSession/NSURLConnection HTTP load failed (kCFStreamErrorDomainSSL, -9802)
[Error]: An SSL error has occurred and a secure connection to the server cannot be made. (Code: 100, Version: 1.14.2)
[Error]: Network connection failed. Making attempt 4 after sleeping for 15.848020 seconds.
Это решение позволяет вашему приложению загружать файлы изображений из Parse без необходимости выключать ATS через AllowArbitraryLoads
в info.plist
, Пожалуйста, смотрите здесь для деталей.
Кажется, вы используете старый Parse SDK, обновите его до последней версии (v1.14.2), и проблема может исчезнуть.