Сбой: com.apple.root.default-qos

У меня есть довольно простое приложение, которое анализирует RSS-канал и показывает его содержимое в виде таблицы. Оно доступно в App Store. У меня интегрированы отчеты о сбоях Crashlytics. Недавно я получил два отчета. Это немного трудно расшифровать.

Это произошло на iPhone 6 под управлением iOS 10.2.1.

введите описание изображения здесь

Это с iPhone 5 под управлением iOS 10.2.1.

введите описание изображения здесь

Несмотря на то, что он говорит, что происходит сбой из-за нарушения конфиденциальности, я не получаю доступ к службам, для которых требуется разрешение в моем приложении.

Кроме того, поиск в com.apple.root.default-qos заставил меня поверить, что это может иметь какое-то отношение к фоновым потокам. Единственное место, где я использую фоновый поток, — это анализ данных RSS-канала.

DispatchQueue.global(qos: .background).async {

    guard let data = try? Data(contentsOf: URL) else {
        return
    }

    do {
        let xmlDoc = try AEXMLDocument(xml: data)

        if let items = xmlDoc.root["channel"]["item"].all {
            self.posts.removeAll()

            for item in items {
                let title = item["title"].value ?? ""
                // ...
                self.posts.append(jobPost)
            }

            DispatchQueue.main.async {
                self.saveposts(self.posts)
                self.posts.sort { $0.publishDate > $1.publishDate }
                self.tableView.reloadData()
                UIApplication.shared.toggleNetworkActivityIndicator(show: false)
                self.toggleUI(enable: true)
                if self.refreshControl.isRefreshing { self.refreshControl.endRefreshing() }
            }

        }

    } catch let error as NSError {
        print("RSS parsing failed: \(error)")
        self.showErrorAlert(error)
        UIApplication.shared.toggleNetworkActivityIndicator(show: false)
        self.toggleUI(enable: true)
        if self.refreshControl.isRefreshing { self.refreshControl.endRefreshing() }
    }
}

Я протестировал этот код на своем iPhone 5 под управлением iOS 9.3.5 и симуляторах под управлением iOS 10.2, но сбоев не произошло.

Есть ли другой способ отследить эту проблему?


person Isuru    schedule 10.03.2017    source источник
comment
Это похоже на проблему с разрешениями. Вы уверены, что не используете что-то, для чего требуется разрешение, и устройство, на котором вы тестируете, уже предоставляет это разрешение? См. это и это. Кроме того, вот список разрешений от Apple.   -  person paulvs    schedule 10.03.2017
comment
Я дважды проверил все. В моем устройстве в настройках включены обычные сотовые данные и все. Поскольку на моем устройстве все еще установлена ​​iOS 9, я еще раз проверил это, сбросив симулятор, работающий под управлением iOS 10.2, и переустановив приложение. Все еще нет аварии. Другое дело, если бы это действительно был сбой, связанный с разрешением, я бы получил все сообщение об ошибке, какое разрешение отсутствует, с отчетом о сбое, которого я не получил в этом случае.   -  person Isuru    schedule 10.03.2017
comment
И также я должен отметить, что было сообщено только о двух случаях (по одному) этих ошибок. У других пользователей сеансы на 100% без сбоев.   -  person Isuru    schedule 10.03.2017
comment
Вы используете рекламный фреймворк? Убедитесь, что вы проверили, какие разрешения для этого требуются — иногда может показываться реклама, требующая каких-то странных разрешений. Вы не обязательно видите сообщение об отсутствии разрешения - например. если вы пытаетесь использовать данные CoreMotion.   -  person Ashley Mills    schedule 10.03.2017
comment
@AshleyMills Нет, никакой рекламы. Я использую Realm, AEXML и вашу библиотеку Reachability :D   -  person Isuru    schedule 10.03.2017
comment
Ну, я почти уверен, что я не виноват! :D   -  person Ashley Mills    schedule 10.03.2017
comment
ха-ха... да, это не может быть ни одна из библиотек, так как я без проблем использовал их в других проектах.   -  person Isuru    schedule 10.03.2017
comment
Стоит просмотреть здесь и проверить, не делаете ли вы что-то, что, по вашему мнению, не требовало одобрения… developer.apple.com/library/prerelease/content/documentation/   -  person Ashley Mills    schedule 10.03.2017
comment
Вы случайно не используете функцию общего доступа для обмена содержимым приложения, например изображениями, с социальными сетями? Если да, то кнопка Save Image в UIActivityViewController вызовет сбой, если, например, разрешение галереи не предоставлено.   -  person paulvs    schedule 10.03.2017
comment
@paulvs У меня есть функция общего доступа, но я добавил saveToCameraRoll в качестве исключенного типа активности.   -  person Isuru    schedule 10.03.2017


Ответы (1)


Я бы дважды проверил все ваши разрешения. В моем случае, начиная с iOS10, вам нужны разрешения для сохранения материала в фотопленку пользователя. В моем приложении я показывал общий лист по умолчанию, и всякий раз, когда пользователь выбирал «сохранить фото», приложение вылетало с одним из этих очень бесполезных сообщений об ошибке. я добавил

<key>NSPhotoLibraryAddUsageDescription</key>
    <string>Allow you to save charts and graphs from the app to your phone.</string>

моим info.plist, clean и run. И все проблема решилась.

person Chase Roberts    schedule 16.10.2017