在过去的几天里,我一直在使用 Apple 的 UIAutomation 框架,试图组合一套验收测试来推动我正在开发的应用程序的开发(以 BDD 类型的方式......)。
我遇到的一件事是如何让 SUT 进入给定状态,这样如果我需要设置一些内部状态来实现它,我就可以开始测试。问题是 Apple 的 Javascript 环境除了通过它的 UI 之外没有提供任何我可以用来与设备通信的功能(我确信这可能是设计使然,但有时这是不切实际的):而像iCuke或Frank这样的解决方案可以使用 HTTP 与嵌入在目标应用程序中的侦听服务器进行通信以进行此类通信,但在 Instrument 的 UIAutomation 环境中无法执行此类操作。
查看提供的 API,我注意到 UIAApplication 类中有一个函数允许我在目标设备上设置首选项值(有关更多详细信息,请参见此处):我想到我可以在设备上安装一些代码可以使用 KVO 来寻找给定首选项键的机会,然后我可以使用它作为与目标应用程序中一些特殊的特定于测试的帮助代码进行通信的手段(在首选项的值更改时做出反应)。
我开始四处寻找是否可以完成这项工作,但遇到了一堵砖墙,因为我找不到从目标应用程序中访问 UIAutomation 设置的首选项的方法。问题是首选项似乎是在主机域级别设置的(即它们是在文件中设置的/Library/Preferences/com.mycompany.MyApp
),而不是在/Library
特定于我的应用程序的沙盒文件夹中。
我确定我设置的首选项正在影响设备 - 我可以看到上述文件中的值发生变化,但我找不到使用 NSUserDefaults 访问这些值的方法。
谁能阐明我应该如何访问存储在 iOS 设备上的此级别(NSLocalDomain ...)的首选项?
注意:我意识到这完全是一种黑客攻击,但不幸的是,Apple 现在提供的环境似乎远远达不到标准,所以我正在尽我最大的努力填补空白,以代替 Apple 的进一步更新。如果您在网络上搜索,您会发现其他人也有非常相似的经历,并试图以类似的方式解决当前的缺陷。
更新:根据这个线程,这可能是一个错误。虽然我无法确定这一点..