##一、Xcode Project 概念Project Xcode 中的 project 里面包含了所有的源文件、资源文件和构建一个或者多个 product 的信息。project 利用他们去编译我们所需的 product,也帮我们组织它们之间的关系。一个 project 可以包含一个或者多个 target。project 定义了一些基本的编译设置,每个 target 都继承了 project 的默认设置,每个 target 可以通过重新设置 target 的编译选项来定义自己的特殊编译选项。 一个 Xcode project 文件包含以下这些信息: 源文件引用
源代码,包含头文件和实现文件 内部和外部的静态库和动态库 资源文件 图片文件 界面构建文件(nib)
在文件结构的导航中,使用 Groups 去组织源文件 工程层级编译配置。可以给工程指定超过一个编译配置,比如:编译配置的 release 和 debug。
##二、project.pbxproj 文件的查看方式 查看工程的pbxproj文件的方法:找到工程文件,也就是yourproject.xcodeproj,右键,显示包内内容即可 ##三、project.pbxproj 文件的组织 pbxproj文件主要包含了以下几项主要信息 工程文件关联信息,如PBXBuildFile、PBXFileReference 组织结构分类信息,如PBXGroup 项目工程配置信息,如XCBuildConfiguration、XCConfigurationList这里主要介绍项目工程配置信息。 PBXBuildFile与PBXFileReference
PBXBuildFile与PBXFileReference这两个section保存中工程文件相关的信息:包含文件的类型,路径,名称等
/* Begin PBXBuildFile section / 2B82218D1B75AC8800BDEFB7 / Foundation.framework in Frameworks / = {isa = PBXBuildFile; fileRef = 2B82218C1B75AC8800BDEFB7 / Foundation.framework /; }; / End PBXBuildFile section / / Begin PBXFileReference section * F60CC2A014D4EA0500A005E4 /* SocketOperation.m / = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; sourceTree = <group>; }; / End PBXFileReference section */
PBXGroup
这个section保存着工程文件的分组信息:分组的名称,以及该组内含有的文件,比如下面的例子,一个EGOTableViewPullRefresh分组里面还有一个children子分组,同时该组包含EGORefreshTableHeaderView的.h和.m两个文件,该分组对应的相对路径为../Classes/EGOTableViewPullRefresh
E1B4A9DE12FC8B1000EB3F67 /* EGOTableViewPullRefresh / = { isa = PBXGroup; children = ( E1B4A9DF12FC8B1000EB3F67 / EGORefreshTableHeaderView.h /, E1B4A9E012FC8B1000EB3F67 / EGORefreshTableHeaderView.m /, ); name = EGOTableViewPullRefresh; path = ../Classes/EGOTableViewPullRefresh; sourceTree = "<group>"; }; / End PBXGroup section */
PBXNativeTarget
该section保存工程创建的target信息:包含target的对应的配置信息、创建规则、依赖、名称和类型等信息
/* Begin PBXNativeTarget section / 1D6058900D05DD3D006BFB54 / MyBaby / = { isa = PBXNativeTarget; buildConfigurationList = 1D6058960D05DD3E006BFB54 / Build configuration list for PBXNativeTarget "MyBaby" /; buildPhases = ( 1D60588D0D05DD3D006BFB54 / Resources /, 832D4F01120A6F7C001708D4 / CopyFiles /, 1D60588E0D05DD3D006BFB54 / Sources /, 1D60588F0D05DD3D006BFB54 / Frameworks /, 79289B3ECCA2441197B8D7F6 / Copy Pods Resources /, ); buildRules = ( ); dependencies = ( ); name = MyBaby; productName = WordPress; productReference = 1D6058910D05DD3D006BFB54 / My Baby.app /; productType = "com.Apple.product-type.application"; }; / End PBXNativeTarget section */
XCBuildConfiguration与XCConfigurationList
这两个section保存着工程相关的配置信息:下面对应的是debug模式下的配置信息,可以看到里面包含CODE_SIGN_IDENTITY,sdk,framework的搜索路径等信息。
/* Begin XCBuildConfiguration section / C01FCF5008A954540054247B / Release / = { isa = XCBuildConfiguration; baseConfigurationReference = EBC24772E5CD4036B5AFD803 / Pods.xcconfig /; buildSettings = { ARCHS = "$(ARCHS_STANDARD)"; CODE_SIGN_ENTITLEMENTS = ""; CODE_SIGN_IDENTITY = ""; GCC_C_LANGUAGE_STANDARD = c99; GCC_THUMB_SUPPORT = NO; GCC_WARN_ABOUT_RETURN_TYPE = YES; GCC_WARN_UNUSED_VARIABLE = YES; HEADER_SEARCH_PATHS = ""; iPhoneOS_DEPLOYMENT_TARGET = 7.0; ONLY_ACTIVE_ARCH = NO; OTHER_CFLAGS = "-Wno-format-security"; OTHER_LDFLAGS = ( "-lxml2", "-licucore", ); PROVISIONING_PROFILE = ""; SDKROOT = iphoneos; VALIDATE_PRODUCT = YES; VALID_ARCHS = "armv7 arm64 armv7s"; }; name = Release; }; / End XCBuildConfiguration section / / Begin XCConfigurationList section / C01FCF4E08A954540054247B / Build configuration list for PBXProject "MyBaby" / = { isa = XCConfigurationList; buildConfigurations = ( C01FCF4F08A954540054247B / Debug /, C01FCF5008A954540054247B / Release /, 2F30B4C10E342FDF00211B15 / Distribution /, 83D3E0201215F89F00600B4B / Beta /, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; / End XCConfigurationList section */
通过上面分析一个pbxproj文件的过程可以看出,要创建一个工程,首先需要添加相关的文件,然后设置需要生成的target以及对应的配置信息就行了 ##四、project.pbxproj 文件的读取解析 项目的github网址: