Xcode4:将资源复制到捆绑包的自定义任务

时间:2011-11-14 13:20:30

标签: xcode resources task

伙计,是否可以创建自定义任务来复制Xcode中的资源?

我想使用rsync而不是Xcode的内置资源复制任务。由于某种原因,Xcode不时会将修改后的资源复制到捆绑包中,因此我希望能够更好地控制此任务。

我想我需要一些指向目标包目录的魔术变量,所以我可以创建以下任务:

rsync -a $ {SRCROOT} / resources $ {PATH_TO_THE_BUNDLE} /

...但我不知道是否有这样的变量。

更新:我尝试了$ {BUILT_PRODUCTS_DIR}变量,它指向某个中间目录,而在运行时 [[NSBundle mainBundle] pathForResource:my_path ofType:nil] 返回完全不同的东西。是否有任何Xcode变量返回与NSBundle相同的结果?

2 个答案:

答案 0 :(得分:2)

是的......听起来你已经知道如何在构建方案中添加“运行脚本”操作,你可能需要的神奇变量是:

$SRCROOT - 源树的根目录

$BUILT_PRODUCTS_DIR - 构建产品最终到达目的地的复杂路径(即,是的,此变量的内容会根据您是构建Mac应用程序还是针对模拟器的iPhone应用程序而略有变化或设备)

所以......听起来你想要的是构建脚本中的"$BUILT_PRODUCTS_DIR/Contents/Resources"吗?

答案 1 :(得分:0)

要在每个目录的基础上执行此操作:

  1. 添加“运行脚本构建阶段”(编辑器>添加构建阶段>添加运行脚本构建阶段)
  2. 将以下脚本复制/粘贴到构建阶段(不要忘记在第1行设置实际路径):

  3. dirsToCopy=("path1/directory1","path2/directory2")
    
    for INPATTERN in "${dirsToCopy[@]}"; do
        INDIR=$PROJECT_DIR/$INPATTERN/*
        OUTDIR=$TARGET_BUILD_DIR/$CONTENTS_FOLDER_PATH/$INPATTERN
        cp -R $INDIR $OUTDIR
    done
    

    对于那些不习惯使用shell脚本的人:

    • 脚本第1行的路径是相对于项目目录(.xcodeproj文件所在的位置)

    • 如果需要,可以向阵列dirsToCopy添加更多(或更少)路径

    • 您可以更改要定义变量INDIR的文件模式

    • 您可以通过将for块中最后一行脚本中的标志更改为-R来更改复制的完成方式(目前,由cp引起的递归)。