Xcode 11崩溃,如何设置iOS13的根视图控制器?

7

最近几天,我在 Xcode 11 中调试我们的iOS应用程序时遇到了一个非常奇怪的崩溃问题。

情况

我们的应用程序是为 iOS 11 及更高版本构建的。但自从使用 Xcode 11 后,当设置根视图控制器时,该应用程序会崩溃。但是,当我在它崩溃后重新打开应用程序时,它可以工作,因此似乎与设置调试会话有关。

我尝试在一部安装了iOS 13.1.2的 iPhone Xs 上进行构建。我还尝试了另一台安装了13.1的设备,但那里也出现了相同的问题。

然而,当我连接运行着12.x.x的设备时,它能够正常工作。

奇怪的是,昨天我能够在模拟器上运行。但是今天同样的崩溃问题发生在了设备上(iPhone Xs)。

还可能重要的一点是:与我一起工作的同事没有遇到相同的问题。

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {

// Show app loading view controller
self.window = [[RMWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
self.window.rootViewController = [[AppLoadingViewController alloc] init]; // Thread 1: EXC_BAD_INSTRUCTION (code=EXC_I386_INVOP, subcode=0x0)
[self.window makeKeyAndVisible];

我尝试了以下方法:

  • 将AppDelegate.h/m替换为AppDelegate.swift。
  • 更新所有项目设置,使用来自Xcode 11的最新设置。
  • 尝试使用普通的UIViewController()而不是AppLoadingViewController()
  • 清理Derived文件夹(极限模式)
  • 清除所有Xcode缓存
  • 重新安装Xcode
  • 重启Mac + iPhone
  • 从Xcode首选项中删除iOS DeviceSupport文件夹,通过“设备和仿真器”重新连接设备。
  • 创建一个新项目并在iPhone上运行,可以正常工作。

这是一个同时包含Objective-C和Swift代码的应用程序,我们已经使用它多年了。但这是第一次发生这种情况。

有人知道这可能是什么原因吗?


3
它是在rootViewController的设置器中崩溃,还是在AppLoadingViewController的初始化程序中崩溃? - mag_zbc
您正在使用自定义的 UIWindow 子类。也许您有一个自定义的 rootViewController setter? - mag_zbc
1
我确实找到了那个问题,但对我没有用。我也刚从存储库中进行了干净的克隆,并尝试使其工作,但同样没有成功。 - NielsKoole
1
在iOS 13中,您不应该在应用程序委托中创建窗口或设置根视图控制器。这需要在场景委托中完成(除非您已经采取了完全退出使用场景的步骤)。 - rmaddy
我已确保我们完全不使用场景。问题是:这似乎与UIKit有关。崩溃总是在第一次调用UIKit的内容时发生。但是UIKit已在链接二进制构建阶段中连接。有人对此有线索吗? - NielsKoole
显示剩余9条评论
2个回答

2
    let homeVC = UIStoryboard(name:"Main", bundle: nil).instantiateViewController(withIdentifier: "SigninViewController") as! SigninViewController
    let navC = UINavigationController(rootViewController: homeVC)
    navC.navigationBar.isHidden = true
    UIApplication.shared.windows.first?.rootViewController = navC
    UIApplication.shared.windows.first?.makeKeyAndVisible()

尝试这个,它在我的情况下工作得很好...


我错过了makeKeyAndVisible()函数,虽然这对于那位遇到Mac特定错误的帖子作者没有帮助,但这对我非常有用。 - C. Skjerdal

0

在这个问题上我花了好几天的时间,最终干脆重新安装了Mac OS Catalina。这确实解决了问题。虽然我仍然不知道实际问题是什么,但为了节省其他人的时间,我建议他们也可以尝试同样的方法。

如果有人找到了解决方案,我仍然很想知道。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接