フォルダーをApplescriptを使用してグループとしてXcodeプロジェクトに追加し、その下にあるすべてのものを、グループとファイルのリストにドラッグしたかのように再帰的に追加することはできますか?
2 に答える
私はそれを正確には行いませんが、非常に似たようなことをします。ビルド後のコマンドとして次のシェルコマンドを実行します:(読みやすくするためにいくつかの行に分割しました)
/Developer/Library/PrivateFrameworks/DevToolsCore.framework/Resources/pbxcp
-exclude .DS_Store -exclude CVS -exclude .svn -resolve-src-symlinks
$FOLDER $APP_FOLDER
このコマンドは$FOLDER
アプリにコピーされ、Xcodeプロジェクトではなく$APP_FOLDER
、 (ビルドされた).app
フォルダーの場所です。たとえば、私のコマンドは次のように展開されます
/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にドラッグしたかのようにその中のファイルを使用できます。
明らかにこれはapplescriptではありませんが、applescriptでシェルコマンドを実行できます。
do shell script "whatever"
.appバンドルでフラットにするために、lprojディレクトリを除くサブディレクトリ内のすべてのファイルが必要でした。アセットは次の構造になっています。
${assetsDir}/${targetCode}/
Icon.png
en.lproj
ja.lproj
...
*.lproj
resources{$targetCode/
Target.plist
audio/Audio.plist
*.mp3
「バンドルリソースのコピー」の前に、次のようなスクリプト実行ビルドフェーズを追加しました。
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は、デバイス用にビルドする場合にのみ機能するため、テスト