在testflight上从旧版本更新到新版本时,应用崩溃

时间:2018-09-27 11:37:33

标签: ios objective-c crash testflight

我创建了一个应用程序,尝试在testflight上将其从版本54更新到55时崩溃。但是,如果我先删除该应用程序,然后安装版本55,它将运行平稳。因此我构建了另一个带有一些修复程序的文件,并尝试进行试飞,因此现在构建55-56更新。它运行顺利。

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

1 个答案:

答案 0 :(得分:0)

通常,如果您在更新时崩溃,而不是在全新安装时崩溃,则意味着您有一些持久性数据与更新后的应用程序状态不兼容。

最常见的情况是:

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

基本上,任何持续存在的内容都可能在更新到新版本时导致崩溃或错误。但是因为您是从全新安装进行测试,所以在测试过程中始终会获得正确的格式。

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

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

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

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