更新后无法打开iOS应用程序

更新后无法打开iOS应用程序,ios,cocoa-touch,keychain,crash-reports,sfhfkeychainutils,Ios,Cocoa Touch,Keychain,Crash Reports,Sfhfkeychainutils,我们有一个应用程序在应用程序商店中运行了将近一年,我们收到了一些来自客户的不良评论,这些评论在更新应用程序后无法打开应用程序 用户报告在删除并随后重新安装应用程序后无法启动该应用程序。 一位用户表示,他们只能在iPhone出厂重置后才能启动该应用程序 我们认为问题与钥匙链有关,因为这似乎在系统中持续存在。因此,我们更新了用于访问密钥链的第三方库。此更改是在版本1.4.1中进行的 在发布了1.4.1之后,一些用户表示他们终于能够打开应用程序了。不幸的是,由于我们无法调试该问题,我们无法确定可能解决

我们有一个应用程序在应用程序商店中运行了将近一年,我们收到了一些来自客户的不良评论,这些评论在更新应用程序后无法打开应用程序

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

我们认为问题与钥匙链有关,因为这似乎在系统中持续存在。因此,我们更新了用于访问密钥链的第三方库。此更改是在版本1.4.1中进行的

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

我们还正在考虑与我们的一个附属图书馆有关的问题:

  • Flurry分析
  • Facebook iOS SDK
  • 贝宝MPL
  • hockeyappios库
  • Asittprequest
  • 我们不使用CoreData
我们无法用标准的iOS工具进行调试,我们甚至不能期望曲棍球应用程序向我们提供崩溃报告,因为该应用程序在发送之前已经关闭

我们不了解这种行为,并且在应用商店更新应用程序时,我们显然无法控制应用程序。应用程序删除时是否存在任何持久性问题?如果没有,您是否注意到任何可能阻止重新安装的应用打开的情况

编辑: 我们正在ApplicationIDFinishLaunching:app委托的方法中配置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

应用程序标识符在生成设置中配置,每个配置都不同。

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

对我们来说,结果是我们没有正确地传递我们的HockeyApp生产API密钥

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

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

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

对我们来说,结果是我们没有正确地传递我们的HockeyApp生产API密钥

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

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

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

  • 所需的库链接不正确:但这可能不是问题所在,因为所有应用程序启动都会崩溃

  • 启动时间太长,应用程序被看门狗杀死

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

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

  • 启动时,您正在经历崩溃(不是死亡!)。由于应用程序在HockeyApp SDK发送崩溃之前崩溃,因此您将无法获取这些崩溃报告

    HockeyApp iOS SDK提供了处理这些问题的机制,请按照以下页面中给出的说明进行操作:


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

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

  • 所需的库链接不正确:但这可能不是问题所在,因为所有应用程序启动都会崩溃

  • 启动时间太长,应用程序被看门狗杀死

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

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

  • 启动时,您正在经历崩溃(不是死亡!)。由于应用程序在HockeyApp SDK发送崩溃之前崩溃,因此您将无法获取这些崩溃报告

    HockeyApp iOS SDK提供了处理这些问题的机制,请按照以下页面中给出的说明进行操作:


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

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

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

    我在这里发现了另一个问题。它应该是对这个问题采取后续行动的正确地点

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

    经过几次尝试,我发现了另一件与flurry有关的坏事。这是为了捕获系统异常并避免hockeyapp正确处理崩溃并生成合理的报告。 这次讨论对我识别和更正flurry集成代码非常有帮助:


    在这次更改之后,我终于能够在hockeyapp上看到一个不错的崩溃报告,并确定我的问题:当前的区域设置。

    我不敢相信,但我终于找到了