Копировать файлы в пакет в зависимости от активной конфигурации - PullRequest
22 голосов
/ 22 марта 2011

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

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

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

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

Ответы [ 4 ]

26 голосов
/ 24 апреля 2011

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

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

RESOURCE_PATH=$SRCROOT/ResourcesCopiedByRunScript

FILENAME_IN_BUNDLE=splashVideo.mp4

BUILD_APP_DIR=${BUILT_PRODUCTS_DIR}/${PRODUCT_NAME}.app

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
4 голосов
/ 29 марта 2011

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

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

Я проделал этот трюк с проектами Mac, полагаю, он подойдет и для iOS.

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

2 голосов
/ 07 ноября 2018

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

enter image description here

0 голосов
/ 03 ноября 2018

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

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
...