Неправильный порядок выполнения в отчете о сбоях в Центре разрешения проблем - PullRequest
0 голосов
/ 24 мая 2018

Мое приложение было отклонено из магазина приложений, потому что есть кнопка, которая вызывает его падение при нажатии на iPad.У меня нет iPad, и ошибка не воспроизводится ни на одном из симуляторов iPad.Вот отчет о сбое, который мне прислал Центр разрешения проблем:

{"app_name":"xxx","timestamp":"2018-05-23 14:18:37.70 -0700","app_version":"0.4.5","slice_uuid":"f7e0571c-a2a9-313c-ab7b-9a9109670ff2","adam_id":1387669409,"build_version":"1","bundleID":"com.b.xxx","share_with_app_devs":false,"is_first_party":false,"bug_type":"109","os_version":"iPhone OS 11.3.1 (15E302)","incident_id":"D5ADA937-9FAF-479B-A925-7B127B5E0C44","name":"xxx"}
Incident Identifier: D5ADA937-9FAF-479B-A925-7B127B5E0C44
CrashReporter Key:   cac3035154ad4b589b77fd30cfea229fc2cfaf20
Hardware Model:      xxx
Process:             xxx [1949]
Path:                /private/var/containers/Bundle/Application/FD86FF84-2DDF-4DFA-B23D-703D4A08316B/xxx.app/xxx
Identifier:          com.b.xxx
Version:             1 (0.4.5)
Code Type:           ARM-64 (Native)
Role:                Foreground
Parent Process:      launchd [1]
Coalition:           com.b.xxx [1153]


Date/Time:           2018-05-23 14:18:37.5753 -0700
Launch Time:         2018-05-23 14:18:31.9754 -0700
OS Version:          iPhone OS 11.3.1 (15E302)
Baseband Version:    6.55.00
Report Version:      104

Exception Type:  EXC_BREAKPOINT (SIGTRAP)
Exception Codes: 0x0000000000000001, 0x0000000180b03644
Termination Signal: Trace/BPT trap: 5
Termination Reason: Namespace SIGNAL, Code 0x5
Terminating Process: exc handler [0]
Triggered by Thread:  0

Application Specific Information:
BUG IN CLIENT OF LIBDISPATCH: trying to lock recursively

Filtered syslog:
None found

Thread 0 name:  Dispatch queue: com.apple.main-thread
Thread 0 Crashed:
0   libdispatch.dylib               0x0000000180b03644 _dispatch_gate_wait_slow$VARIANT$mp + 180
1   libdispatch.dylib               0x0000000180b04334 dispatch_once_f$VARIANT$mp + 132
2   libdispatch.dylib               0x0000000180b04334 dispatch_once_f$VARIANT$mp + 132
3   xxx                             0x00000001006cc6ec specialized static TextFieldFactory.manufacture(for:with:) + 2868972 (TextFieldFactory.swift:13)
4   xxx                             0x00000001006535ac _T09xxx22GRADEDISPLAY_MAX_WIDTH12CoreGraphics7CGFloatVvpfiAEycfU_ + 2373036 (DimensionConstants.swift:0)
5   xxx                             0x00000001006532b8 globalinit_33_D344213E1027291683078D92DF0D6E22_func214 + 2372280 (DimensionConstants.swift:220)
6   libdispatch.dylib               0x0000000180b00ae4 _dispatch_client_callout + 16
7   libdispatch.dylib               0x0000000180b042ec dispatch_once_f$VARIANT$mp + 60
8   xxx                             0x00000001006cc6ec specialized static TextFieldFactory.manufacture(for:with:) + 2868972 (TextFieldFactory.swift:13)
9   xxx                             0x00000001006cac10 static TextFieldFactory.manufacture(for:with:) + 2862096 (TextFieldFactory.swift:0)
10  xxx                             0x0000000100614f2c _T09xxx04EditA4ViewC5titleAA9TextFieldCvgAFycfU_ + 2117420 (EditClassView.swift:26)
11  xxx                             0x000000010060ff90 EditClassView.beginInit() + 2097040 (EditClassView.swift:24)
12  xxx                             0x00000001006bc970 MView.init(sizeConstraint:) + 2804080 (MView.swift:0)
13  xxx                             0x0000000100614934 EditClassView.init(cCreateSemester:clss:sizeConstraint:) + 2115892 (EditClassView.swift:237)
14  xxx                             0x00000001007184f8 specialized CCreateSemester.createCreateCourseView(_:) + 3179768 (CCreateSemester.swift:667)
15  xxx                             0x000000010071393c CCreateSemester.setupNewSemester() + 3160380 (CCreateSemester.swift:594)
16  xxx                             0x000000010071030c CCreateSemester.viewDidLoad() + 3146508 (CCreateSemester.swift:0)
17  xxx                             0x0000000100711674 @objc CCreateSemester.viewDidLoad+ 3151476 () + 28
18  UIKit                           0x000000018adeaee0 -[UIViewController loadViewIfRequired] + 1020
19  UIKit                           0x000000018ae98e98 -[UINavigationController _updateScrollViewFromViewController:toViewController:] + 76
20  UIKit                           0x000000018ae98354 -[UINavigationController _startTransition:fromViewController:toViewController:] + 172
21  UIKit                           0x000000018ae97c90 -[UINavigationController _startDeferredTransitionIfNeeded:] + 1164
22  UIKit                           0x000000018ae97720 -[UINavigationController __viewWillLayoutSubviews] + 164
23  UIKit                           0x000000018ae8b424 -[UILayoutContainerView layoutSubviews] + 188
24  UIKit                           0x000000018ade3770 -[UIView+ 309104 (CALayerDelegate) layoutSublayersOfLayer:] + 1420
25  QuartzCore                      0x000000018538525c -[CALayer layoutSublayers] + 184
26  QuartzCore                      0x00000001853893ec CA::Layer::layout_if_needed+ 1209324 (CA::Transaction*) + 324
27  QuartzCore                      0x00000001852f5aa0 CA::Context::commit_transaction+ 604832 (CA::Transaction*) + 320
28  QuartzCore                      0x000000018531d5d0 CA::Transaction::commit+ 767440 () + 580
29  QuartzCore                      0x000000018531e450 CA::Transaction::observer_callback+ 771152 (__CFRunLoopObserver*, unsigned long, void*) + 92
30  CoreFoundation                  0x00000001811b6910 __CFRUNLOOP_IS_CALLING_OUT_TO_AN_OBSERVER_CALLBACK_FUNCTION__ + 32
31  CoreFoundation                  0x00000001811b4238 __CFRunLoopDoObservers + 412
32  CoreFoundation                  0x00000001811b4884 __CFRunLoopRun + 1436
33  CoreFoundation                  0x00000001810d4da8 CFRunLoopRunSpecific + 552
34  GraphicsServices                0x00000001830b7020 GSEventRunModal + 100
35  UIKit                           0x000000018b0b578c UIApplicationMain + 236
36  xxx                             0x00000001004179b8 main + 31160 (PercentBasedUnequalField.swift:12)
37  libdyld.dylib                   0x0000000180b65fc0 start + 4

Thread 1:
0   libsystem_kernel.dylib          0x0000000180c95d84 __workq_kernreturn + 8
1   libsystem_pthread.dylib         0x0000000180e33eb4 _pthread_wqthread + 928
2   libsystem_pthread.dylib         0x0000000180e33b08 start_wqthread + 4

Thread 2:
0   libsystem_kernel.dylib          0x0000000180c95d84 __workq_kernreturn + 8
1   libsystem_pthread.dylib         0x0000000180e33eb4 _pthread_wqthread + 928
2   libsystem_pthread.dylib         0x0000000180e33b08 start_wqthread + 4

Thread 3:
0   libsystem_kernel.dylib          0x0000000180c95d84 __workq_kernreturn + 8
1   libsystem_pthread.dylib         0x0000000180e340a0 _pthread_wqthread + 1420
2   libsystem_pthread.dylib         0x0000000180e33b08 start_wqthread + 4

Thread 4:
0   libsystem_pthread.dylib         0x0000000180e33b04 start_wqthread + 0

Thread 5 name:  com.apple.uikit.eventfetch-thread
Thread 5:
0   libsystem_kernel.dylib          0x0000000180c73e08 mach_msg_trap + 8
1   libsystem_kernel.dylib          0x0000000180c73c80 mach_msg + 72
2   CoreFoundation                  0x00000001811b6e40 __CFRunLoopServiceMachPort + 196
3   CoreFoundation                  0x00000001811b4908 __CFRunLoopRun + 1568
4   CoreFoundation                  0x00000001810d4da8 CFRunLoopRunSpecific + 552
5   Foundation                      0x0000000181b49674 -[NSRunLoop+ 34420 (NSRunLoop) runMode:beforeDate:] + 304
6   Foundation                      0x0000000181b4951c -[NSRunLoop+ 34076 (NSRunLoop) runUntilDate:] + 148
7   UIKit                           0x000000018ad9a7e4 -[UIEventFetcher threadMain] + 136
8   Foundation                      0x0000000181c59efc __NSThread__start__ + 1040
9   libsystem_pthread.dylib         0x0000000180e35220 _pthread_body + 272
10  libsystem_pthread.dylib         0x0000000180e35110 _pthread_body + 0
11  libsystem_pthread.dylib         0x0000000180e33b10 thread_start + 4

Thread 6:
0   libsystem_pthread.dylib         0x0000000180e33b04 start_wqthread + 0

Thread 7 name:  RLMRealm notification listener
Thread 7:
0   libsystem_kernel.dylib          0x0000000180c7834c kevent + 8
1   Realm                           0x0000000100a05a80 realm::_impl::ExternalCommitHelper::listen() + 88704 (external_commit_helper.cpp:203)
2   Realm                           0x0000000100a063ec std::__1::__async_func<realm::_impl::ExternalCommitHelper::ExternalCommitHelper(realm::_impl::RealmCoordinator&)::$_0>::operator()() + 91116 (future:2323)
3   Realm                           0x0000000100a06374 std::__1::__async_assoc_state<void, std::__1::__async_func<realm::_impl::ExternalCommitHelper::ExternalCommitHelper(realm::_impl::RealmCoordinator&)::$_0> >::__execute() + 90996 (future:1041)
4   Realm                           0x0000000100a06524 std::__1::__thread_proxy<std::__1::tuple<std::__1::unique_ptr<std::__1::__thread_struct, std::__1::default_delete<std::__1::__thread_struct> >, void (std::__1::__async_assoc_state<void, std::__1::__async_func<realm::_impl::ExternalCommitHelper::ExternalCommitHelper(realm::_impl::RealmCoordinator&)::$_0> >::*)(), std::__1::__async_assoc_state<void, std::__1::__async_func<realm::_impl::ExternalCommitHelper::ExternalCommitHelper(realm::_impl::RealmCoordinator&)::$_0> >*> >(void*, void*) + 91428 (thread:354)
5   libsystem_pthread.dylib         0x0000000180e35220 _pthread_body + 272
6   libsystem_pthread.dylib         0x0000000180e35110 _pthread_body + 0
7   libsystem_pthread.dylib         0x0000000180e33b10 thread_start + 4

Thread 8 name:  RLMRealm notification listener
Thread 8:
0   libsystem_kernel.dylib          0x0000000180c7834c kevent + 8
1   Realm                           0x0000000100a05a80 realm::_impl::ExternalCommitHelper::listen() + 88704 (external_commit_helper.cpp:203)
2   Realm                           0x0000000100a063ec std::__1::__async_func<realm::_impl::ExternalCommitHelper::ExternalCommitHelper(realm::_impl::RealmCoordinator&)::$_0>::operator()() + 91116 (future:2323)
3   Realm                           0x0000000100a06374 std::__1::__async_assoc_state<void, std::__1::__async_func<realm::_impl::ExternalCommitHelper::ExternalCommitHelper(realm::_impl::RealmCoordinator&)::$_0> >::__execute() + 90996 (future:1041)
4   Realm                           0x0000000100a06524 std::__1::__thread_proxy<std::__1::tuple<std::__1::unique_ptr<std::__1::__thread_struct, std::__1::default_delete<std::__1::__thread_struct> >, void (std::__1::__async_assoc_state<void, std::__1::__async_func<realm::_impl::ExternalCommitHelper::ExternalCommitHelper(realm::_impl::RealmCoordinator&)::$_0> >::*)(), std::__1::__async_assoc_state<void, std::__1::__async_func<realm::_impl::ExternalCommitHelper::ExternalCommitHelper(realm::_impl::RealmCoordinator&)::$_0> >*> >(void*, void*) + 91428 (thread:354)
5   libsystem_pthread.dylib         0x0000000180e35220 _pthread_body + 272
6   libsystem_pthread.dylib         0x0000000180e35110 _pthread_body + 0
7   libsystem_pthread.dylib         0x0000000180e33b10 thread_start + 4

Thread 0 crashed with ARM Thread State (64-bit):
    x0: 0x00000001007cdd68   x1: 0x0000000000000301   x2: 0x0000000000000000   x3: 0x0000000000000000
    x4: 0x00000001007654a0   x5: 0x0000000000000011   x6: 0x0000000000000000   x7: 0x00000001c8041ce0
    x8: 0x0000000000000003   x9: 0x0000000000000301  x10: 0x0000000000000000  x11: 0x0000000000000000
   x12: 0x0000000000000001  x13: 0x0000000000000000  x14: 0x0000000000000000  x15: 0x0000000000000001
   x16: 0x0000000180b042b0  x17: 0x0000000000000000  x18: 0x0000000000000000  x19: 0x0000000000000000
   x20: 0x00000000ffffffff  x21: 0x00000001007cdd68  x22: 0x0000000000000303  x23: 0x0000000000000001
   x24: 0x0000000000000001  x25: 0x0000000101534280  x26: 0x0000000000000000  x27: 0x0000000000000001
   x28: 0x0000000000000001   fp: 0x000000016f9eb140   lr: 0x0000000180b04334
    sp: 0x000000016f9eb120   pc: 0x0000000180b03644 cpsr: 0x60000000

Переход от строки 11 к потоку 0: здесь выполняется код:

Строка 11: EditClassView.beginInit()

class EditClassView: MStackView {

    // Parent implementation does nothing
    override func beginInit() {

        // First time `title` is referenced. It's lazy, so it's initialized here
        title.text = clss.getTitle()

        // Crashes before here
        ...
    }
}

Строка 10: Инициализация локального свойства title в EditClassView.title's Ленивый инициализатор:

lazy private(set) var title: TextField = {

    let title = TF.manufacture(for: .allPurpose, with: TParams(textSize: 21, inputView: nil, placeholder: "Class Title"))

    // Crashes before here
    ...
}()

Строка 9: Я думаю, что это просто ссылка на ссылку TextFieldFactory.manufacture(for:with:), а не фактическое выполнениесамой функции:

Строка 8: Я не уверен, к чему это относится.Кажется, это просто TextFieldFactory.TextFieldParams typealias, потому что это то, что на TextFieldFactory.swift:13:

typealias TParams = TextFieldFactory.TextFieldParams

// Here is the definition    
class TextFieldParams {

    static let DEFAULT_TEXT: String? = nil
    static let DEFAULT_FONT_NAME = "poiretone-regular"
    static let DEFAULT_TEXT_SIZE = MEDIUM_TEXT_SIZE
    static let DEFAULT_TEXT_COLOR = UIColor.black
    static let DEFAULT_TINT_COLOR = UIColor.black
    static let DEFAULT_TEXT_ALIGNMENT = NSTextAlignment.center
    static let DEFAULT_USES_AUTORESIZING_MASK = true
    static let DEFAULT_INPUT_VIEW = TextFieldFactory.EMPTY_INPUT_VIEW
    static let DEFAULT_PLACEHOLDER: String? = nil
    static let DEFAULT_ADJUST_WIDTH_WITH_TEXT = false
    static let DEFAULT_MIN_WIDTH: CGFloat? = nil
    static let DEFAULT_MAX_WIDTH: CGFloat? = nil
    static let DEFAULT_EMPTY_WIDTH: CGFloat? = nil

    let text: String?
    let fontName: String
    let textSize: CGFloat
    let textColor: UIColor
    let tintColor: UIColor
    let textAlignment: NSTextAlignment
    let translatesAutoresizingMaskIntoConstraints: Bool
    let inputView: UIView?
    let placeholder: String?
    let adjustWidthWithText: Bool
    let minWidth: CGFloat?
    let maxWidth: CGFloat?
    let emptyWidth: CGFloat?

    var font: UIFont {   return UIFont(name: fontName, size: textSize)!   }

    init(text: String? = DEFAULT_TEXT,
         fontName: String = DEFAULT_FONT_NAME,
         textSize: CGFloat = DEFAULT_TEXT_SIZE,
         textColor: UIColor = DEFAULT_TEXT_COLOR,
         tintColor: UIColor = DEFAULT_TINT_COLOR,
         textAlignment: NSTextAlignment = DEFAULT_TEXT_ALIGNMENT,
         translatesAutoresizingMaskIntoConstraints: Bool = DEFAULT_USES_AUTORESIZING_MASK,
         inputView: UIView? = DEFAULT_INPUT_VIEW,
         placeholder: String? = DEFAULT_PLACEHOLDER,
         adjustWidthWithText: Bool = DEFAULT_ADJUST_WIDTH_WITH_TEXT,
         minWidth: CGFloat? = DEFAULT_MIN_WIDTH,
         maxWidth: CGFloat? = DEFAULT_MAX_WIDTH,
         emptyWidth: CGFloat? = DEFAULT_EMPTY_WIDTH
        ) {

        self.text = text
        self.fontName = fontName
        self.textSize = textSize
        self.textColor = textColor
        self.tintColor = tintColor
        self.textAlignment = textAlignment
        self.translatesAutoresizingMaskIntoConstraints = translatesAutoresizingMaskIntoConstraints
        self.inputView = inputView
        self.placeholder = placeholder
        self.adjustWidthWithText = adjustWidthWithText
        self.minWidth = minWidth
        self.maxWidth = maxWidth
        self.emptyWidth = emptyWidth
    }
}

Теперь вот где я заблудился.Строки 7 и 6 вообще не относятся к моему коду, поэтому я не уверен, что он делает, но следующее, что вы знаете, одна из моих глобальных констант - GRADEDISPLAY_MAX_WIDTH - инициализируется в строке 5. И имейте в видуИмейте в виду, что это не имеет ничего общего с EditClassView, не говоря уже о EditClassView.title.

Но прежде чем я покажу его инициализацию, есть ссылка.Ссылка на GRADEDISPLAY_MAX_WIDTH указана в TF.manufacture(for:with:), но вы увидите, что функция - это всего лишь один большой блок switch, а на GRADEDISPLAY_MAX_WIDTH нет ссылки в том случае, если мы должны выполняться, что является нечетным.Если вы оглянетесь на строку 10, то увидите, что соответствующий случай - .allPurpose, полностью в конце функции:

static func manufacture(for textFieldPurpose: TextFieldPurpose, with params: TextFieldParams = TextFieldParams()) -> TextField {

    switch textFieldPurpose {

    case .notifyingTimeField:

        var ntf = makeNotifyingFocusableTimeField(with: params as! NotifyingFocusableTimeFieldParams)
        ntf.frame.size.width = CGFloat.timeFieldWidth
        ntf.underline()

        return ntf

    case .timeField:

        var ftf = makeFocusableTimeField(with: params as! FocusableTimeFieldParams)
        ftf.frame.size.width = CGFloat.timeFieldWidth
        ftf.underline()

        return ftf

    case .gradingCategoryTitle:

        var tf = makeUnderlineTextField(with: UnderlineTextFieldParams(edgeInsets: UIEdgeInsetsMake(0, AC_TITLE_DEFAULT_SIDE_INSET, UnderlineLabel.DEFAULT_BOTTOM_INSET, AC_TITLE_DEFAULT_SIDE_INSET),
                                                                       text: params.text,
                                                                       textSize: LARGE_TEXT_SIZE,
                                                                       inputView: nil,
                                                                       adjustWidthWithText: true,
                                                                       maxWidth: params.maxWidth)
        )
        tf.underline()

        return tf

    case .whereTextField:

        var tf = makeUnderlineTextField(with: UnderlineTextFieldParams(inputView: nil,
                                                                       adjustWidthWithText: true,
                                                                       minWidth: WHERE_TEXTFIELD_MIN_WIDTH,
                                                                       maxWidth: params.maxWidth)
        )
        tf.underline()

        return tf

    case .notifyingDateField:

        var ndf = makeNotifyingFocusableDateField(with: params as! ContextualFocusableParams)
        ndf.frame.size.width = CGFloat.timeFieldWidth
        ndf.underline()

        return ndf

    case .percentTotalField, .percentEachField, .percentUnequalField, .pointsTotalField, .pointsEachField, .pointsUnequalField, .percentExamTotalField, .percentEachExamField, .percentFinalField, .pointsExamTotalField, .pointsEachExamField, .pointsFinalField:

        guard let params = params as? ContextualFocusableParams else {

            fatalError("A ContextualFocusableParams must be passed in order to manufacture a FocusableWeightField")
        }

        var f = makeFocusableWeightField(for: textFieldPurpose, with: ContextualFocusableParams(context: params.context,
                                                                                                adjustWidthWithText: true,
                                                                                                minWidth: CGFloat.timeFieldWidth)
        )
        f.underline()

        return f

    case .customTitleField:

        let edgeInsets = UIEdgeInsetsMake(0, CUSTOM_TITLE_SIDE_INSET, UnderlineLabel.DEFAULT_BOTTOM_INSET, CUSTOM_TITLE_SIDE_INSET)
        var tf = makeUnderlineTextField(with: UnderlineTextFieldParams(edgeInsets: edgeInsets,
                                                                       inputView: nil,
                                                                       placeholder: params.placeholder,
                                                                       adjustWidthWithText: true,
                                                                       minWidth: params.minWidth,
                                                                       maxWidth: params.maxWidth,
                                                                       emptyWidth: params.emptyWidth)
        )
        tf.underline()

        return tf

    case .gradeField:

        let tf = initializedTextField(textField: PercentSuffixedTextField(),
                                      params: TParams(text: params.text,
                                                      textSize: AV_GRADE_TEXT_SIZE,
                                                      textColor: UIColor.defaultTextColor,
                                                      inputView: nil)
        )
        tf.frame.size = CGSize(width: GRADEDISPLAY_MAX_WIDTH, height: GV_HEIGHT)
        tf.isEnabled = false
        tf.keyboardType = .numberPad

        return tf

    case .fractionField:

        let tf = makeTextField(with: TParams(text: params.text,
                                             textSize: AV_GRADE_TEXT_SIZE,
                                             textColor: UIColor.defaultTextColor,
                                             inputView: nil)
        )
        tf.frame.size.width = GRADEDISPLAY_MAX_WIDTH
        tf.isEnabled = false
        tf.keyboardType = .numberPad

        return tf

    case .assessmentTitle:

        let tf = makeTextField(with: TParams(text: params.text,
                                             textSize: AV_TITLE_TEXT_SIZE,
                                             textColor: UIColor.defaultTextColor,
                                             placeholder: String.classTitlePlaceholder,
                                             adjustWidthWithText: true)
        )
        tf.isEnabled = false

        return tf

    case .weightField:

        let tf = initializedTextField(textField: PercentSuffixedTextField(adjustWidthWithText: true, minWidth: params.minWidth),
                                      params: TParams(text: params.text,
                                                      textSize: params.textSize,
                                                      textAlignment: .right,
                                                      inputView: nil)
        )
        tf.keyboardType = .decimalPad
        tf.performableActions = []

        return tf

    // `GRADEDISPLAY_MAX_WIDTH` is referenced in the `.gradeField` 
    // and `.fractionField` cases just above here
    case .allPurpose: return makeTextField(with: params)

    case .allPurposeInsetting: return makeInsetTextField(with: params as! ITParams)
    }
}

Строка 5: я думаю, что это инициализация GRADEDISPLAY_MAX_WIDTH потому что DimensionConstants.swift:220 - это то место, где начинается определение его свойства

let GRADEDISPLAY_MAX_WIDTH: CGFloat = {

    let gradeField = TF.manufacture(for: .allPurpose, with: TParams(text: "100%", textSize: 17))

    // From the look of the crash report, it doesn't look 
    // like execution makes it this far
    let trailingMargin: CGFloat = 4

    return proportionedWidth(gradeField.frame.size.width + trailingMargin)
}()

Я не уверен, на что ссылается строка 4.Может ли это быть GRADEDISPLAY_MAX_WIDTH само по себе?

И, наконец, последняя ссылка на мой код в отчете о сбое.

Строка 3: которая выглядит так же, как Строка 8 ...

Приоритетом здесь является исправление сбоя, и я думаю, что это как-то связано с тем, что происходит в строках 6 и 7 трассировки стека.Я мог бы войти в свою базу кода, но поверьте мне на слово, что на GRADEDISPLAY_MAX_WIDTH нет ссылок нигде в EditClassView, ни на какой-либо связанный с ним код, так что нет никаких причин, чтобы его можно было увидеть где-нибудь поблизости от EditClassView влюбой след стека.

Может ли кто-нибудь пролить свет на то, что происходит в строках 6 и 7?

Это может быть другой подсказкой:

В строке 36 в потоке 0 *Ссылка 1057 *;конкретно строка 12 в нем.PercentBasedUnequalField фактически не используется нигде в исполняемом коде приложения.Это часть новой функции, над которой я работаю.Я оставил файл в комплекте, потому что было бы сложно удалить его, потому что текущая ветвь источника разветвилась на эту незавершенную функцию.

Сходство здесь в том, что на GRADEDISPLAY_MAX_WIDTH, PercentBasedUnequalField также есть ссылкив несвязанном случае switch в TF.manufacture(for:with:).

Обновление

Найдено Эта похожая проблема , где на плакате указаны все cases оператора switchвыполняются как быстрая оптимизация.Это объясняет, почему GRADEDISPLAY_MAX_WIDTH инициализируется, даже если case, который обращается к нему, не соответствует.Я попробую добавить аннотацию, отключающую оптимизацию, упомянутую в ссылке, и обновлю ее, если она устранит проблему.

1 Ответ

0 голосов
/ 11 июня 2018

Очевидно, что одна оптимизация времени компиляции, выполняемая swift, приводила к выполнению всех cases в операторе switch, независимо от соответствующего шаблона.Это вызвало инициализацию одной из моих глобальных констант, потому что к ней впервые обращались, и это вызвало некоторую рекурсию, если я правильно интерпретировал Application Specific Information в отчете о сбое:

Ошибка в клиенте LIBDISPATCH: попытка рекурсивной блокировки

Я устранил проблему, установив уровень оптимизации для выпусков в Target -> Build Settings -> * 1012.* -> Optimization Level -> Release.

Таким образом, в итоге настройка для выпуска и отладки была -Onone.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...