Ios 如何使UITests Runner能够访问隐私敏感数据

Ios 如何使UITests Runner能够访问隐私敏感数据,ios,xcode,cocoa-touch,xcode-ui-testing,xcuiscreenshot,Ios,Xcode,Cocoa Touch,Xcode Ui Testing,Xcuiscreenshot,我正在运行UITests案例w/UIImageWriteToSavedPhotosAlbum()以将我的测试屏幕截图保存到照片相册: - (void)testExample { XCUIScreenshot *screenshot = [_app screenshot]; UIImageWriteToSavedPhotosAlbum(screenshot.image, nil, nil, nil); } 但它崩溃了,错误如下: 。。。XXXUITests Runner[53905:85

我正在运行UITests案例w/
UIImageWriteToSavedPhotosAlbum()
以将我的测试屏幕截图保存到照片相册:

- (void)testExample
{
  XCUIScreenshot *screenshot = [_app screenshot];
  UIImageWriteToSavedPhotosAlbum(screenshot.image, nil, nil, nil);
}
但它崩溃了,错误如下:

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

我已经为我的UITest目标和应用程序目标提供了NSPhotoLibraryUsageDescription和NSPhotoLibraryAddUsageDescription

搜索了一段时间后,我想不出一种方法让UITests Runner能够将图像保存到照片应用程序中,到目前为止,没有UI级别允许我按下以允许它

那么,我如何实现这一点,即让UITests Runner能够访问隐私敏感数据(本例中的照片)


此处提供的示例项目:

以下是相关的错误详细信息:

测试套件“所有测试”于2018-05-10 11:30:37.693开始
测试套件“UITestRunnerIssueDemoUITests.xTest”于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.05秒设置
t=0.06s打开com.kjuly.uitestrunnerissuedmo
t=0.10s发布com.kjuly.uitestrunnerissuedmo
t=3.08s等待com.kjuly.uitestrunnerissuedmo空闲
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屏幕截图,但如果我可以从Photos Album中获得它,那就很方便了,尤其是在真实设备中,我不愿意每次下载应用程序容器只是为了获得这些屏幕截图(而且,我需要保存的高质量屏幕截图).

我现在有完全相同的问题,暂时的解决办法是将图像保存代码:

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

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

更新:我发送了一个TSI,刚刚收到回复:“我们的工程师已经审查了您的请求,并确定您遇到了一个已知问题,目前还没有已知的解决方法。”并且根据建议,提交了一份相关的错误报告(#40317463),希望它能在下一个Xcode版本中得到处理。这似乎是一个选项,但我想知道你是如何得到
XCUIScreenshot*截图=[\u应用程序截图]内部主机应用程序?或者你只是把视图渲染成屏幕截图?就我个人而言,我不喜欢在主机应用程序中包含测试相关的代码,但是,是的,这可能是一个临时的解决办法。现在,我只需在模拟器中执行此操作&将其保存在其他位置而不是Photos app.ya,将视图渲染为截屏图像,并将其保存在
#如果调试UIImageWriteToSavedPhotosAlbum([self captureScreen],nil,nil,nil)#endif