Xcode工程,蓝色文件夹、黄色文件夹以及 .bundle文件的区别
用过 Xcode 做过开发的应该都知道,在左边的目录索引中,有蓝色的文件夹,黄色的文件夹,还有 .bundle 文件。那么它们都有什么区别呢?
先做总结,再详细解释:
蓝色文件夹:
它本身会被自动添加到 Copy Bundle Resources 中,因此将会出现在 mainBundle 中
它里面的 .m 不会被添加到编译源,因此不会被编译。虽然会被拷贝到 mainBundle,但是想要访问里面的资源,例如图片,plist,那么还需要指明路径,例如 [UIImage imageNamed:@”Blue/xxx”];黄色文件夹:
首先,这个文件夹在finder中你可能看不到,甚至有可能里面的内容是来自不同的目录的!因此,一定要好好整理项目中的黄色文件夹。
它本身不会被拷贝到 mainBundle ,但是它里面的资源会被拷贝到 mainBundle 的 根目录
它里面的 .m 会被自动添加到编译源,因此会被编译。.bundle 文件
其实这个文件是一个文件夹,也叫 捆绑包。只不过被添加了扩展名,可以当做一个文件来处理。顺便提一下,工程中本身自带的一个蓝色文件夹:Assets.xcassets 会被压缩成 .car 文件,并拷贝到 mainBundle 中。
注意:
黄色文件夹 和 蓝色文件夹 有一个本质的区别!
对于蓝色文件夹,它里面的内容,在 Xcode 工程中 和 finder 中始终是一致的,因此比较好维护和管理。
对于黄色文件夹里面的内容,可以来自不同的目录,并且,在finder中这个文件夹不一定是存在的,也可以存在,但是它里面的内容,是可以不被 Xcode 引用的。
所以,我们一定要妥善处理 黄色文件夹 。尽量保证 Xcode 工程中和 finder 中保持一致。最好的做法是:
在 finder 中创建文件夹,然后拖入工程,选择 Create groups,Copy items if needed。
删除文件时,移入废纸篓;删除文件夹时,show in finder 把真正的文件夹也要删掉。
因为黄色文件夹里面其实都是类似快捷方式一样的引用而已。所以我们要避免这种情况:
在finder中,很明显,有两个文件重复了!但是,在工程中,我可以做到不出错,就是不引用其中的两个文件:
如图所示,在工程中,我只引用了 RCMessages[自定义融云消息] 文件夹下的两个文件,Model 目录下的两个文件并没有引用。所以这时候编译是完全没有问题的!
但是开发中,我们要完全避免这种状况的出现!所以我会在finder 中,删除我没有引用的两个文件。
简而言之,就是保持 工程中 和 finder 中 的文件一致。
蓝色文件夹 和 .bundle 是一样的,因此先以它为示例。
我们将一个含有 .h 和 .m 的文件夹拖入工程,用以下选项:
那么,它和它的子目录,都会成为蓝色的。
这个时候,我们打开工程配置,看一下这两个地方:
首先,我们刚才导入的 model 文件夹里面所有的 .m 文件将不会被编译,其次,这个 Model 文件夹会被拷贝到 mainBundle 中。
由此可知,假如 Model 中放有一张名为 [email protected] 和 [email protected] 的图片,那我们如果想访问,应该是 [UIImage imageNamed:@”Model/img”]; 这样访问。因为 imageNamed 默认只搜索 mainBundle,而在 mainBundle 里面,这个图片还在 Model 文件夹下。
接下来,我们来看黄色文件夹:
这个时候,我们打开工程配置,看一下这两个地方:
首先,我们刚才导入的 Resources 文件夹里面所有的 .m 文件将会被编译,所有的资源文件会被拷贝到 mainBundle 中。但其本身并不会被拷贝到 mainBundle,那么它所有的资源文件,就在 mainBundle 的根目录。
.bundle 跟蓝色文件夹是一样的,就不详细演示的,不过有一个优点,就是它可以被当做单个文件对待。
总结:
快看看你的 Copy Bundle Resources 吧!后面的数字代表 mainBundle 根目录的文件数,如果这个数字比较大,不妨将资源分类,放在蓝色文件夹 或者 .bundle 文件中,归类整理。但是要注意,访问这些资源的时候,路径不能错哦~