代码之家  ›  专栏  ›  技术社区  ›  Alastair Stuart

使用Applescript向Xcode项目递归添加资源

  •  4
  • Alastair Stuart  · 技术社区  · 16 年前

    是否可以使用Applescript将文件夹作为一个组添加到Xcode项目中,递归地将其下方的所有内容添加到组中&文件列表?

    2 回复  |  直到 16 年前
        1
  •  2
  •   Jesse Beder    16 年前

    我并没有完全那样做,但我做了一件非常相似的事情。我将以下shell命令作为编译后命令运行:(我将其分成了几行,以便更容易阅读)

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

    此命令复制 $FOLDER 到您的应用程序,以及 $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中执行shell命令:

    do shell script "whatever"
    
        2
  •  2
  •   Alastair Stuart    16 年前

    我需要子目录中的所有文件,除了lproj目录,在.app包中都是扁平的。这些资产属于以下结构:

    ${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仅在为设备构建时有效,因此测试