【问题标题】:App crash when updating from old build to new build on testflight在 testflight 上从旧版本更新到新版本时应用程序崩溃
【发布时间】:2018-09-27 11:37:32
【问题描述】:

我创建了一个应用程序,在尝试从 build 54 更新到 55 时会崩溃。但如果我先删除该应用程序,然后安装 build 55,它会顺利运行。所以我构建了另一个带有一些修复的内部并在试飞中尝试,所以现在构建 55 - 56 更新。它运行顺利。

所以问题是当从 54 更新到 55 时,这里有人遇到过同样的问题吗?

【问题讨论】:

  • 崩溃说明了什么?
  • 您在使用任何数据库吗?迁移调用!
  • 更改 userdefaults 值或与之相关的任何内容...最合适的解决方案是,如果您在 54 之前提交代码,在 54 之后尝试安装 54 然后 54,您就会知道问题出在哪里.
  • 检查数据库,userdefaults相关
  • @dreamBegin 你的意思是 54 然后 55 然后 56?我明天会试试这个,希望可以在模拟器中模拟。我是这个项目的新开发者,所以明天我会追踪它。

标签: ios objective-c crash testflight


【解决方案1】:

通常情况下,如果您在更新而不是全新安装时出现崩溃,这意味着您有一些与更新后应用的状态不兼容的持久数据。

最常见的情况是:

  • 数据库数据未正确迁移(或根本未迁移);可能在两次更新之间,一些字段在代码中发生了变化,与旧数据库版本不兼容?
  • 钥匙串和/或用户默认值中的键和值。与数据库相同,您的代码需要一些值,但以前版本的文件不知道这些值。
  • 文件。您可能正在编写/期望某些以特定方式格式化或包含特定数据的文件。但是早期版本的用户可能没有这些文件,因此会导致崩溃

基本上,任何持续存在的东西都可能在更新到新版本时导致崩溃或错误。但由于您是从全新安装开始进行测试,因此您在测试期间始终会获得正确的格式。

如果您遇到崩溃,应该有一个非常明确的异常告诉您发生了什么,这可以帮助您找到问题,以及为什么会发生。从那里隔离需要迁移的文件应该非常简单。

避免这种情况的良好解决方案是使用已安装的先前版本进行测试,并跟踪您所做的所有持久性修改。一旦你决定了一些必须坚持的东西,一旦你决定改变它,你就必须考虑到它。您可能必须编写一些代码来更新文件并在访问之前检查其版本。所以如果数据库版本 1 有两个表和三个字段,你必须知道它,如果你对此不满意,你必须编写代码来更新数据库,它的所有内容,然后只有你可以期待每个人拥有新的数据库。

这也是另一个好主意:在您的应用程序中使用版本控制。如果您的应用是 40 版,但您的文件仍是 34 版格式,则您必须使用特定于该更新的代码将其更新到 40 版。

迁移并非易事。需要大量的测试和数据操作。我强烈建议您在投入生产之前对此类工作使用单元测试。

【讨论】:

  • 是的,我上次成功了,因为 NSUserDefault。谢谢你,吉尔!
猜你喜欢
  • 1970-01-01
  • 2020-08-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-08-07
相关资源
最近更新 更多