ios - 在 testflight 上从旧版本更新到新版本时应用程序崩溃

标签 ios objective-c crash testflight

我创建了一个应用程序,当尝试在 testflight 上从版本 54 更新到 55 时,该应用程序崩溃了。但是,如果我先删除该应用程序,然后安装版本 55,它就会顺利运行。所以我构建了另一个,其中包含一些修复并在试飞中尝试,所以现在构建 55 - 56 更新。它运行顺利。

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

最佳答案

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

最常见的情况是:

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

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

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

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

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

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

关于ios - 在 testflight 上从旧版本更新到新版本时应用程序崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52536114/

相关文章:

ios - 如何将图像放在 UIActionSheet 上?

ios - 优化 iOS 的 SQLite 多个 LIKE 搜索

ios - 在 iOS 上复制原始类型是原子的吗?

objective-c - 滚动表格 View 时点击后退按钮时应用程序崩溃

objective-c - 更改 MPMoviePlayerController 实例的视频 url 而不是分配新的

ios - 如何覆盖应用程序内部使用的当前语言

ios - 如何使 iPhone 4 应用程序适应所有 iOS 尺寸?

objective-c - 如何接受编辑和关闭包含自定义 View 的弹出菜单?

crash - 什么是Bad_dump!missing_teb(Windows Phone开发人员中心崩溃日志)

ios 随机崩溃调试 - 帮助解释控制台信息