iOS 使用 Realm 和 Crashlytics 通过 testflight 启动时应用程序冻结

iOS app freeze when launched through testflight with Realm and Crashlytics

在提交应用程序进行 Beta 审核后,它因在 iPad 上启动时出现空白屏幕而被拒绝。

我已经在多个 iPhone 和模拟器上进行了测试,但无法重现任何内容。重现这一点的唯一方法是在 Testflight 应用程序本身中按下 "Open" 按钮。按主屏幕上的图标总是有效(即使在从 testflight 崩溃的 iPad 上也是如此)。

通过 USB 连接时,我检查 Xcode 设备中的日志:

... <Warning>: [Crashlytics] Version 3.7.0 (102)
... <Warning>: [Crashlytics:Crash] Warning: NSUncaughtExceptionHandler is '_ZZ34RLMInstallUncaughtExceptionHandlerEN3$_08__invokeEP11NSException' in '/private/var/mobile/Containers/Bundle/Application/DF8A0CBE-99D1-4466-ACAE-F1BB7D8DA4BC/Feeder.app/Frameworks/Realm.framework/Realm'

在最后一行它就停止了。没有更多的调试消息。 launchscreen.xib 逐渐消失,屏幕变为白色。它不会崩溃或任何东西。

我试过:

  1. Fabric 和 Crashlytics 的不同版本
  2. 移除 Fabric 和 Crashlytics
  3. 完全移动 Realm 的初始化
  4. 重写应用程序的启动方式
  5. 不同版本的 Realm(0.96 和 0.98.4)

我发现了这个问题,它与 Realm 或 Crashlytics 无关。我的 AppDelegate 中有这段代码:

@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate {

    var window: UIWindow?


    func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
        // This breaks it
        for window in application.windows {
            window.backgroundColor = UIColor.whiteColor()
        }

        // this works...
        // window?.backgroundColor = UIColor.whiteColor()

        return true
    }

}