31

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

谢谢!

4

2 回答 2

11

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

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

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

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

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

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

无论您采用何种方法,目标都是使应用程序处于与操作系统更新后首次运行时相同的状态。您不必担心模拟实际的操作系统更新,您只需让应用程序认为更新刚刚发生。

于 2015-04-13T22:28:19.203 回答
5

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

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

于 2015-04-13T21:20:26.237 回答