伙计,是否可以创建自定义任务来复制Xcode中的资源?
我想使用rsync而不是Xcode的内置资源复制任务。由于某种原因,Xcode不时会将修改后的资源复制到捆绑包中,因此我希望能够更好地控制此任务。
我想我需要一些指向目标包目录的魔术变量,所以我可以创建以下任务:
rsync -a $ {SRCROOT} / resources $ {PATH_TO_THE_BUNDLE} /
...但我不知道是否有这样的变量。
更新:我尝试了$ {BUILT_PRODUCTS_DIR}变量,它指向某个中间目录,而在运行时 [[NSBundle mainBundle] pathForResource:my_path ofType:nil] 返回完全不同的东西。是否有任何Xcode变量返回与NSBundle相同的结果?
答案 0 :(得分:2)
是的......听起来你已经知道如何在构建方案中添加“运行脚本”操作,你可能需要的神奇变量是:
$SRCROOT
- 源树的根目录
$BUILT_PRODUCTS_DIR
- 构建产品最终到达目的地的复杂路径(即,是的,此变量的内容会根据您是构建Mac应用程序还是针对模拟器的iPhone应用程序而略有变化或设备)
所以......听起来你想要的是构建脚本中的"$BUILT_PRODUCTS_DIR/Contents/Resources"
吗?
答案 1 :(得分:0)
要在每个目录的基础上执行此操作:
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
引起的递归)。