【问题标题】:iOS app crashes with EXC_CRASH (SIGKILL) when launched via TestFlight, but runs fine from XcodeiOS 应用程序在通过 TestFlight 启动时因 EXC_CRASH (SIGKILL) 崩溃,但在 Xcode 中运行良好
【发布时间】:2017-07-07 01:58:59
【问题描述】:

我遇到了一个奇怪的问题,即我正在构建的应用程序在从 TestFlight 作为存档构建启动后不久崩溃,但在直接从 Xcode 在同一设备上运行时运行没有问题。应用程序似乎没有完全终止 - 如果我双击主页按钮,我会在运行中途看到后台应用程序的图像,即使新会话早在它之前就崩溃了到了显示的画面。如果我随后将应用程序带回前台,它会返回加载屏幕,然后再次关闭,日志如下所示:

Incident Identifier: 983F8E4E-EFE0-4C93-8F46-D223FD86DF14
CrashReporter Key:   3515df1d8c55a27394a78b6efee5f83946ed9a99
Hardware Model:      iPhone7,2
Process:             FileProvider [218]
Path:                /private/var/containers/Bundle/Application/89708FF4-E848-4F49-BC0D-B2DC9EF536C6/Drive.app/PlugIns/FileProvider.appex/FileProvider
Identifier:          com.google.Drive.FileProviderExtension
Version:             4.2017.25202 (4.2017.25202)
Code Type:           ARM-64 (Native)
Role:                Unspecified
Parent Process:      launchd [1]
Coalition:           com.google.Drive.FileProviderExtension [368]




Date/Time:           2017-06-30 22:59:01.2937 -0700
Launch Time:         2017-06-30 22:59:00.7649 -0700
OS Version:          iPhone OS 10.3.2 (14F89)
Report Version:      104


Exception Type:  EXC_CRASH (SIGKILL)
Exception Codes: 0x0000000000000000, 0x0000000000000000
Exception Note:  EXC_CORPSE_NOTIFY
Termination Reason: Namespace <0xF>, Code 0xdead10cc
Triggered by Thread:  0

...对我应该调查什么以了解这里发生了什么有什么想法吗?

应用程序是使用 Cocos2d-x framework 在 C++ 中构建的。

谢谢! _凯文

【问题讨论】:

  • TestFlight 交付的应用是多久以前的?
  • 大约一个小时前。我之前一直通过直接从 Xcode 在设备上运行来测试应用程序,然后当新的存档二进制文件从 TestFlight 到达时,我允许 TestFlight 覆盖来自 Xcode 的二进制文件。
  • 以下是日志中的一些附加信息,以防有用:(我还注意到最近运行尝试的崩溃日志在设备上不可用 - 此日志来自早期的崩溃晚上,但从那以后我运行它并没有找到其他日志。线程 0 名称:调度队列:com.apple.main-thread 线程 0 崩溃:0 libsystem_kernel.dylib 0x0000000184edb224 mach_msg_trap + 8 1 libsystem_kernel.dylib 0x0000000184edb09c mach_msg + 72 2 核心基础 0x0000000185eace90 __CFRunLoopServiceMachPort + 192 ...
  • 更多信息:作为测试,我们上传了一个以前工作的旧版本,但它以同样的方式失败,所以无论这似乎是构建本身的外部。我们在两个不同的 iOS 设备上观察它。
  • 这似乎是相关的:developer.apple.com/library/content/technotes/tn2151/…“一个应用程序已被操作系统终止,因为它在挂起期间持有文件锁或 sqlite 数据库锁”。是否有可能之前崩溃的会话仍然持有锁定并阻止后续执行?

标签: ios crash sigkill


【解决方案1】:

弄清楚发生了什么,如果还不是确切原因的话。当我进一步调查时,上面发布的一些细节被证明是红鲱鱼。最初看起来是归档构建和直接从 Xcode 启动的构建之间的行为差​​异实际上是调试构建和发布构建之间的行为差​​异。

解决方案是在 Xcode 中创建一个新方案来运行发布版本(Product->Scheme->在 Xcode 8.3 中管理方案),复制我的默认手机方案,然后将新方案的 Run->Info->Build Configuration 设置为 Release。

在运行附加 Xcode 的发布版本后,我发现仅在发布版本中出现的错误(可能是一个错误初始化的变量,但我仍在调查中)。

没有生成崩溃日志的原因似乎是该错误导致断言跳闸(Cocos2d-x 中的 CC_ASSERT 宏),因此 iOS 认为应用程序关闭是合法的终止并且没有将其记录为崩溃。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-22
    • 2014-02-28
    相关资源
    最近更新 更多