Предоставьте разрешения iOS драйверу Flutter для тестирования интеграции

При использовании пакета Flutter integration_test у меня возникают проблемы с тестом, который продолжает давать сбой из-за запроса разрешений iOS, недоступного из тестовой среды.

Я пробовал applesimutils из github.com/wix/AppleSimulatorUtils, но при попытке установить разрешения перед приводом флаттера идентификатор пакета приложения еще не зарегистрирован:

Got error:
An error was encountered processing the command (domain=NSPOSIXErrorDomain, code=2):
The operation couldn’t be completed. No such file or directory
No such file or directory

Возможно, этого можно было бы избежать, не создавая каждый раз новый экземпляр Simulator, но я обошел это, выполнив flutter drive ... & sleep 10 перед командой applesimutils --setPermissions, чтобы приложение запускалось первым, но это все равно дает мне:

══╡ EXCEPTION CAUGHT BY FLUTTER TEST FRAMEWORK ╞═════════════════
The following LocationError object was thrown running a test:
  [LocationError code: 0, message: null]

When the exception was thrown, this was the stack:
#2   BackgroundGeolocation.getCurrentPosition.<anonymous closure>
  (package:flutter_background_geolocation/models/background_geolocation.dart:497:17)

...

person Jonah M    schedule 07.03.2021    source источник


Ответы (1)


Немного познакомившись с xcrun simctl, я заметил, что он может предоставлять разрешения до запуска приложения, пока устройство загрузилось. applesimutils не требуется!

Мое рабочее решение в виде сценария оболочки выглядит так:

# Simulator setup
xcrun simctl create iOS14Simulator
xcrun simctl boot iOS14Simulator
xcrun simctl privacy iOS14Simulator grant location-always <YOUR_BUNDLE_ID>

# Launch integration test
flutter drive \
  --driver=test_driver/integration_test_driver.dart \
  --target=integration_test/app_test.dart

# Simulator teardown
xcrun simctl delete iOS14Simulator
person Jonah M    schedule 07.03.2021