Следующий сценарий:
У меня есть проект iOS, который автоматически тестирует модуль и пользовательский интерфейс при каждом нажатии git на сервере CI (CircleCI). Тесты выполняются с помощью Fastlane, который также используется для автоматического создания скриншотов для App Store.
Теперь мой проект переведен на несколько языков. Я хочу, чтобы fastlane работал на всех языках (чтобы можно было делать скриншоты), поэтому я изменил тесты пользовательского интерфейса примерно так:
app.navigationBars.buttons["Confirm"].tap()
to
let buttonTitle = NSLocalizedString("navbar.confirm", comment: "")
app.navigationBars.buttons[buttonTitle].tap()
Я думал, что это поможет, но это не так. Я не знаю, как настроен симулятор в CircleCI, но тесты пользовательского интерфейса теперь не работают с
[00:46:34]: ▸ testDashboard, Не найдено совпадений для поиска: Элементы, соответствующие предикату '"navbar.confirm" IN идентификаторы' из ввода {(
Поэтому по какой-то причине резервный язык, установленный с помощью CFBundleDevelopmentRegion
, не соблюдается, вероятно, потому, что язык не находится в списке preferredLanguages
пакета. Это проблема сама по себе, так как я не хочу, чтобы ключи отображались для конечных пользователей в любом случае. Я хочу убедиться, что этого никогда не произойдет.
Поэтому я попытался исправить это, в свою очередь, написав оболочку для NSLocalizedString
, которая проверяет, возвращает ли NSLocalizedString(..)
ключ, и если да, загружает пакет по умолчанию (en
) и таким образом локализует строку.
Однако кажется, что вы не можете загрузить другой пакет в тестах пользовательского интерфейса. Тест рухнет и провалится. Поэтому я не могу использовать этот обходной путь.
Я просто пропускаю какое-то очевидное решение? Я не могу быть единственным, у кого есть эта проблема, верно? Любые подсказки?