Pergunta

É possível adicionar uma pasta a um projeto Xcode como um grupo com Applescript, de forma recursiva adicionando tudo abaixo dela como se fosse arrastado para a lista Grupos e arquivos?

Foi útil?

Solução 2

Eu precisava de todos os arquivos em subdiretórios, além de diretórios lproj, para ser plana no pacote .app. Os ativos foram nesta estrutura:

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

Eu adicionei uma fase de construção Run Script antes "Copiar Pacote Recursos" com algo semelhante ao seguinte:

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

Nota: copypng só funciona quando a construção do dispositivo, portanto, o teste

Outras dicas

Eu não fazer exatamente isso, mas eu faço uma coisa muito similar. Eu execute o seguinte comando shell como um comando pós-build: (eu quebrei-o em várias linhas por isso é mais fácil de ler)

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

Este comando copia $FOLDER ao seu aplicativo, e $APP_FOLDER é a localização do (construído) pasta .app, não o projeto Xcode. Por exemplo, o meu comando expande para fora para

/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

(meu sistema de compilação utiliza CMake, razão pela qual a pasta .app está em um pouco de um local não convencional.)

O resultado líquido é que a pasta dados são copiados para a pasta .app (como seria de esperar - ../Myproj.app/data/). Isso ignora copiá-lo para Xcode, mas eu descobri que eu não tenho nenhuma necessidade para a pasta a aparecer em Xcode. Após cada compilação, ele copia a pasta, para que eu possa usar os arquivos nele como se tivesse arrastado a pasta para Xcode.

Obviamente, isso não é applescript, mas você pode executar um comando shell no applescript por

do shell script "whatever"
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top