2

我们有一个应用程序在应用程序商店中运行了将近一年,并且我们收到了一些客户的差评,更新后无法打开应用程序。

用户报告他们在删除并随后重新安装应用程序后无法启动该应用程序。一位用户确实表示,他们只能在 iPhone 恢复出厂设置后才能启动该应用程序。

我们认为该问题与钥匙串有关,因为这似乎在系统中持续存在。出于这个原因,我们将用于访问钥匙串的第三方库更新为https://github.com/soffes/sskeychain。此更改是在版本 1.4.1 中进行的。

发布 1.4.1 后,一些用户表示他们终于能够打开该应用程序。不幸的是,由于我们无法调试问题,我们无法确定可能已解决的问题。此外,我们看到其他用户在升级到 1.4.1 和 1.4.2 时仍然遇到同样的问题。

我们也在考虑这个问题可能与我们的依赖库之一有关:

  • Flurry 分析
  • 脸书 iOS SDK
  • 贝宝 MPL
  • Hockeyapp ios 库
  • ASIHTTP请求
  • 我们不使用 CoreData

我们无法使用标准 iOS 工具对此进行调试,我们甚至不能指望 hockey 应用程序向我们提供崩溃报告,因为该应用程序在发送之前已关闭。

我们不理解这种行为,并且在从应用商店更新时,我们显然无法控制应用。应用程序在删除时是否有任何保留?如果没有,您是否知道任何可能阻止打开重新安装的应用程序的事情?

编辑:我们在 applicationDidFinishLaunching: 应用程序委托的方法中配置 hockeyapp 库:

[[BITHockeyManager sharedHockeyManager] configureWithIdentifier:QUINCY_APP_IDENTIFIER delegate:self];
[[BITHockeyManager sharedHockeyManager] setDisableUpdateManager:YES];
[[[BITHockeyManager sharedHockeyManager] crashManager] setCrashManagerStatus:BITCrashManagerStatusAutoSend];
[[BITHockeyManager sharedHockeyManager] startManager];
#ifdef DEBUG
  [[BITHockeyManager sharedHockeyManager] setDebugLogEnabled:YES];
#endif

应用程序标识符在构建设置中配置,并且每个配置都不同。

4

3 回答 3

4

一般来说,启动时可能会出现多个问题:

  1. 所需的库未正确链接:但这不可能是问题,因为那时所有应用程序启动都会崩溃!

  2. 启动时间过长,应用程序被看门狗杀死。

    如果您正在运行循环中的主线程上迁移大量数据,这可能是您的问题applicationDidFinishLaunching:,因此应用程序对用户输入没有响应,因此将在大约 20 秒后被看门狗杀死。

    确保在不阻塞主线程的情况下进行迁移!

  3. 您在启动时遇到崩溃(不是杀戮!)。由于应用程序在 HockeyApp SDK 发送崩溃之前崩溃,您将无法获得这些崩溃报告。

    HockeyApp iOS SDK 提供了一种机制来处理这些问题,请按照以下页面中的说明进行操作:http: //support.hockeyapp.net/kb/how-tos-faq/how-to-handle-crashes-during-startup-在 iOS 上

所以 2. 或 3. 都是你的问题。如果您有机会直接联系受影响的用户,您可以索要 iOS 生成的崩溃报告。否则请检查我给出的建议。

于 2013-03-14T13:33:08.200 回答
0

我们曾经遇到过这个问题。该应用程序作为 Ad Hoc 构建运行良好。苹果测试并批准了它;但是,最终用户会在打开时立即崩溃。

对我们来说,事实证明我们没有正确传递我们的 HockeyApp 生产 API 密钥。

一旦我们得到固定用户就可以了。例如:

[[BITHockeyManager sharedHockeyManager] configureWithBetaIdentifier:@"betaKeyHere"
                                                     liveIdentifier:@"liveKeyHere"
                                                           delegate:self];
于 2013-03-14T12:44:28.933 回答
0

我不敢相信,但我终于找到了应用程序崩溃的原因。

[[NSLocale currentLocale] objectForKey: NSLocaleCountryCode] 有时返回 nil。我假设这总是有效的,但显然我错了。

我在这里发现了另一个问题NSLocaleCountryCode 返回 nil。它应该是跟进这个问题的正确地点。

感谢@kerni 的建议,我能够让 hockeyapp 发送应用程序启动崩溃的报告,但不幸的是,这还不足以理解发生了什么:报告的堆栈跟踪不清楚。

经过几次尝试,我发现了另一个与乱舞有关的坏事。这是捕获系统异常并避免 hockeyapp 正确处理崩溃并生成合理的报告。这个讨论对我识别和纠正我的混乱集成代码非常有帮助:http: //support.hockeyapp.net/discussions/questions/1359-more-information-for-crashes-with-reason-no-reason-found

在此更改之后,我终于能够在 hockeyapp 上看到一个不错的崩溃报告并确定我的问题:当前语言环境。

于 2013-03-26T11:48:54.707 回答