如何让UITests-Runner能够访问隐私敏感数据

时间:2018-05-10 03:42:45

标签: ios xcode cocoa-touch xcode-ui-testing xcuiscreenshot

我正在运行一个带有UIImageWriteToSavedPhotosAlbum()的UITests案例,以将我的测试屏幕截图保存到相册:

- (void)testExample
{
  XCUIScreenshot *screenshot = [_app screenshot];
  UIImageWriteToSavedPhotosAlbum(screenshot.image, nil, nil, nil);
}

但它崩溃了错误:

  

... XXXUITests-Runner [53905:8592232] [access]此应用已崩溃,因为它试图在没有使用说明的情况下访问隐私敏感数据。应用程序的Info.plist必须包含一个NSPhotoLibraryAddUsageDescription键,其中包含一个字符串值,向用户解释应用程序如何使用此数据。

我提供了NSPhotoLibraryUsageDescription& NSPhotoLibraryAddUsage描述我的UITest Target& App Target。

搜索了一段时间,我无法想办法让UITests-Runner能够将图像保存到照片应用程序到目前为止,没有UI级别让我按下允许它。

那么,我怎样才能实现这一点,即让UITests-Runner能够访问隐私敏感数据(在这种情况下是照片)?

此处提供示例项目:

UITestRunnerIssueDemo

以下是相关的错误详情:

  

测试套件'所有测试'开始于2018-05-10 11:30:37.693
  测试套件'UITestRunnerIssueDemoUITests.xctest'开始于2018-05-10 11:30:37.694
  测试套件'UITestRunnerIssueDemoUITests'开始于2018-05-10 11:30:37.694
  测试用例' - [UITestRunnerIssueDemoUITests testExample]'开始       t = 0.00s开始测试2018-05-10 11:30:37.695
      t = 0.05s设置
      t = 0.06s打开com.kjuly.UITestRunnerIssueDemo
      t = 0.10s启动com.kjuly.UITestRunnerIssueDemo
      t = 3.08s等待com.kjuly.UITestRunnerIssueDemo闲置
      t = 6.10s找到目标应用程序0x60c0000dd5e0
      t = 6.25s撕下
  2018-05-10 11:30:43.948541 + 0800 UITestRunnerIssueDemoUITests-Runner [53905:8592232] [access]此应用已崩溃,因为它试图在没有使用说明的情况下访问隐私敏感数据。应用程序的Info.plist必须包含一个NSPhotoLibraryAddUsageDescription键,其中包含一个字符串值,向用户解释应用程序如何使用此数据。

顺便说一句,我知道我可以获得自动保存在AppData / Library / Snapshots文件夹下的UITests截图,但是如果我可以从相册中获取它会很方便,特别是在真实设备中这样做时,我不想每次只是为了获取这些截图而下载App Container(而且,我还需要保存高质量的截图)。

1 个答案:

答案 0 :(得分:2)

我现在有完全相同的问题,对我有用的临时解决方法是放置图像保存代码:

  UIImageWriteToSavedPhotosAlbum(screenshot.image, nil, nil, nil);

在应用程序代码中,就像在调试模式下运行它一样。