我们需要在 iOS 升级(例如 5.1 -> 6.0)的情况下测试我们的应用。不幸的是,Apple 不允许降级设备。我们想到了在模拟器里面做,但是不同版本的模拟器本身就是不同的环境。我认为我们可以将包从一个模拟器复制到另一个模拟器,但这不会迁移钥匙串(keychain)(会吗?)。
谢谢!
最佳答案
要测试从一种状态(之前)到另一种状态(之后)的转换,您需要一种方法将应用置于之前状态。
您的应用肯定不会在操作系统更新时运行,因此您实际上只需要担心应用启动并发现操作系统已更新。有几个选项:
将您应用程序的所有数据文件从运行“旧”iOS 版本(根据您的问题是 5.1)的设备复制到运行新版本 (6.0) 的设备。组织者在Xcode 可让您轻松地将应用的“容器”从设备复制到 Mac,反之亦然。
让您的应用程序以“旧”格式写入数据。应用程序具有根据环境以不同格式读取和写入数据的方法并不少见,因此让您的应用以旧格式写出数据通常比从旧设备实际复制数据更容易。
无论您选择哪条路径,请考虑您可能在其中进行与操作系统版本相关的更改的任何其他地方(如用户默认值),并将这些更改回与以前的操作系统相对应的值。这尤其适用于未存储在应用沙箱中的钥匙串(keychain)项目。
单元测试框架(如 Apple 的 XCTest 框架)通常有一个设置机制,您可以使用该机制将您的应用重置为之前状态,包括复制文件、添加和删除钥匙串(keychain)项、设置默认项等等。然后您可以添加单元测试来运行更新中可能涉及的任何代码并测试结果。通过一组易于重复的测试,您将能够更轻松地调试任何问题。
无论采用何种方法,目标都是让应用程序处于与发生操作系统更新后首次运行时相同的状态。您不必担心模拟实际的操作系统更新,您只需要让应用认为更新刚刚发生。
关于ios - 如何模拟iOS版本升级?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12706347/