更新后无法打开iOS应用

时间:2013-03-14 12:28:43

标签: ios cocoa-touch keychain crash-reports sfhfkeychainutils

我们在应用程序商店中有一个应用程序已有近一年的时间,而且我们收到了一些来自客户的差评,这些评论在更新后无法打开应用程序。

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

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

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

我们也在考虑问题可能来自我们的一个依赖库:

  • Flurry analytics
  • Facebook iOS SDK
  • PayPal MPL
  • Hockeyapp ios lib
  • ASIHTTPRequest
  • 我们不使用CoreData

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

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

编辑: 我们正在以这种方式在applicationDidFinishLaunching:app delegate的方法中配置hockeyapp lib:

[[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

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

3 个答案:

答案 0 :(得分:4)

一般情况下,启动时可能会出现多个问题:

  1. 所需的库未正确链接:但这可能会出现 NOT 问题,因为所有应用启动都会崩溃!

  2. 启动时间过长,应用程序被监管机构杀死。

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

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

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

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

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

答案 1 :(得分:0)

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

对于我们来说,原来我们没有正确地传递我们的HockeyApp生产API密钥。

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

[[BITHockeyManager sharedHockeyManager] configureWithBetaIdentifier:@"betaKeyHere"
                                                     liveIdentifier:@"liveKeyHere"
                                                           delegate:self];

答案 2 :(得分:0)

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

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

我在NSLocaleCountryCode returns nil找到了另一个问题。它应该是对这个问题采取后续行动的正确场所。

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

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

在这次改变之后,我终于能够看到关于hockeyapp的体面崩溃报告,并确定我的问题:当前的语言环境。