在 testflight 上从旧版本更新到新版本时应用程序崩溃
App crash when updating from old build to new build on testflight
我创建了一个应用程序,当它在 testflight 上尝试从 build 54 更新到 55 时崩溃。但是如果我先删除该应用程序,然后安装 build 55 它运行顺利。所以我构建了另一个内部有一些修复的,并在试飞中尝试它,所以现在构建 55 - 56 更新。它运行流畅。
所以问题是,当从 54 更新到 55 时出现了一些问题,这里有人遇到过同样的问题吗?
通常情况下,如果您在更新时崩溃而不是在全新安装时崩溃,这意味着您有一些与更新后的应用程序状态不兼容的持久数据。
最常见的情况是:
- 数据库数据未正确迁移(或根本未迁移);也许在两次更新之间,一些字段的代码发生了变化,并且与旧的数据库版本不兼容?
- 钥匙串中的键和值and/or userdefaults。与数据库相同,您的代码需要一些值,但以前版本的文件不知道这些值。
- 文件。您可能 writing/expecting 一些以特定方式格式化或包含特定数据的文件。但是早期版本的用户可能没有这些文件,因此会导致崩溃
基本上,任何持续存在的东西都可能在更新到新版本时导致崩溃或错误。但是因为您是从全新安装进行测试,所以在测试期间您总是会得到正确的格式。
如果发生崩溃,应该有一个非常明确的异常告诉您发生了什么,这可以帮助您定位问题以及发生原因。从那里隔离需要迁移的文件应该非常简单。
避免这种情况的好方法是使用以前安装的版本进行测试,并跟踪您所做的所有持续修改。一旦你决定了必须坚持的事情,一旦你决定改变它,你就必须考虑到它。您可能必须编写一些代码来更新文件并在访问它之前检查其版本。所以如果数据库版本 1 有两个表和三个字段,你必须知道它,如果你对此不满意,你必须编写代码来更新数据库,它的所有内容,然后只有你可以期望每个人拥有新数据库。
这也是另一个好主意:在您的应用程序中使用版本控制。如果您的应用程序是版本 40,但您的文件仍为版本 34 格式,您必须使用特定于该更新的代码将其更新到版本 40。
迁移不是一件容易的事。需要大量的测试和数据操作。我强烈建议您在投入生产之前对此类工作使用单元测试。
我创建了一个应用程序,当它在 testflight 上尝试从 build 54 更新到 55 时崩溃。但是如果我先删除该应用程序,然后安装 build 55 它运行顺利。所以我构建了另一个内部有一些修复的,并在试飞中尝试它,所以现在构建 55 - 56 更新。它运行流畅。
所以问题是,当从 54 更新到 55 时出现了一些问题,这里有人遇到过同样的问题吗?
通常情况下,如果您在更新时崩溃而不是在全新安装时崩溃,这意味着您有一些与更新后的应用程序状态不兼容的持久数据。
最常见的情况是:
- 数据库数据未正确迁移(或根本未迁移);也许在两次更新之间,一些字段的代码发生了变化,并且与旧的数据库版本不兼容?
- 钥匙串中的键和值and/or userdefaults。与数据库相同,您的代码需要一些值,但以前版本的文件不知道这些值。
- 文件。您可能 writing/expecting 一些以特定方式格式化或包含特定数据的文件。但是早期版本的用户可能没有这些文件,因此会导致崩溃
基本上,任何持续存在的东西都可能在更新到新版本时导致崩溃或错误。但是因为您是从全新安装进行测试,所以在测试期间您总是会得到正确的格式。
如果发生崩溃,应该有一个非常明确的异常告诉您发生了什么,这可以帮助您定位问题以及发生原因。从那里隔离需要迁移的文件应该非常简单。
避免这种情况的好方法是使用以前安装的版本进行测试,并跟踪您所做的所有持续修改。一旦你决定了必须坚持的事情,一旦你决定改变它,你就必须考虑到它。您可能必须编写一些代码来更新文件并在访问它之前检查其版本。所以如果数据库版本 1 有两个表和三个字段,你必须知道它,如果你对此不满意,你必须编写代码来更新数据库,它的所有内容,然后只有你可以期望每个人拥有新数据库。
这也是另一个好主意:在您的应用程序中使用版本控制。如果您的应用程序是版本 40,但您的文件仍为版本 34 格式,您必须使用特定于该更新的代码将其更新到版本 40。
迁移不是一件容易的事。需要大量的测试和数据操作。我强烈建议您在投入生产之前对此类工作使用单元测试。