##1、Xcode Project 概念Project Xcode 中的 project 裏面包含了全部的源文件、資源文件和構建一個或者多個 product 的信息。project 利用他們去編譯咱們所需的 product,也幫咱們組織它們之間的關係。一個 project 能夠包含一個或者多個 target。project 定義了一些基本的編譯設置,每一個 target 都繼承了 project 的默認設置,每一個 target 能夠經過從新設置 target 的編譯選項來定義本身的特殊編譯選項。 一個 Xcode project 文件包含如下這些信息: 源文件引用git
源代碼,包含頭文件和實現文件 內部和外部的靜態庫和動態庫 資源文件 圖片文件 界面構建文件(nib)github
在文件結構的導航中,使用 Groups 去組織源文件 工程層級編譯配置。能夠給工程指定超過一個編譯配置,好比:編譯配置的 release 和 debug。xcode
##2、project.pbxproj 文件的查看方式 查看工程的pbxproj文件的方法:找到工程文件,也就是yourproject.xcodeproj,右鍵,顯示包內內容便可 ##3、project.pbxproj 文件的組織 pbxproj文件主要包含了如下幾項主要信息 工程文件關聯信息,如PBXBuildFile、PBXFileReference 組織結構分類信息,如PBXGroup 項目工程配置信息,如XCBuildConfiguration、XCConfigurationList這裏主要介紹項目工程配置信息。 PBXBuildFile與PBXFileReferenceapp
PBXBuildFile與PBXFileReference這兩個section保存中工程文件相關的信息:包含文件的類型,路徑,名稱等iphone
/* 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 */ui
PBXGroupdebug
這個section保存着工程文件的分組信息:分組的名稱,以及該組內含有的文件,好比下面的例子,一個EGOTableViewPullRefresh分組裏面還有一個children子分組,同時該組包含EGORefreshTableHeaderView的.h和.m兩個文件,該分組對應的相對路徑爲../Classes/EGOTableViewPullRefreshcode
E1B4A9DE12FC8B1000EB3F67 /* EGOTableViewPullRefresh / = { isa = PBXGroup; children = ( E1B4A9DF12FC8B1000EB3F67 / EGORefreshTableHeaderView.h /, E1B4A9E012FC8B1000EB3F67 / EGORefreshTableHeaderView.m /, ); name = EGOTableViewPullRefresh; path = ../Classes/EGOTableViewPullRefresh; sourceTree = "<group>"; }; / End PBXGroup section */orm
PBXNativeTargetxml
該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以及對應的配置信息就好了 ##4、project.pbxproj 文件的讀取解析 項目的github網址: https://github.com/sap-production/XcodeProjectJavaAPI