只在Testflight上崩溃

时间:2012-08-30 04:54:39

标签: ios xcode testflight

我们正在使用TestFlight发送我们应用的飞行员。

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

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

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

有关解决方法的任何想法吗?我们不想停止使用TestFlight。

3 个答案:

答案 0 :(得分:12)

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

答案 1 :(得分:5)

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

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

    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库中的地址。暂时忽略这些。
    6. 当然,如果您能够进行符号化,则可以跳过此过程。

      好运调试!

答案 2 :(得分:0)

我们遇到了类似的问题。我们的问题是静态库。当我们从头开始构建应用程序并进入testflight时,它崩溃但是从IDE却没有。崩溃是因为在进行构建时没有包含静态库,但是如果我直接连接iPad并使用XCode进行安装,则会包含静态库。

一个简单的测试将证明这一点: -

1。)而不是从IDE构建,创建.app文件,然后通过iTunes加载它,检查是否发生了崩溃。

我们通过手动创建.iPA来解决这个问题,即创建.app然后创建Payload文件夹并将.app与info.plist放在一起。

然后事情也开始在Testflight中起作用了。