3

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

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

但它因错误而崩溃:

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

我已将 NSPhotoLibraryUsageDescription 和 NSPhotoLibraryAddUsageDescription 提供给我的 UITest 目标和应用程序目标。

搜索了一段时间,到目前为止,我想不出一种方法让 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 to idle
t = 6.10s Find the Target Application 0x60c0000dd5e0
t = 6.25s Tear Down
2018-05-10 11:30:43.948541+0800 UITestRunnerIssueDemoUITests-Runner[53905:8592232] [access] 这个应用程序已经崩溃,因为它试图在没有使用说明的情况下访问隐私敏感数据。应用的 Info.plist 必须包含一个 NSPhotoLibraryAddUsageDescription 键和一个字符串值,向用户解释应用如何使用这些数据。


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

4

1 回答 1

2

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

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

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

于 2018-06-14T16:07:21.227 回答