只在Testflight上崩溃

dai*_*dai 14 xcode ios testflight

我们正在使用TestFlight发送我们的应用程序的飞行员.

应用程序的一部分正在崩溃,我们在重现崩溃方面遇到了很多麻烦.代码很简单.

事实证明,通过TestFlight获得应用程序的用户会遇到崩溃,而如果您构建应用程序并使用IDE安装它则不会崩溃!

任何人都有关于可能导致这种情况的想法吗?

任何解决方法的想法?我们不想停止使用TestFlight.

Ben*_*ove 12

确保在发布模式下构建应用程序,而不是在调试中.应用程序可能只在发布时崩溃.


Bla*_*nka 5

我要尝试的第一件事是将崩溃堆栈跟踪映射到应用程序中的函数名称.这可能会对崩溃的性质产生有用的了解:

  1. 报告崩溃后立即请求崩溃日志.这可以通过Xcode的组织者获得,或者如果不是这个选项,可以从iPhone的设置 - >常规 - >关于 - >诊断和使用 - >诊断和使用数据中屏幕捕获.滚动到应用程序名称或LatestCrash-AppName.plist部分.
  2. 虽然你理论上可以象征崩溃,但我发现下面描述的过程是一种从堆栈中获取符号的简单方法.将崩溃线程的所有堆栈地址转换为方法名称.
  3. (可选)请求iDevice syslog.这可能包括断言失败消息,这也是非常宝贵的.请注意,这应该尽快完成,因为syslog在丢弃之前只保留了这么多条目.您可以使用管理器或cmd行idevicesyslog来获取此信息.

手动符号:只要您的构建具有调试信息,这将起作用.

  1. 获取崩溃的_exact_same_ .ipa.如果您没有保存它,可以使用iFunBox或cmd line ideviceinstaller实用程序从设备下载它.
  2. 解压缩.ipa
  3. 在可执行文件(Payload/AppName.app/AppName)上运行以下命令:

    otool -tv AppName.app | c ++ filt> listing.asm

  4. 等待上一步完成(可能需要一段时间).生成的listing.asm文件将长达几兆字节.

  5. 使用可以处理大文件的编辑器搜索listing.asm以查找堆栈跟踪中列出的地址.注意,地址可能是几个字节关闭(通常指向前面3个左右的字节).此外,在listing.asm中找不到的地址表示iOS库中的地址.暂时忽略这些.

当然,如果您能够进行符号化,则可以跳过此过程.

祝你好运调试!