Совет по Xcode: Действия перед сборкой

На днях я столкнулся с этой замечательной функциональностью в Xcode, которая помогла мне решить реальную проблему. Я никогда не видел, чтобы кто-то упоминал, что вы можете сделать это, поэтому я делюсь этим здесь в надежде, что это поможет кому-то еще.

Недавно я работал с фреймворком, который использует файл конфигурации. Этот файл хранится в JSON и поставляется вместе с приложением. Мне нужен был простой способ иметь отдельные файлы конфигурации для dev версии моего приложения и prod версии, и у меня уже были отдельные схемы для этих разных версий. Я искал пути решения этой задачи, возможно, через аргумент, передаваемый при запуске, или флаг компилятора, или что-то еще. Я начал спускаться в кроличью нору различных инструментов генерации кода и т.д. Но потом я заметил кое-что в редакторе схем.

Под маленьким выпадающим меню «Build» есть пункт под названием «Pre-actions». Если вы щелкните на нем и нажмете кнопку «+» внизу, у вас появится возможность добавить «Run Script Action». Это означает, что вы можете запускать любой произвольный сценарий до (или после) всех сборок (или запусков, или тестов) вашего приложения. И они могут быть разными для разных схем. Это казалось идеальным способом достижения моей цели!

Я добавил пустой JSON-файл под названием «configuration.json» в свой проект и включил его в target. Затем я поместил файлы «configuration-dev.json» и «configuration-prod.json» в каталог моего приложения (чтобы оно было включено в контроль исходного кода), но не стал добавлять их в сам проект.

Затем для моей схемы dev я добавил этот сценарий в качестве действия предварительной сборки:

cp "$SRCROOT/configuration-dev.json" "$SRCROOT/configuration.json"
Войти в полноэкранный режим Выйти из полноэкранного режима

Если вы не знакомы с bash, команда cp копирует файлы из источника в место назначения. В данном случае она скопирует dev-версию конфигурационного файла в ту, которую я включил в проект, перезаписав все, что там было до этого.

Я также убедился, что параметр «Provide build settings from» был установлен на целевое приложение, а не на «None». Это необходимо для получения SRCROOT в скрипте, который является путем к директории, где находится файл проекта.

Затем я сделал то же самое для действия prod:

cp "$SRCROOT/configuration-prod.json" "$SRCROOT/configuration.json"
Войти в полноэкранный режим Выйти из полноэкранного режима

Теперь, когда я собираю схему dev, у меня есть содержимое configuration-dev, встроенное в приложение, а когда я собираю схему prod, у меня есть содержимое configuration-prod.

Просто, верно? Очевидно, вы могли бы запустить здесь гораздо более сложные скрипты и сделать больше, если бы вам это было нужно. Но пока что этот однострочный скрипт, кажется, решил эту небольшую проблему, которая у меня была, и я не увидел никаких отрицательных сторон.

Оцените статью
devanswers.ru
Добавить комментарий