Сбой CMotionManager при создании экземпляра - PullRequest
0 голосов
/ 25 октября 2018

Я получаю сбой при создании экземпляра объекта CMMotionManager для Core Motion.Это на iPhone Xs под управлением iOS 12.0.1.

Я могу надежно воспроизвести это с помощью приложения для одного просмотра со следующим контроллером представления.

import UIKit
import CoreMotion

class ViewController: UIViewController {
    var motion: CMMotionManager?
    override func viewDidLoad() {
        super.viewDidLoad()

        // This causes a crash on iPhone Xs, iOS 12.0.1
        self.motion = CMMotionManager()
    }
}

Полный образец проекта находится наhttps://github.com/doctorcolinsmith/motiontestcrash/tree/master

При выполнении вышеизложенного я получаю сообщение об ошибке в потоке со следующим выводом в отладчике.

=================================================================
Main Thread Checker: UI API called on a background thread: -[UIApplication applicationState]
PID: 3634, TID: 630341, Thread name: com.apple.CoreMotion.MotionThread, Queue name: com.apple.root.default-qos.overcommit, QoS: 0
Backtrace:
4   libobjc.A.dylib                     0x000000019b0d3894 <redacted> + 56
5   CoreMotion                          0x00000001a19337a4 CoreMotion + 305060
6   CoreMotion                          0x00000001a1933cd8 CoreMotion + 306392
7   CoreMotion                          0x00000001a1933be8 CoreMotion + 306152
8   CoreMotion                          0x00000001a19653cc CoreMotion + 508876
9   CoreMotion                          0x00000001a196542c CoreMotion + 508972
10  CoreFoundation                      0x000000019be6c888 <redacted> + 28
11  CoreFoundation                      0x000000019be6c16c <redacted> + 276
12  CoreFoundation                      0x000000019be67470 <redacted> + 2324
13  CoreFoundation                      0x000000019be66844 CFRunLoopRunSpecific + 452
14  CoreFoundation                      0x000000019be675a8 CFRunLoopRun + 84
15  CoreMotion                          0x00000001a1964d64 CoreMotion + 507236
16  libsystem_pthread.dylib             0x000000019bae1a04 <redacted> + 132
17  libsystem_pthread.dylib             0x000000019bae1960 _pthread_start + 52
18  libsystem_pthread.dylib             0x000000019bae9df4 thread_start + 4
2018-10-24 16:19:31.423680-0700 motiontest[3634:630341] [reports] Main Thread Checker: UI API called on a background thread: -[UIApplication applicationState]
PID: 3634, TID: 630341, Thread name: com.apple.CoreMotion.MotionThread, Queue name: com.apple.root.default-qos.overcommit, QoS: 0
Backtrace:
4   libobjc.A.dylib                     0x000000019b0d3894 <redacted> + 56
5   CoreMotion                          0x00000001a19337a4 CoreMotion + 305060
6   CoreMotion                          0x00000001a1933cd8 CoreMotion + 306392
7   CoreMotion                          0x00000001a1933be8 CoreMotion + 306152
8   CoreMotion                          0x00000001a19653cc CoreMotion + 508876
9   CoreMotion                          0x00000001a196542c CoreMotion + 508972
10  CoreFoundation                      0x000000019be6c888 <redacted> + 28
11  CoreFoundation                      0x000000019be6c16c <redacted> + 276
12  CoreFoundation                      0x000000019be67470 <redacted> + 2324
13  CoreFoundation                      0x000000019be66844 CFRunLoopRunSpecific + 452
14  CoreFoundation                      0x000000019be675a8 CFRunLoopRun + 84
15  CoreMotion                          0x00000001a1964d64 CoreMotion + 507236
16  libsystem_pthread.dylib             0x000000019bae1a04 <redacted> + 132
17  libsystem_pthread.dylib             0x000000019bae1960 _pthread_start + 52
18  libsystem_pthread.dylib             0x000000019bae9df4 thread_start + 4
(lldb) 

Кто-нибудь сталкивался с этим раньше или есть идея о том, какрешить аварию?

Ответы [ 2 ]

0 голосов
/ 25 октября 2018

Ну, я протестировал ваше приложение как на физическом iPhone 6S , так и iPhone 7 - очевидно, с iOS 12.0.1.Я также проверил несколько вещей в вашем проекте и не смог воспроизвести вашу проблему вообще - даже в симуляторах - и я не думаю, что возможно загрузить симулятор с конкретными исправлениями ( 12.0.x), только с незначительными обновлениями версий, поэтому следующим будет 12.1 .Это выглядит очень специфично для аппаратного обеспечения iPhone XS, и я бы посоветовал вам решить проблему с поддержкой Apple .

РЕДАКТИРОВАТЬ : Ну, я видел, что выуже заполнен отчет об ошибке на openradar . Этот парень даже ссылался на статус отчета об ошибке на openradar-mirror .

0 голосов
/ 25 октября 2018

Я не знаю много о CoreMotion, но сообщение об ошибке говорит вам, что вы пытаетесь вызвать действие пользовательского интерфейса в фоновом потоке.Попробуйте вставить свой код в:

DispatchQueue.main.async {
    //your code here
}

Также кажется, что вы пытаетесь выполнить действия, связанные с пользовательским интерфейсом, в viewDidLoad().Технически это нормально, но помните, что некоторые виды, вероятно, не выложены в тот момент.

...