Почему следующий метод UIApplication не выполняется после iOS 13.4? - PullRequest
0 голосов
/ 01 апреля 2020
extension UIApplication {

    override open var next: UIResponder? {
        print("next")
        return super.next
    }
}

Приведенный выше код был выполнен до iOS 13.4 , а "next" напечатан до application(_:, didFinishLaunchingWithOptions:) метода

Вкл. iOS 13.4 и последний iOS 13.4.1 , консоль не выводит next. Если я сломаю точку останова в строке print(), точка останова не будет выполнена

Это привело к сбою некоторых из моего предыдущего кода, например:

import UIKit

public extension UIApplication {

    private static let runOnce: Void = {
        NothingToSeeHere.harmlessFunction()
    }()

    override var next: UIResponder? {

        // Called before applicationDidFinishLaunching
        UIApplication.runOnce

        return super.next
    }
}

public protocol SelfAware: class {
    static func awake()
}

public class NothingToSeeHere {

    public static func harmlessFunction() {

        let typeCount = Int(objc_getClassList(nil, 0))
        let types = UnsafeMutablePointer<AnyClass>.allocate(capacity: typeCount)
        let autoreleasingTypes = AutoreleasingUnsafeMutablePointer<AnyClass>(types)

        objc_getClassList(autoreleasingTypes, Int32(typeCount))

        for index in 0 ..< typeCount {
            (types[index] as? SelfAware.Type)?.awake()
        }

        types.deallocate()
    }
}

Почему это происходит ? Это ошибка в iOS 13.4? Все еще особенность? Я не нашел ничего связанного с примечаниями к выпуску для iOS 13.4 ...


Позвольте мне перечислить ситуацию, которую я тестировал:

  • 13.2 iPhone, next выполнение метода и до application(_:, didFinishLaunchingWithOptions:).
  • 13.3 Симулятор, next выполнение метода и до application(_:, didFinishLaunchingWithOptions:).
  • 13.4 Симулятор, next метод не выполняется.
  • 13.4 iPhone, next метод не выполняется.
  • 13.4.1 iPhone, next метод не выполняется.

1 Ответ

1 голос
/ 16 апреля 2020

Xcode 11.4 и iOS 13.4 больше не разрешают переопределение var в расширениях, возможно, вы используете отладку со старым Xcode. Если вы запустите его, но не отладите его, будет вызван этот метод.

...