Xcode中Compile Sources与Copy Bundle Resources的区别及Core Data模型文件放置
Compile Sources vs Copy Bundle Resources: 差异解析 & Core Data模型文件的正确放置
1. 两个Build Phases的核心区别
这俩阶段在Xcode的构建流程里干的完全是两码事:
- Compile Sources:专门处理需要编译的源代码文件。比如你的
.swift、.m文件,Xcode会调用编译器把这些人类可读的代码转换成机器能执行的二进制指令,最终打包进app或者静态库的二进制包里。简单说,就是把“写的代码”变成“机器能跑的东西”。 - Copy Bundle Resources:负责把不需要编译的资源文件原封不动地复制到app的bundle中。这些是运行时需要直接读取的原始资源,比如图片资源
.xcassets、界面文件.storyboard、配置文件.plist,还有咱们要聊的Core Data模型文件.xcdatamodeld。它们不会被编译,只是跟着app一起打包,等运行时再被框架读取。
2. Core Data模型文件该放哪个阶段?
答案很明确:必须放进Copy Bundle Resources。
原因很简单:Core Data的.xcdatamodeld本质是个资源文件,它存的是实体、属性、关系这些数据模型的定义,不是可编译的代码。当你的app(或者使用静态库的app)运行时,Core Data框架会去app的bundle里找到这个模型文件,加载它的配置来创建持久化存储协调器、托管对象上下文这些核心组件。
要是你误把它放进Compile Sources,Xcode会试图编译它——但编译器根本不认识这种文件格式,直接就会抛出编译错误,构建肯定失败。
另外补充个小细节:如果你是把Core Data模型和使用它的静态库一起加到项目里,要确保模型文件被添加到最终的app target的Copy Bundle Resources里(静态库本身不包含bundle,没法存资源),这样静态库的代码在运行时才能顺利找到模型文件。
内容的提问来源于stack exchange,提问作者Saoud Rizwan
相关产品推荐
相关产品推荐

