# Xcodeproject详解
[TOC]
***
一个 project 可以包含一个或者多个 target。
project 定义了一些基本的编译设置,每个 target 都继承了 project 的默认设置,每个 target 可以通过重新设置 target 的编译选项来定义自己的特殊编译选项。
一个 Xcode project 文件包含以下这些信息:
- 源文件引用
- 源代码,包含头文件和实现文件
- 内部和外部的静态库和动态库
- 资源文件
- 图片文件
- 界面构建文件(nib)
- 在文件结构的导航中,使用 Groups 去组织源文件
- 工程层级编译配置。可以给工程指定超过一个编译配置,比如:编译配置的 release 和 debug。
Target
target 定义了构造一个 product 所需的文件和编译指令。一个 target 对应于一个 product。target 就是
告诉编译系统要编译的文件和编译设置。编译指令就是根据 build settings and build phases 来确定的。
二、图解 project.pbxproj 文件
project.pbxproj 文件是 ProjectName.xcodeproj 包里面的一个配置文件,我们修改 Project 和 target 里面的配置,实际上就是修改了 project.pbxproj。
一个 Xcode 的 project.pbxproj 文件是由一个 24 位的 UUID 标识的对象值。
project.pbxproj 里面的每一种元素类型都是由 isa 来标识的。
# project.pbxproj 文件结构
```
// !$*UTF8*$!
{
archiveVersion = 1;
classes = {
};
objectVersion = 45;
objects = {
...
};
rootObject = 0867D690FE84028FC02AAC07 /* Project object */;
}
```
![](http://img.blog.csdn.net/20160603150234864)
### 1、XCConfigurationList 编译配置列表
```
DE218BE11BDB7AA7003717DF /* Build configuration list for PBXProject "ShareSDKDemo" / = {
isa = XCConfigurationList;
buildConfigurations = (
DE218C111BDB7AA7003717DF / Debug /,
DE218C121BDB7AA7003717DF / Release /,
);
defaultConfigurationIsVisible = 0;
defaultConfigurationName = Release;
};
DE218C131BDB7AA7003717DF / Build configuration list for PBXNativeTarget "ShareSDKDemo" / = {
isa = XCConfigurationList;
buildConfigurations = (
DE218C141BDB7AA7003717DF / Debug /,
DE218C151BDB7AA7003717DF / Release */,
);
defaultConfigurationIsVisible = 0;
defaultConfigurationName = Release;
};
```
### XCBuildConfiguration
XCBuildConfiguration 元素定义了编译的配置
## 2. PBXGroup
PBXGroup 这个元素下面包含了Xcode 工程的文件目录。在Xcode 文件体系里面,是使用 Group 组织管理的。
```
DE218BDD1BDB7AA7003717DF = {
isa = PBXGroup;
children = (
DE218C251BDB8836003717DF /* ShareSDK /,
DE218BE81BDB7AA7003717DF / ShareSDKDemo /,
DE218BE71BDB7AA7003717DF / Products */,
);
sourceTree = "<group>";
};
```
## 3. PBXNativeTarget
```
DE218BE51BDB7AA7003717DF /* ShareSDKDemo / = {
isa = PBXNativeTarget;
buildConfigurationList = DE218C131BDB7AA7003717DF / Build configuration list for PBXNativeTarget "ShareSDKDemo" /;
buildPhases = (
DE218BE21BDB7AA7003717DF / Sources /,
DE218BE31BDB7AA7003717DF / Frameworks /,
DE218BE41BDB7AA7003717DF / Resources /,
);
buildRules = (
);
dependencies = (
);
name = ShareSDKDemo;
productName = ShareSDKDemo;
productReference = DE218BE61BDB7AA7003717DF / ShareSDKDemo.app */;
productType = "com.apple.product-type.application";
};
```
### PBXSourcesBuildPhase
```
4DF8B22D1171CFBF0081C1DD /* Sources / = {
isa = PBXSourcesBuildPhase;
buildActionMask = 2147483647;
files = (
4DF8B23E1171D0310081C1DD / test.mm in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
```
### PBXFrameworksBuildPhase
```
4D05CA2C119304BD00125045 /* Frameworks */ = {
isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647;
files = (
);
runOnlyForDeploymentPostprocessing = 0;
};
```
## PBXResourcesBuildPhase
```
8D1107290486CEB800E47090 /* Resources / = {
isa = PBXResourcesBuildPhase;
buildActionMask = 2147483647;
files = (
535C1E1B10AB6B6300F50231 / ReadMe.txt in Resources /,
533B968312721D05005E617D / Credits.rtf in Resources /,
533B968412721D05005E617D / InfoPlist.strings in Resources /,
533B968512721D05005E617D / MainMenu.nib in Resources /,
533B968612721D05005E617D / TableEdit.nib in Resources /,
533B968712721D05005E617D / TestWindow.nib in Resources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
```
## PBXShellScriptBuildPhase
```
4D22DBAE11674009007AF714 /* ShellScript */ = {
isa = PBXShellScriptBuildPhase;
buildActionMask = 2147483647;
files = (
);
inputPaths = (
);
outputPaths = (
);
runOnlyForDeploymentPostprocessing = 0;
shellPath = /bin/sh;
shellScript = "./fix_references.sh";
};
```
## PBXHeadersBuildPhase
```
87293EBC1153C114007AFD45 /* Headers */ = {
isa = PBXHeadersBuildPhase;
buildActionMask = 2147483647;
files = (
);
runOnlyForDeploymentPostprocessing = 0;
};
```
***
# 参考资料
- GeekNickBig:Xcodeproject详解
http://blog.csdn.net/jsd0915/article/details/72819961