Добавление ресурсов в проект Xcode рекурсивно с помощью Applescript - PullRequest
4 голосов
/ 15 мая 2009

Возможно ли добавить папку в проект Xcode в виде группы с помощью Applescript, рекурсивно добавив все, что находится под ним, как если бы оно было перетащено в список групп и файлов?

Ответы [ 2 ]

2 голосов
/ 23 октября 2009

Мне нужно, чтобы все файлы в подкаталогах, кроме каталогов lproj, были плоскими в комплекте .app. Активы были в этой структуре:

${assetsDir}/${targetCode}/
    Icon.png
    en.lproj
    ja.lproj
    ...
    *.lproj
    resources{$targetCode/
        Target.plist
        audio/Audio.plist
             *.mp3

Я добавил фазу сборки Run Script перед «Копировать ресурсы комплекта» с чем-то вроде следующего:

COPY_COMMAND="$DEVELOPER_LIBRARY_DIR/PrivateFrameworks/DevToolsCore.framework/Resources/pbxcp"
copyPNGCommand="$PLATFORM_DEVELOPER_LIBRARY_DIR/Xcode/Plug-ins/iPhoneOS Build System Support.xcplugin/Contents/Resources/copypng"

lprojDirectories=$( find ${assetsDirectory}/${targetCode} -type d -name *lproj )

for lprojDirectory in $lprojDirectories; do
    "$COPY_COMMAND" -exclude .DS_Store -exclude .svn -resolve-src-symlinks "$lprojDirectory"  "$CONFIGURATION_BUILD_DIR/$UNLOCALIZED_RESOURCES_FOLDER_PATH"
done

MP3s=$( find ${assetsDirectory}/${targetCode}/resources${targetCode} -type f -name *.mp3 )

for MP3 in $MP3s; do
    filename=$( basename "$PNG" )
    "$COPY_COMMAND" -resolve-src-symlinks "$MP3"  "$CONFIGURATION_BUILD_DIR/$UNLOCALIZED_RESOURCES_FOLDER_PATH"
done

PNGs=$( find ${assetsDirectory}/${targetCode}/resources${targetCode} -type f -name *.png )

for PNG in $PNGs; do
    if [ -x "$copyPNGCommand" ]; then
        filename=$( basename "$PNG" )
        "$copyPNGCommand" -compress "" "$PNG" "$CONFIGURATION_BUILD_DIR/$UNLOCALIZED_RESOURCES_FOLDER_PATH/$filename"
    else
        "$COPY_COMMAND" -resolve-src-symlinks "$PNG" "$CONFIGURATION_BUILD_DIR/$UNLOCALIZED_RESOURCES_FOLDER_PATH"
    fi
done

Plists=$( find ${assetsDirectory}/${targetCode}/resources${targetCode} -type f -name '*.plist' )

for Plist in $Plists; do
    "$XCODE_APP_SUPPORT_DIR/Plug-ins/CoreBuildTasks.xcplugin/Contents/Resources/copyplist" --convert binary1 "$Plist" --outdir "$CONFIGURATION_BUILD_DIR/$UNLOCALIZED_RESOURCES_FOLDER_PATH"
done

Примечание: copypng работает только при сборке устройства, поэтому тест

2 голосов
/ 21 октября 2009

Я не совсем так делаю, но я делаю очень похожую вещь. Я запускаю следующую команду оболочки как команду после сборки: (Я разбил ее на несколько строк, чтобы их было легче читать)

/Developer/Library/PrivateFrameworks/DevToolsCore.framework/Resources/pbxcp
   -exclude .DS_Store -exclude CVS -exclude .svn -resolve-src-symlinks
   $FOLDER $APP_FOLDER

Эта команда копирует $FOLDER в ваше приложение, а $APP_FOLDER - это местоположение (встроенной) папки .app, не проекта Xcode. Например, моя команда расширяется до

/Developer/Library/PrivateFrameworks/DevToolsCore.framework/Resources/pbxcp
   -exclude .DS_Store -exclude CVS -exclude .svn -resolve-src-symlinks
   /Users/beder/src/myproj/data
   /Users/beder/src/myproj/build-iphone/Debug-iphonesimulator/Myproj.app

(Моя система сборки использует CMake, поэтому папка .app находится в необычном месте.)

В результате получается, что папка данных копируется в папку .app (как и следовало ожидать - ../Myproj.app/data/). Это обходит копирование в XCode, но я обнаружил, что мне не нужно, чтобы папка появлялась в XCode. После каждой сборки она копирует папку, поэтому я могу использовать файлы в ней, как если бы я перетащил папку в Xcode.

Очевидно, что это не яблочный скрипт, но вы можете выполнить команду оболочки в яблочном скрипте с помощью

do shell script "whatever"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...