Приложение зависло на симуляторе бета-версии iOS 13 с бета-версией Xcode 11, но нормально работает на симуляторе бета-версии iOS 13 с Xcode 10

Я столкнулся с очень странной проблемой. В начале приложения я вызываю API, чтобы получить токен. Он работал нормально до iOS 12. Но в бета-версии iOS 13 закрытие завершения не вызывается, и приложение продолжает накапливать память и, наконец, вылетает.

Однако, когда я запускаю тот же код из симулятора бета-версии Xcode 10 в iOS 13, он работает нормально.

Я прикрепляю код, через который я вызываю API, пожалуйста, помогите мне.

Это функция, в которой я не получаю обработчик завершения и просто теряю управление.

@discardableResult
static func requestObject<T: Decodable>(urlRequest: URLRequest, sessionManager: SessionManager? = nil, keyPath: String? = nil, decoder: JSONDecoder = JSONDecoder(), queue: DispatchQueue? = nil, completion: @escaping (NetworkResult<T>) -> Void) -> URLSessionTask? {

    let request = self.request(urlRequest: urlRequest, sessionManager: sessionManager)
        .responseDecodableObject(decoder: decoder, keyPath: keyPath, queue: queue) { (response: DataResponse<T>) in

            switch response.result {
            case .failure(let error):    completion(NetworkResult.failure(error))
            case .success(let value):    completion(NetworkResult.success(value))
            }
    }

    return request.task
}

И это функция запроса, которую я вызываю.

static func request(urlRequest: URLRequest, sessionManager: SessionManager?) -> DataRequest {

    guard let sessionManager = sessionManager else {
        return Alamofire.request(urlRequest)
            .validate { (request, response, data) -> Request.ValidationResult in
                return self.validation(request: request, response: response, data: data)
        }
    }

    return sessionManager.request(urlRequest)
        .validate { (request, response, data) -> Request.ValidationResult in
            return self.validation(request: request, response: response, data: data)
    }
}

person Ghulam Rasool    schedule 26.08.2019    source источник
comment
@nebiros да, я исправил. На самом деле моя основная беседа проходила каждый раз. И это вызывает задержку всех остальных потоков. Но я подумал, что это может быть проблема в Xcode или сетевых вызовах и т. Д. Когда приложение зависает, приостановите приложение и проверьте, где находится основной поток.   -  person Ghulam Rasool    schedule 30.08.2019
comment
спасибо за ответ, мы видели проблему с основным потоком, но с движением ядра, в Xcode 10, не знаю, почему Xcode 11 не улавливает это   -  person nebiros    schedule 30.08.2019
comment
@nebiros да, у меня была такая же проблема. Он отлично работал на симуляторе iOS 13 с Xcode 10, но не с Xcode 11. Странно   -  person Ghulam Rasool    schedule 02.09.2019


Ответы (2)


Нашел наконец решение :)

На самом деле мой основной поток был заблокирован, и он блокировал все другие потоки, и приложение продолжало накапливать память. Я использовал сторонний лейбл, который вызвал эту проблему.

Вот код, который вызвал проблему.

override func layoutSubviews() {
    super.layoutSubviews()
    self.frame = self.frame.insetBy(dx: 0, dy: -3)
}

До iOS 12 все работало нормально. Но он удерживал основной поток в iOS 13 и вызывал сбой приложения после сбора слишком большого количества памяти.

Я удалил код обновления кадра из layoutubviews, и все заработало :)

person Ghulam Rasool    schedule 30.08.2019

Похоже на ошибку бета-версии iOS 13. Вы можете сообщить об этом здесь, https://developer.apple.com/bug-reporting/.

person User123335511231    schedule 26.08.2019