如何模拟iOS版本升级?

Vla*_*nko 31 ios

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

谢谢!

Cal*_*leb 11

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

在更新操作系统,您的应用程序肯定不会运行,因此您只需要担心应用程序启动并发现操作系统已更新.有几种选择:

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

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

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

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

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


Cup*_*Tae 5

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

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