Подтвердить что ты не робот

Скопировать файлы в пакет в зависимости от активной конфигурации

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

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

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

Заранее спасибо!

4b9b3361

Ответ 1

Я не нашел лучшего решения, чем использование Run Script. Лучше всего скопировать файл в каталог ресурсов приложения, если выбрана конфигурация отладки.

Я решил свою проблему с помощью этого сценария запуска:

RESOURCE_PATH=$SRCROOT/ResourcesCopiedByRunScript

FILENAME_IN_BUNDLE=splashVideo.mp4

BUILD_APP_DIR=${BUILT_PRODUCTS_DIR}/${FULL_PRODUCT_NAME}

if [ "$CONFIGURATION" == "Debug" ]; then
    cp "$RESOURCE_PATH/shortDebugSplashVideo.mp4" "$BUILD_APP_DIR/$FILENAME_IN_BUNDLE"
else
    cp "$RESOURCE_PATH/productionSplashVideo.mp4" "$BUILD_APP_DIR/$FILENAME_IN_BUNDLE"
fi

Ответ 2

Если вы можете дать двум различным файлам одинаковое имя, вы можете поместить их в папки продуктов для сборки для соответствующей конфигурации. Затем добавьте один из них в проект и сделайте его ссылкой относительно продукта сборки.

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

Я сделал этот трюк в проектах Mac, я предполагаю, что он будет работать и для iOS.

Изменить: вот пример того, что я сделал: я хочу, чтобы сборка отладки моего приложения связывалась с сборкой отладки определенной библиотеки, и я хочу, чтобы релиз-сборка приложения связывалась с сборкой релизов библиотека. Поэтому я поместил библиотеку отладки (или символическую ссылку на нее) в подпапку Debug из папки создания приложения, и я поместил библиотеку выпусков в подпапку Release из папки создания приложения. Затем, когда я добавляю библиотеку в проект, я указываю, что ссылка "относительно продукта сборки".

Ответ 3

Лучший способ сделать это с помощью параметра " Исключить имена исходных файлов" в настройках сборки, как показано на рисунке.

enter image description here

Ответ 4

Вы можете заменить один файл другим с помощью скрипта запуска перед этапом компиляции.

RESOURCE_PATH=$SRCROOT/SampleProject/SupportingFiles/

LICENSE=license.txt
LICENSE_PROD=license_prod.txt

if [ "$CONFIGURATION" == "Release" ]; then
cp $RESOURCE_PATH/$LICENSE_PROD $RESOURCE_PATH/$LICENSE
fi