SSL_ERROR_SSL(1): операция не удалась в библиотеке
Я получаю немного SSL Error
s (которые приводят к остановке / зависанию моего проекта без сбоев, так как у меня есть DispatchGroup
в ожидании запроса), который я не знаю, как они вызваны, что они, или что с этим делать.
Я прочитал множество страниц примерно об этой проблеме, но не так много документации или людей, имеющих такую же проблему. Я пытался изменить info.plist, но это, похоже, не помогло. И то и другое plist
вот так: (accounts.spotify.com
это домен для URL запроса токена доступа)
Я вижу, что мой код не работает, когда я делаю запрос к серверу. (Это в моих рамках). Как упоминалось ранее, у меня есть DispatchGroup
жду этого запроса, но код останавливается.
self.currentToken = try self.spotifyRequest("https://accounts.spotify.com/api/token", method: .post, parameters: parameters)
Мой метод запроса:
private func spotifyRequest(_ url: URLConvertible, method: HTTPMethod, parameters: Parameters? = nil, headers: HTTPHeaders? = nil) throws -> JSONStandard {
// Create a dispatch group to handle threads
let group = DispatchGroup()
group.enter()
// Status of the request (starts as nil)
var status: JSONStandard?
DispatchQueue.global(qos: .userInitiated).async {
Alamofire.request(url, method: method, parameters: parameters, headers: headers).responseJSON(completionHandler: { response in
// Check if response is valid
if let requestResponse = response.result.value as? JSONStandard {
status = requestResponse
} else {
status = nil
}
// Let the next tasks be completed, it has finished waiting for the request
group.leave()
})
}
// Wait for a result
group.wait()
// Return value or throw an error
if let safeStatus = status {
return safeStatus
} else {
getAccessToken()
throw SpotifyError.failedToCompleteRequest
}
}
Я не совсем уверен, что вызвало проблему, потому что все, что я сделал, это немного отредактировал и снова заархивировал фреймворк.
Однако ранее это работало на обоих (поскольку я использую этот универсальный каркасный скрипт)
Вот мой журнал сбоев (чего я не понимаю!):
2018-08-18 21: 36: 45.747984 + 0100 Songvote [4854: 1517160] [BoringSSL] boringssl_session_errorlog (224) [C2.1: 2] [0x107d7c600] [boringssl_session_read] SSL_ERROR_SSL (1): сбой операции в библиотеке
2018-08-18 21:36:45.748123+0100 Songvote[4854:1517160] [BoringSSL] boringssl_session_handshake_error_print(205) [C2.1:2][0x107d7c600] 4427428040: ошибка: 100000d7: подпрограммы SSL:OPENSS_HOL_SH: /Library/Caches/com.apple.xbs/Sources/boringssl/boringssl-109.200.32/ssl/ssl_lib.cc:1081:
2018-08-18 21: 36: 45.748238 + 0100 Songvote [4854: 1517160] [BoringSSL] boringssl_session_errorlog (224) [C2.1: 2] [0x107d7c600] [boringssl_session_read] SSL_ERROR_SSL (1): сбой операции в библиотеке
2018-08-18 21:36:45.748432+0100 Songvote[4854:1517160] [BoringSSL] boringssl_session_handshake_error_print(205) [C2.1:2][0x107d7c600] 4427428040: ошибка: 100000d7: подпрограммы SSL:OPENSS_HIL_HIL /Library/Caches/com.apple.xbs/Sources/boringssl/boringssl-109.200.32/ssl/ssl_lib.cc:1081:
2018-08-18 21: 36: 45.754554 + 0100 Songvote [4854: 1517160] [BoringSSL] boringssl_session_errorlog (224) [C2.1: 2] [0x107d7c600] [boringssl_session_read] SSL_ERROR_SSL (1): сбой операции в библиотеке
2018-08-18 21:36:45.754640+0100 Songvote[4854:1517160] [BoringSSL] boringssl_session_handshake_error_print(205) [C2.1:2][0x107d7c600] 4427428040: ошибка: 100000d7: подпрограммы SSL:OPENSS_HIL_SH: /Library/Caches/com.apple.xbs/Sources/boringssl/boringssl-109.200.32/ssl/ssl_lib.cc:1081:
2018-08-18 21: 36: 45.754717 + 0100 Songvote [4854: 1517160] [BoringSSL] boringssl_session_errorlog (224) [C2.1: 2] [0x107d7c600] [boringssl_session_read] SSL_ERROR_SSL (1): сбой операции в библиотеке
2018-08-18 21:36:45.754796+0100 Songvote[4854:1517160] [BoringSSL] boringssl_session_handshake_error_print(205) [C2.1:2][0x107d7c600] 4427428040: ошибка: 100000d7: подпрограммы SSL:OPENSS_HOL_SH: /Library/Caches/com.apple.xbs/Sources/boringssl/boringssl-109.200.32/ssl/ssl_lib.cc:1081:
2018-08-18 21: 38: 43.427156 + 0100 Songvote [4854: 1517503] [BoringSSL] nw_protocol_boringssl_get_output_frames (1301) [C1.1: 2] [0x107e1b4c0] получить выходные кадры не удалось, состояние 8196
2018-08-18 21: 38: 43.427656 + 0100 Songvote [4854: 1517503] [BoringSSL] nw_protocol_boringssl_get_output_frames (1301) [C1.1: 2] [0x107e1b4c0] получить выходные кадры не удалось, состояние 8196
2018-08-18 21: 38: 43.429723 + 0100 Songvote [4854: 1517503] Статус чтения TIC [1: 0x0]: 1:57
2018-08-18 21: 38: 43.429976 + 0100 Songvote [4854: 1517503] Статус чтения TIC [1: 0x0]: 1:57
2018-08-18 21: 38: 46.008365 + 0100 Songvote [4854: 1517503] [BoringSSL] nw_protocol_boringssl_get_output_frames (1301) [C2.1: 2] [0x107d7c600] получить выходные кадры не удалось, состояние 8196
2018-08-18 21: 38: 46.008664 + 0100 Songvote [4854: 1517503] [BoringSSL] nw_protocol_boringssl_get_output_frames (1301) [C2.1: 2] [0x107d7c600] получить выходные кадры не удалось, состояние 8196
2018-08-18 21: 38: 46.010037 + 0100 Songvote [4854: 1517503] Статус чтения TIC [2:0x0]: 1:57
2018-08-18 21: 38: 46.010215 + 0100 Songvote [4854: 1517503] Статус чтения TIC [2:0x0]: 1:57
Это все для Spotify
запрос через Alamofire
который раньше работал, а теперь таинственным образом не работает. Это не работает на моем устройстве ИЛИ симуляторе.
Это проблема, связанная с безопасным подключением к интернету? Или это другая проблема?
Некоторые ссылки на то, на что я смотрел:
- https://github.com/AFNetworking/AFNetworking/issues/3999
- NSURLSession "Ошибка загрузки HTTP kCFStreamErrorDomainSSL, -9813; Самозаверяющий сертификат
- https://forums.developer.apple.com/thread/79025
- https://forums.developer.apple.com/thread/14221
- iOS 9.3: произошла ошибка SSL и невозможно установить безопасное соединение с сервером
- iOS9 получает ошибку "произошла ошибка ssl, и невозможно установить безопасное соединение с сервером"
Редактирование:
Это проблема на серверах Spotify? Или ошибка в Xcode 10? Я переместил мои рамки .swift
файлы в мой проект, и все еще получать журналы.
Я тоже получаю эти ошибки до моего запроса, странно.
Это ошибка рукопожатия, но я не настраиваю это:
Рукопожатие SSL инициируется, когда ваш браузер отправляет запрос на безопасное подключение к веб-серверу. Сервер отправляет открытый ключ на ваш компьютер, а ваш компьютер проверяет сертификат по известному списку центров сертификации.... Проверьте работоспособность SSL, умышленно вызывая сбой рукопожатия.
Я даже попробовал оформить заказ на более ранней версии, чтобы отменить все изменения (которые в предыдущих версиях работали совершенно нормально), используя git
, что никак не повлияло на это.
Изменить: временное решение:
Похоже, что iOS 12 больше не работает с этими сетевыми запросами. Я отправил отчет об ошибке в Apple 2 дня назад, так что, надеюсь, они исправят это в ближайшее время. Так что я сделал?
Ну, пока, мой iPhone 7 бесполезен, поскольку я нахожусь на бета-версии iOS 12. Так что пока единственный вариант - запустить мой проект на симуляторе. Чтобы сделать это (как будто вы находитесь в бета-версии Xcode 10, потому что симуляторы - iOS 12), перейдите к Xcode -> Preferences -> Components -> iOS 11.4 Simulator
а затем скачать его. Теперь, когда вы выбираете симулятор, выберите те, которые говорят iOS 11.4
,
- Эта часть больше не соответствует действительности.
Что вызывает это?
Хотя эта ошибка ни на что не влияет, она возникает, когда вы запускаете свой проект в iOS 12. Насколько я знаю, это НЕ проблема безопасности. Однако моя проблема с неработающим кодом была вызвана взаимоблокировкой, а не тем, что я думал, было из-за этой ошибки.
Обновление: что Apple сделала с моим сообщением об ошибке
Ну, хотя я не получил сообщение или что-то от Apple, отчет помечен как "дубликат", так как кто-то еще сообщил об этом до меня. Если я получу какую-либо информацию о том, когда она будет исправлена, я обновлю ее здесь.
Если у вас есть какие-либо вопросы, советы или указатели, пожалуйста, дайте мне знать! Заранее спасибо!
1 ответ
тупик
Я предполагаю, что spotifyRequest будет вызываться в основном потоке.
Так что, если основной поток достигает линии
group.wait()
и эта строка ответа JSON завершение Handler еще не был вызван:
group.leave()
тогда основной поток блокируется из-за вызова group.wait() выше. Из-за заблокированного основного потока group.leave() не может быть вызван. Классический тупик.
Verfication
Установка точки останова на линию
if let safeStatus = status {
показывает, что эта строка никогда не называется.
Минимальный пример, который работает
В качестве отправной точки здесь приведен код для минимального примера, который дает результат.
import UIKit
import Alamofire
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
self.contactSpotify {
print ("result: \(String(describing: $0)) error: \(String(describing: $1))")
}
}
func contactSpotify(completion: @escaping ([String: Any]?, Error?) -> Void) {
let url = URL(string: "https://accounts.spotify.com/api/token")!
Alamofire.request(url,
method: .post,
parameters: ["grant_type": "refresh_token",
"client_id": "<someClientId>",
"refresh_token": "<someRefreshToken>",
"client_secret": "<someClientSecret>"])
.validate()
.responseJSON { response in
guard response.result.isSuccess else {
completion(nil, response.result.error)
return
}
completion(response.result.value as? [String: Any], nil)
}
}
}
Это дает как вывод в консоли:
result: Optional(["access_token": XXX, "scope": user-read-email user-read-private, "token_type": Bearer, "expires_in": 3600]) error: nil
Настройки ATS в info.plist
Spotify предлагает действительную цепочку сертификатов TLS на своем сервере. Таким образом, нет необходимости в настройках ATS в info.plist.
Предупреждения SSL в консоли
Я получаю те же предупреждения SSL в консоли, когда запускаю приложение на симуляторе iOS 12, как вы. Тем не менее соединение установлено и запрос доставляет данные. Возможно, это пропало в одной из следующих бета-версий.
У меня было то же предупреждение с Codegen Swagger в эмуляторе при любом ответном вызове. Но все сработало. Это предупреждение исчезло, только когда я добавил переменную окружения Скрыть странные нежелательные журналы XCode