2016-12-14 95 views
1

我试图保存在运行单元测试时生成的文件,这些单元测试稍后会在不同的模拟器/不同时间通过相同的测试加载。我无法使用NSDocumentsDirectory,因为它每次在同一个模拟器上运行应用程序时都会更改。我可以写什么共享目录或可以写入哪些路径,以便可以在不同测试运行之间加载文件?模拟器运行之间的iOS共享目录

注:

  • 所记录的数据被记录为测试运行。我正在记录http流量并将其写入稍后加载的文件中。

  • 我在同一个模拟器上运行所有的测试,所以如果模拟器之间的目录不可访问,那很好。我希望它可以在不同的运行中通过相同的模拟器访问。

回答

2

当iOS应用程序写入其iPhone文件目录中的iPhone模拟器(NSDocumentDirectory)时,数据仍可用于后续运行。即使应用程序被重建/重新安装,数据仍将保留在应用程序中,但在新的NSDocumentDirectory中。即使根应用程序目录不同,文档也会自动移至新的NSDocumentDirectory

所以只要它在同一个模拟器上工作,就像它在同一个设备上一样。你不需要做任何事情。

我发现的伎俩使用Mac OS X的Finder或终端(对我来说)时是停止寻找在同一个绝对目录所有的时间,并获得应用日志无论当前文档目录是,然后检查那个文件是否存在于那个新目录中。我发现每次重建/重新安装应用程序时,系统都会将文档移动到我的文档中。

就我所知,它似乎与从App Store更新真实设备上的应用程序的行为大致相同。我想它会安装新的应用程序,然后将所有数据从旧应用程序移至新应用程序,然后删除旧应用程序。

+0

这是非常有用的信息,谢谢! – Minimi

1

模拟器就像是单独的设备:他们不能共享文件 ,也不可以将新安装应用程式 的(从重建)。 我想你必须生成文件,然后手动找到它们in the simulated app container

然后,您可以在“复制束资源”构建阶段将文件添加到测试目标,然后通过NSBundle访问它们。即使在测试时,主包仍然是应用程序,但您可以找到合适的包,其中包含+bundleForClass:以及仅存在于测试目标中的类。


Son of a Beach's answer指出,这是错误的。

+0

这些文件在测试过程中生成,因此很难实现。这些文件是我从请求中抓取并写入文件的http流量。下次运行测试时,如果存在响应,则使用记录的响应。所以我不能将它们添加到复制文件构建阶段。 – Minimi

+0

我相信你将不得不手动复制文件,然后。每个模拟器代表一个单独的设备,并且您的应用程序在每个模拟器上都是一个沙盒,就像在真实设备上一样。 –

+0

你是如何手动的?所以我将不得不复制粘贴文件到尚未创建的目录中,因为测试尚未运行? – Minimi