Xcode4: пользовательская задача для копирования ресурсов в пакет - PullRequest
1 голос
/ 14 ноября 2011

Народ, возможно ли создать пользовательское задание для копирования ресурсов в Xcode?

Я бы хотел использовать rsync вместо встроенных в Xcode задач копирования ресурсов. Время от времени Xcode по какой-то причине не копирует измененные ресурсы в комплект, поэтому я хотел бы лучше контролировать эту задачу.

Я думаю, что мне нужна магическая переменная, которая указывает на каталог целевого комплекта, поэтому я могу создать следующую задачу:

rsync -a $ {SRCROOT} / resources $ {PATH_TO_THE_BUNDLE} /

... но я понятия не имею, существует ли такая переменная.

Обновление: Я попробовал переменную $ {BUILT_PRODUCTS_DIR}, и она указывает на какой-то промежуточный каталог, пока во время выполнения [[NSBundle mainBundle] pathForResource: my_path ofType: nil] возвращает что-то полностью разные. Есть ли переменная XCode, которая возвращает тот же результат, что и NSBundle?

Ответы [ 2 ]

2 голосов
/ 14 ноября 2011

Да ... звучит так, как будто вы уже знаете, как добавить действие «Выполнить скрипт» в схему сборки, и вам могут потребоваться следующие магические переменные:

$SRCROOT - источниккорневой каталог дерева

$BUILT_PRODUCTS_DIR - извилистый путь к месту назначения, куда в конечном итоге приходит собранный продукт (т. е. да, содержимое этой переменной немного меняется в зависимости от того, создаете ли вы приложение для Mac или iPhoneприложение, предназначенное для симулятора или устройства)

Итак ... звучит так, как вы хотите, чтобы "$BUILT_PRODUCTS_DIR/Contents/Resources" в вашем скрипте сборки?

0 голосов
/ 16 сентября 2013

Для этого на каталог :

  1. Добавление фазы запуска сценария запуска (редактор> Добавить этап сборки> Добавить этап сборки сценария)
  2. Скопируйте / вставьте следующий скрипт в фазу сборки (не забудьте указать действительные пути в строке 1):

dirsToCopy=("path1/directory1","path2/directory2")

for INPATTERN in "${dirsToCopy[@]}"; do
    INDIR=$PROJECT_DIR/$INPATTERN/*
    OUTDIR=$TARGET_BUILD_DIR/$CONTENTS_FOLDER_PATH/$INPATTERN
    cp -R $INDIR $OUTDIR
done

Для тех, кто не привык работать со скриптами оболочки:

  • пути в строке 1 сценария относятся к каталогу проекта (где находится файл .xcodeproj)

  • вы можете добавить больше (или меньше) путей к массиву dirsToCopy, если хотите

  • Вы можете изменить шаблон файлов для копирования, где определяется переменная INDIR

  • вы можете изменить способ копирования (в настоящее время рекурсивный из-за -R), изменив флаги на cp в последней строке скрипта в блоке for.

...