如何模拟iOS版本升级?

时间:2012-10-03 10:13:29

标签: ios

我们需要在iOS升级环境中测试我们的应用程序(例如,5.1 - > 6.0)。不幸的是,Apple不允许降级设备。我们想过在模拟器中做这件事,但不同版本的模拟器本身就是不同的环境。我想我们可以将捆绑包从一个模拟器复制到另一个模拟器,但这不会迁移钥匙串(是吗?)。

谢谢!

2 个答案:

答案 0 :(得分:11)

要测试从一个州(之前)到另一个州(之后)的转换,您需要一种方法将应用置于之前状态。

在操作系统更新时,您的应用肯定无法运行,因此您只需要担心应用启动并发现操作系统已更新。有几种选择:

  • 从运行" old"的设备复制所有应用的数据文件iOS版本(根据您的问题5.1)到运行新版本(6.0)的设备。 Xcode中的组织者可以让您轻松复制应用程序的容器"从设备到Mac,反之亦然。

  • 让您的应用在" old"中写下数据格式。应用程序根据环境具有以不同格式读取和写入数据的方法并不罕见,因此通常更容易让应用程序在数据库中写入数据。旧格式,而不是从旧设备实际复制。

无论您选择哪种路径,都要考虑可能在其中进行操作系统版本相关更改的任何其他位置(例如用户默认值),并将这些更改为与先前操作系统对应的值。这尤其适用于不会存储在应用程序沙箱中的钥匙串项目。

单元测试框架(如Apple的XCTest框架)通常有一个设置机制,可用于将应用重置为之前的状态,包括复制文件,添加和删除钥匙串项,设置默认项目等。然后,您可以添加单元测试,运行更新中可能涉及的任何代码并测试结果。通过一组易于重复的测试,您将能够更轻松地调试任何问题。

然而,您接近它,目标是将应用程序置于与OS更新发生后第一次运行时相同的状态。您不必担心模拟实际的操作系统更新,您只需欺骗应用程序就会认为更新刚刚发生。

答案 1 :(得分:5)

目前,您仍然可以安装iOS 8.2。发布新版本时,Apple会在短时间内打开两个版本进行安装。当“签名窗口”打开时,您可以升级设备,进行测试,然后从旧版本的映像中恢复它。因此,您可以在窗口打开时进行一些密集测试,但显然这不是一个长期解决方案(通常只持续几天)。

如果您有预算,可以在设备上安装8.2,在其上贴一个大贴纸,说“不升级”,并且只要它相关就保持8.2。在该设备上安装您的应用程序并进行备份(启用备份加密以便包含钥匙串条目),然后将该备份恢复到8.3上的另一个设备 - 这基本上与您在升级时所经历的程序相同/通过iTunes恢复所以它应该非常接近。当然,它与设备上的OTA更新不完全相同,但为此,请参阅上面的选项1(并尽快查看)。