为什么UIApplication的下一个方法在iOS 13.4之后不执行? 扩展应用程序{ 覆盖打开变量下一步:UIResponder{ 打印(“下一页”) 返回super.next } }

为什么UIApplication的下一个方法在iOS 13.4之后不执行? 扩展应用程序{ 覆盖打开变量下一步:UIResponder{ 打印(“下一页”) 返回super.next } },ios,swift,xcode,ios13.4,Ios,Swift,Xcode,Ios13.4,上述代码是在iOS 13.4之前执行的,下一步“是在应用程序(:,didFinishLaunchingWithOptions:)方法之前打印的 在iOS 13.4和最新的iOS 13.4.1上,控制台不会输出下一个。如果我在print()行中断断点,断点将不会执行 这导致我以前的一些代码失败,例如: 导入UIKit 公共扩展应用程序{ 专用静态let runOnce:Void={ nothingtosehere.harmlessFunction() }() 覆盖var next:UIRespon

上述代码是在iOS 13.4之前执行的,
下一步
“是在
应用程序(:,didFinishLaunchingWithOptions:)
方法之前打印的

在iOS 13.4和最新的iOS 13.4.1上,控制台不会输出下一个
。如果我在
print()
行中断断点,断点将不会执行

这导致我以前的一些代码失败,例如:

导入UIKit
公共扩展应用程序{
专用静态let runOnce:Void={
nothingtosehere.harmlessFunction()
}()
覆盖var next:UIResponder{
//在ApplicationIDFinishLaunching之前调用
跳动
返回super.next
}
}
公共协议自感知:类{
静态函数唤醒()
}
公共类不在这里{
公共静态函数harmlessFunction(){
让typeCount=Int(objc_getClassList(nil,0))
let types=UnsafeMutablePointer.allocate(容量:typeCount)
设autoreleasingTypes=AutoreleasingUnsafemtablePointer(类型)
objc_getClassList(自动删除类型,Int32(类型计数))
对于0中的索引..
为什么会发生这种情况?这是iOS 13.4中的一个bug吗?还是特写?我在iOS 13.4的发行说明中没有找到任何相关内容


让我列出我测试过的情况:

  • 13.2 iPhone,
    next
    方法执行,在
    应用程序之前(:,使用选项完成启动)
  • 13.3模拟器,
    下一步
    方法执行,以及
    应用程序之前(:,使用选项完成启动)
  • 13.4模拟器,
    next
    方法不执行
  • 13.4 iPhone,
    next
    方法不执行
  • 13.4.1 iPhone,
    next
    方法不执行

Xcode 11.4和iOS 13.4不再允许在扩展中使用var覆盖,您是否可能正在使用旧的Xcode进行调试。如果您运行它但不调试它,将调用该方法。

Xcode 11.4和iOS 13.4不再允许在扩展中使用var覆盖,您是否可能正在使用旧Xcode进行调试。如果您运行它但不调试它,那么将调用该方法。

我也遇到过这个问题,但我打开了project scheme并取消选中“调试可执行文件”选项。重写方法可以运行。

我也遇到了这个问题,但我打开了project scheme并取消选中调试可执行文件选项。override方法可以运行。

在启动过程中依赖要调用的此方法是愚蠢的。这不是一个记录在案的事件。“我很抱歉,我之前没有澄清我的问题。现在我修改了它。我想知道的是,这个更改是否是系统上的更改,如果是,那么在iOS 13.4和更高版本的系统上,是否有办法让下一个方法像以前一样运行,但它从来都不应该“运行”。文档中是否有某个地方说“在didFinishLaunchingWithOptions期间调用next()?”这听起来像是依赖于某个内部实现细节,而该细节发生了变化。你不能(也不应该)解决这个问题。在
applicationdFinishLaunching
之前,有几种有很好文档记录的运行方法,最明显的是
applicationWillFinishLaunching
(还有比这更早的方法,比如
main
)。我不知道为什么Jordan Smith建议挂接
next
方法。扩展中的覆盖始终是未定义的行为(回到ObjC)。@RobNapier非常感谢您的回复,您的语气让我感觉非常亲切友好!我已经放弃了这种方法。但是我不得不说,“不要在didFinishLaunchingWithOptions中调用任何方法”真的很吸引人。在启动过程中依赖调用这个方法是愚蠢的。这不是一个记录在案的事件。“我很抱歉,我之前没有澄清我的问题。现在我修改了它。我想知道的是,这个更改是否是系统上的更改,如果是,那么在iOS 13.4和更高版本的系统上,是否有办法让下一个方法像以前一样运行,但它从来都不应该“运行”。文档中是否有某个地方说“在didFinishLaunchingWithOptions期间调用next()?”这听起来像是依赖于某个内部实现细节,而该细节发生了变化。你不能(也不应该)解决这个问题。在
applicationdFinishLaunching
之前,有几种有很好文档记录的运行方法,最明显的是
applicationWillFinishLaunching
(还有比这更早的方法,比如
main
)。我不知道为什么Jordan Smith建议挂接
next
方法。扩展中的覆盖始终是未定义的行为(回到ObjC)。@RobNapier非常感谢您的回复,您的语气让我感觉非常亲切友好!我已经放弃了这种方法。但是我不得不说,“不要在didFinishLaunchingWithOptions中调用任何方法”真的很诱人。非常感谢,我已经放弃了这个方法。但我需要补充一点,我使用的是Xcode 14,非常感谢,我已经放弃了这种方法。但我需要补充一点,我使用的是Xcode 14