更新后无法打开iOS应用

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

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

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

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

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

  • 乱舞分析
  • Facebook iOS SDK
  • PayPal MPL
  • Hockeyapp ios lib
  • ASIHTTPRequest
  • 我们不使用CoreData

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

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

编辑:我们正在以这种方式在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 

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

通常,启动时可能会出现多个问题:

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

  2. 启动需要花费太长时间,应用程序被监视器杀死。

    这可能是你的问题,如果你正在例如在applicationDidFinishLaunching: runloop中的主线程上迁移大量数据,因此app对用户输入没有响应,因此在大约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生成的崩溃报告。 否则请检查我给出的建议。

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

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

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

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

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

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

我在这里发现了另一个问题NSLocaleCountryCode返回nil 。 它应该是对这个问题采取后续行动的正确场所。

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

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

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