🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
# 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