Xcode 5 不更新外部引用资源
自从更新至 Xcode5 后,运行 iOS 模拟器测试 cocos2d-x 项目总是不更新脚本文件,让人十分恼火。经过一番研究之后,得知这是 Xcode5 所谓的优化,Orz。
当你使用 group 方式组织项目结构而引用了外部文件夹的话,在项目 build 的时候,Xcode5 通过判断文件夹的更新日期决定是否重新复制里面的内容。这导致当你在文件夹内增加或修改文件,这些修改直接被 Xcode5 忽略——因为文件夹本身没有变化。
既然知道了问题所在,那就好办了。我们可以使用 unix 的 touch
命令,在项目 build 之前更新外部资源文件夹的时间戳即可。
可以触发执行这个命令的地方有很多,我推荐在 Product > Scheme > Edit Scheme...
对话框中的 Build > Pre-actions
这里添加。也就是在每次 Build 之前的预处理动作。
要注意的是 Provide build settings from
这里要选择你要构建的 Target
。设定的脚本如下:
touch -cm ${PROJECT_DIR}/../Resources/src ${PROJECT_DIR}/../Resources/res
其中 -cm
是 touch 的参数,c
表示如果文件(夹)不存在不需要创建,m
表示更新时间戳。
${PROJECT_DIR}
是 Xcode 提供的环境变量,代表项目所在路径,因此可以用相对路径描述我们的资源目录。以下是我的 cocos2d-x 资源结构:
.
├── Classes
├── Resources
│ ├── ...
│ ├── res
│ └── src
├── lib
├── proj.android
├── proj.ios
│ ├── ...
│ ├── HeroCards.xcodeproj ## ${PROJECT_DIR} ##
│ └── ...
└── proj.win32
若要更新的文件夹数量较多的话,可以考虑用 find 命令:
find ${PROJECT_DIR}/../Resources -type d -exec touch -cm {} \;
如此一来,Xcode5 又能按预期把文件复制到模拟器中了。其实优化后的 iOS 模拟器确实比以前快很多。
¶相似的问题及解决方案
- 解决 Xcode 5 资源文件更新后不自动复制的问题
- xcode 5 ,每次运行不clean,就不更新资源文件?
- Xcode resource groups and folder references when building for iPhone