调试应用商店评论错误日志

前几天,我向iOS App Store提交了应用程序的初始版本。 我已经在众多模拟器和可以访问的任何物理iOS设备上进行了测试。 尽管进行了所有测试,但我提交的应用程序显然在Apple审阅者加载时崩溃了。

调试它们的错误听起来像是一项艰巨的任务。 我可以重现崩溃吗? 如果不解决此问题,我将无法再发布我的应用程序。 幸运的是,我手头有几件事:我已上传到应用商店的存档二进制文件,以及他们附加的.txt文件中的一些崩溃日志。

注意:通常最好使用 Fabric / Crashlytics之 类的工具 来跟踪并深入 探究 bug。

使用XCode将应用程序上载到应用程序商店时,通常需要完成存档,验证并将其发送到iTunes Connect的过程。 我最初想到的是我可以使用相同的二进制文件在手机上安装该应用程序,并确认它是正确的版本且未损坏。 如果对我来说麻烦了,那将是解决问题的轻松开始。 通常,从XCode运行应用程序时,我会运行调试版本并在现场构建它。 我该如何安装与审阅者相同的东西?

在XCode中,如果转到“ Window > Organizer ,它将加载Archive Organizer 。 选择所需的存档,右侧应该有一个选项将其Export 。 临时导出。 它将创建一个包含一些文件的文件夹。 它的主要内容是.ipa文件。

要在您的设备上安装.ipa文件,请转到XCode中的Window > Devices and Simulators 。 选择Devices ,然后单击您的设备。 您应该看到已安装应用程序的列表。

如果您将.ipa文件拖到那里,它将安装您的应用程序。

可悲的是,这没有像我预期的那样对我产生任何见解或新结果。 我尝试的第二个选项是通过iTunes Connect设置“测试飞行”。 这对我来说也很好,所以继续下一步!

我可用的第二个更好的工具是审阅者附加的崩溃日志。 它们以.txt文件的形式发送,该文件具有一些可读的内容,但包含许多毫无意义的十六进制地址。 例如:

 日期/时间:2018-01-01 23:51:15.4916 +0900 
发布时间:2018-01-01 23:51:14.2657 +0900
操作系统版本:iPhone OS 11.2.1(15C153)
...线程0名称:调度队列:com.apple.main-thread
线程0崩溃:
0 libsystem_kernel.dylib 0x0000000181a642e8 0x181a42000 + 140008
1个libsystem_pthread.dylib 0x0000000181b792f8 0x181b76000 + 13048
2 libsystem_c.dylib 0x00000001819d2fbc 0x181970000 + 405436
... 0x100f94000-0x100f9bfff libswiftCoreFoundation.dylib arm64 /var/containers/Bundle/Application/8DC3AA99-1998-4482-BD08-799FD11854D2/reader-vision.app/Coreworks/libs。
0x100fa4000-0x100fb7fff libswiftAVFoundation.dylib arm64 /var/containers/Bundle/Application/8DC3AA99-1998-4482-BD08-799FD11854D2/reader-vision.app/Frameworks/libswiftAVFounddy。

值得仔细阅读Apple的这份文档,以更好地了解正在发生的事情。 基本上,这些日志没有符号化,只是作为一堆十六进制地址读取。

象征这些文件有点违反直觉,但相当简单,并在Apple文档中列出。 基本上将文件扩展名从.txt重命名为.crash 。 在XCode中,转到Window > Devices and Simulators 。 选择您的设备,然后单击View Device Logs

即使崩溃没有发生在手机或设备上,您仍然可以将.crash文件拖放到日志列表中。 给它一点时间,XCode将为您符号化文件,使其更具可读性:

  2 AVFoundation 0x1878a581c-[AVCaptureFigVideoDevice setTorchModeOnWithLevel:error:] + 527 
3个读者视觉0x104618688 ViewController.initializeCamera()+ 50824(ViewController.swift:94)

重要说明!:为了用该日志符号化文件,您需要具有该特定的存档。

由此,我能够确定错误是来自AVCaptureFigVideoDevice setTorchModeOnWithLevel 。 而且,尽管我无法在我可以访问的任何设备或模拟器上重现此错误,但我还是可以临时调整一些逻辑以达到相同的情况,并更加彻底地加以防范。