Наблюдение за сбоями свойств Инструменты (профиль утечки) Xcode 9.3 (Swift 4.1)

Когда я запускаю следующий код (упрощенный пример, созданный для демонстрации сбоя), он выполняется, как и ожидалось, когда я выбираю «Выполнить» (оба сообщения os_log печатаются в консоли).

Однако, когда я открываю его в «Инструментах» из навигатора отладки памяти, нажав «Перезагрузить», он вылетает (в консоли печатается только первое сообщение os_log).

Сбой происходит при наблюдении(...).

import os
import UIKit

class ObserverCrashingExample: NSObject {

    @objc private var animation: UIViewPropertyAnimator?
    private var observer: NSKeyValueObservation?

    override init() {

        super.init()

        animation = UIViewPropertyAnimator( duration: 1, curve: .linear, animations: { })

        animation!.pauseAnimation()

        os_log("X_AMPLE Executes")

        observer = animation!.observe(\.isRunning, options: [.new, .old]) { _ , _ in }

        os_log("X_AMPLE Does not execute")

    }

    required init?(coder aDecoder: NSCoder) { fatalError("init(coder:) has not been implemented") }

}

Я использую Xcode 9.3, Swift 4.1, цель развертывания iOS 11.3.

Есть идеи? Это проблема компилятора?

Ваше здоровье


person Mark Jarecki    schedule 09.04.2018    source источник
comment
Похоже, это признанная ошибка. Надеюсь, в этом скоро будет прогресс, поскольку это нарушает условия для определенных шаблонов проектирования в Swift 4.1.   -  person Mark Jarecki    schedule 14.04.2018
comment
Не могли бы вы указать мне, где это признано ошибкой? Похоже, я больше не могу профилировать свой код, я также использую Xcode 9.3 и Swift 4.1, но пока не могу точно указать проблемное место в моем коде...   -  person NeverwinterMoon    schedule 23.04.2018
comment
К сожалению, этой информации нет в открытом доступе. Отправьте отчет об ошибке в Apple, и они могут предоставить вам более подробную информацию. Как правило, они просто подтвердят, если инженеры приняли ошибку и присвоили ей идентификатор. Все, на что вы можете надеяться, это то, что Apple исправит это в следующем обновлении.   -  person Mark Jarecki    schedule 23.04.2018
comment
В параметрах записи (Alt-CMD-R) отключите запись счетчиков ссылок и включите обнаружение зомби.   -  person Yohst    schedule 08.05.2018
comment
Спасибо, Йост. Однако ваше предложение мне не подходит. По словам Apple, исходная ошибка все еще остается открытой.   -  person Mark Jarecki    schedule 11.05.2018
comment
Пробовал Xcode 9.4. Проблема не решена.   -  person CopperCash    schedule 07.06.2018
comment
Я знаю. Это расстраивает. И указывает на более серьезные проблемы в библиотеках. К сожалению, Apple практически не дает информации о том, когда ожидать исправления — только идентификатор проблемы и подтверждение. Наша работа, на данный момент, состоит в том, чтобы принять другие шаблоны и полностью избежать этого.   -  person Mark Jarecki    schedule 07.06.2018
comment
Так разочаровывает. Является ли Xcode 9.3 + KVO + Instruments редкой комбинацией? Я не кажусь много жалуется в Интернете.   -  person CopperCash    schedule 08.06.2018
comment
Я согласен, это невероятно расстраивает, потому что у меня не было этих проблем с более ранними версиями Swift и XCode. Я видел несколько постов здесь и там, но я также удивлен, что мало кто возмущается тем, что шаблон недостаточно популярен, чтобы вызывать более распространенные проблемы. Я подозреваю, что многие воздерживаются от того, чтобы быть на переднем крае, особенно с постоянно меняющимся языком.   -  person Mark Jarecki    schedule 08.06.2018


Ответы (1)


Я попробовал три слова вокруг:

  1. Отключение «Запись счетчика ссылок». Это предотвратило сбой. Но приборы показали мне гораздо больше утечек, чем обычно, что делает невозможным обнаружение настоящих утечек.
  2. Комментирую все мои звонки в КВО. В моем случае не сработало.
  3. Понижение моего кода до Swift 4.0. Я переустановил Xcode 9.2, и теперь он работает.
person CopperCash    schedule 08.06.2018