应用程序在iPhone 5S上崩溃但在iPhone 4S上没有崩溃。

时间:2014-02-16 13:24:33

标签: ios iphone objective-c cocoa-touch

我有一个iPhone应用程序,我已在iPhone 4S上开发和测试。该应用程序已在市场上发布,一些用户声称该应用程序无法使用,因为它在启动时崩溃。

我做了与用户对他们的设备完全相同的事情,在我的iPhone 4S上运行相同版本的应用程序,我无法让它崩溃。

我去过用户的房子并将他们的手机插入我的电脑以便将日志读出来,当我这样做时,我得到的错误是我没有通过我的手机和我的手机。

我完全不知道如何开始找到像这样的问题的解决方案。有没有人有最微弱的想法?

4 个答案:

答案 0 :(得分:2)

  1. 一个良好的开端是在您的应用中集成崩溃日志收集,崩溃报告SDK,例如 HockeyApp TestFlight Crittercism QuincyKit

    这会向您发送崩溃日志,因此您无需手动收集它们。这些工具还可以自动为您生成崩溃日志,以便您可以在代码中找到崩溃的来源。

  2. 您应该在发布之前测试发布版本。归档发布版本并将其作为Ad-Hoc构建进行分发。您可以使用iTunes或管理器将已保存的IPA文件加载到iDevice。问题是你可以测试一个发布版本,它与发布到App Store的版本相同(它们的签名方式不同,但构建配置是相同的,除非你改变了它。)

  3. iPhone 5S附带64位A7处理器。您的iPhone 4是32位设备。最有可能的处理器架构并非如此,但正如Apple所说:在分发应用程序之前,必须在实际硬件上进行测试。只有当应用程序在设备上运行时,才能检测到某些运行时更改。我建议您使用不同的模型更新您的测试设备集。我仍然拥有一台旧的iPhone 3GS,非常适合发现性能问题。

答案 1 :(得分:2)

其他人发布的一般评论是正确的。使用预制SDK将崩溃日志记录添加到您的应用程序中并在实际设备上进行测试。我无法为这些要点添加更多内容,但我会讲一个关于我在其中一个应用中发现的类似错误的简短故事,希望它可以帮助您解决问题。

我们的应用主要是iPad2用户。当iPad4发布时,我们的用户浪潮升级,他们开始遇到iPad2上没有的问题。两个网络请求同时被触发,其中一个请求崩溃了。我们最终发现这是一个并发错误。第一个请求的结果正在处理过快#34;并且代码进入了与其他请求处理程序不是线程安全的代码的关键部分。

虽然如果网络延迟恰到好处地在iPad2上仍然存在这个错误,但它从未发生过这种情况。 iPad4几乎每次都能实现。

答案 2 :(得分:1)

您可以使用https://github.com/CocoaLumberjack/CocoaLumberjack lib从用户收集崩溃数据日志。

答案 3 :(得分:1)

您是否考虑在应用中安装崩溃记录器?那里有很多(Flurry,TestFlight,Crittercism,Hockey App等)。

大多数安装相当简单 - 添加一个框架和几行代码。完成此操作后,您(希望)能够确切地看到您的应用在用户设备上的确切位置,而无需实际访问它们。