Как сделать UITests-Runner доступным к конфиденциальным данным - PullRequest
0 голосов
/ 10 мая 2018

Я использую случай UITests с UIImageWriteToSavedPhotosAlbum(), чтобы сохранить мой тестовый скриншот в альбом фотографий:

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

, но он потерпел крах с ошибкой:

... XXXUITests-Runner [53905: 8592232] [доступ] Это приложение упало из-за попытки доступа к конфиденциальным данным без описания использования.Info.plist приложения должен содержать ключ NSPhotoLibraryAddUsageDescription со строковым значением, объясняющим пользователю, как приложение использует эти данные.

Я предоставил и NSPhotoLibraryUsageDescription & NSPhotoLibraryAddUsageDescription для своей цели UITest Target & App.

Некоторое время я искал, я не могу найти способ позволить UITests-Runner сохранять изображение в приложении Photos, пока нет уровня пользовательского интерфейса, который позволял бы мне нажимать, чтобы разрешить его.

Итак, как мне этого добиться, то есть сделать так, чтобы 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,00 с. Начать тест в 2018-05-10 11: 30: 37,695
t = 0,05 с. Установить
t = 0,06 с. Открыть com.kjuly.UITestRunnerIssueDemo
t = 0.10s Запустить com.kjuly.UITestRunnerIssueDemo
t = 3.08s Ожидать com.kjuly.UITestRunnerIssueDemo для простоя
t = 6.10s Найти целевое приложение 0x60c0000dd5e0
t = 6.25s Tear Down
2018-05-10 11: 30: 43.948541 + 0800 UITestRunnerIssueDemoUITests-Runner [53905: 8592232] [доступ] Это приложение упало из-за попытки доступа к конфиденциальным данным без описания использования.Info.plist приложения должен содержать ключ NSPhotoLibraryAddUsageDescription со строковым значением, объясняющим пользователю, как приложение использует эти данные.


Кстати, я знаю, что могу получить скриншот UITests, который автоматически сохраняется в папке AppData / Library / Snapshots, но будет удобно, если я смогу получить его из Фотоальбомаособенно если это происходит на реальном устройстве, я не хочу загружать Контейнер приложений каждый раз только для получения этих снимков экрана (а также мне нужен сохраненный снимок высокого качества).

1 Ответ

0 голосов
/ 14 июня 2018

У меня точно такая же проблема, временный обходной путь, который мне подходит - поставить код сохранения изображения:

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

внутри кода приложения, как при запуске в режиме отладки.

...