用过XCode的人都知道,XCode有一个臭名昭著的bug——除非你修改了源代码造成了重新编译,否则游戏包中的资源经常无法刷新。不管怎么运行资源都是旧的。
关于这个问题,业内有几位同行已经详细探讨过了。有几种解决方法,其中一种方法是,在运行时强制把资源删除,这样XCode会重新导入新的资源。要做到这一点就是写一个脚本,让这个脚本在XCode运行时自动执行。
“我是妖怪”兄曾经写了一个blog,来论述如何写这个脚本,我修改了一下,封装成了函数,这样做新项目时很方便。(好吧,这个是改的,叫自制工具不太好,但是系列标题又不好改。。。)
_TARGET_BUILD_CONTENTS_PATH=$TARGET_BUILD_DIR/$CONTENTS_FOLDER_PATH echo _TARGET_BUILD_CONTENTS_PATH: $_TARGET_BUILD_CONTENTS_PATH echo PWD: $PWD echo Cleaning $_TARGET_BUILD_CONTENTS_PATH/ #函数作用:刷新资源文件夹,解决xcode不能刷新资源文件夹的bug #参数1:传入要操作的文件夹 function operation_folder() { rm -fr $_TARGET_BUILD_CONTENTS_PATH/$1/* mkdir -p $_TARGET_BUILD_CONTENTS_PATH/$1/ #判断文件夹不为空,才进行复制,防止cp命令报错 DIRECTORY=$PWD/../Resources/$1/ if [ "`ls $DIRECTORY`" != "" ]; then cp -RLp $DIRECTORY/* $_TARGET_BUILD_CONTENTS_PATH/$1/ echo operation_folder:$1 completed! fi }
调用的时候,在这段代码后面接着写,函数直接后面加参数就行,比如你的Resources下面有若干子文件夹,pic,ui,sound等。如下方式调用:
operation_folder sound; operation_folder ttf; operation_folder script; operation_folder data; operation_folder pic; operation_folder ui;
然后把这个脚本加载到项目的Build Phases中。XCode每次run都会运行这个脚本。
参考文献:
确保 Xcode 每次 Build 时都自动更新资源——我是妖怪兄的原文,这篇文字的代码就是改自这里
http://dualface.github.io/blog/2013/07/31/flush-res-when-build/
XCode ios iphone 变态的资源管理——这篇文章详细论述了XCode资源更新的bug
http://www.cnblogs.com/dabaopku/archive/2012/04/11/2441679.html
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。