Adicionar recursos a uma Recursively Xcode Projeto com Applescript
-
22-08-2019 - |
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?
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"