(这篇文章原来发布在 csdn ,如今 blog 迁移过来,并用 Markdown 从新排版以及修改)xcode
由于项目的需求,最近学习了一下 project.pbxproj ,对于这个文件的介绍,网上有很多资料,但感受都不甚详细,这里对我在学习中,学到的一些东西,稍做记录,一方面方便新学的同窗能有个了解,同时也让本身之后,有个参考。学习
xcode 将咱们对项目的配置信息,统一写到了 project.pbxproj 文件里,通常状况下,咱们是不须要直接和 project.pbxproj 打交道的,咱们经过编辑 xcode 里面的选项,如 buildsetting,general 来修改 pbxproj 文件,以下图所示:ui
可是,在一些状况下,咱们为了方便、或者为了不冲突,(尤为在多人协做的状况下),可能须要动态的修改 pbxproj 文件里面的内容,这个时候,咱们就有必要了解一些project.pbxproj 文件的构成了。
pbxproj文件主要包含了如下几项主要信息
工程文件关联信息,如 PBXBuildFile、PBXFileReference
组织结构分类信息,如 PBXGroup
项目工程配置信息,如 XCBuildConfiguration、XCConfigurationList 这里主要介绍项目工程配置信息。
查看工程的 pbxproj 文件的方法:找到工程文件,也就是 yourproject.xcodeproj,右键,显示包内内容便可。spa
XCConfigurationList.net
这个部分,主要是 target ,以及 project 的一些基本信息,一般一个 project 会对应一个或者多个 target ,而每一个 target 以及 project 自己的配置都会不一样的,相应的,在 pbxproj 文件中,须要将这几个部分区分开来。以下图:
上图是一个 demo 工程里的 XCConfigurationList。这个工程有一个 project PBXProject "NSUrlSession" ,两个 target, 分别是
PBXNativeTarget "NSUrlSession" PBXNativeTarget "NSUrlSessionTests" 每一个部分,都包含了 debug release 两部分,且都有相对应的 id。这些 uuid 是每一个target 相应的 CONFIGURATION 配置下的惟一标识。debug
XCBuildConfigurationcode
这个部分,记录了 project 以及每一个 target 具体的配置信息,以上面的例子为例,你想看知道 target NSUrlSession debug 对应的配置信息,你能够根据其相应的id(62A4BA691B8228C000568CEF),去找到其相应的配置:
buildsetting 下面保存了咱们在 xcode 的 buildsetting 里面,对该 target 的 debug 所设置的全部信息。若是你想知道每一个键值对具体对于那个选项,你能够在 buildsetting 对某一项进行更改,而后 diff 一下 pbxproj 文件便可。blog
在大体了解了pbxproj文件的结构后,你就能够开始作一些比较灵活的更改了,好比,咱们在开发过程当中,可能须要构建release、dailybuild等不一样的ipa,每一个ipa都包含不一样的provisioning文件。针对某种状况,在构建过程总,手动选择不一样的证书,显然太麻烦了,如今根据咱们上面的知识,咱们知道,咱们使用xcode对项目进行配置,全部的配置结果最终都会保存到pbxproj文件里面,一样的,provisioning选项,也保存在其中。那么,咱们在build以前,根据不一样的CONFIGURATION,修改pbxproj文件中相应的provisioning文件,就可以达到修改provisioning配置的目的,自动的实现上述过程。图片
还以上面的例子来讲,假如,我要在build以前,更改debug的provision,只须要把这个键值对改为本身但愿的样子便可。ip
如下为实现的脚本
#replace functhParam(){ orgin=$(grep -i -n $1 $filepath | head -n1 | awk -F ':''{print $1}') count=$(grep -i -A 200 $1 $filepath | grep -i -n'PROVISIONING_PROFILE' | head -n 1 |awk -F ':''{print $1}') let line=$orgin+count-1 echo $line sed -i '' $line"s/^.*/$2/g" $filepath } #Debug functhParam "^.*62A4BA691B8228C000568CEF.*="'PROVISIONING_PROFILE = "4173f94a-df88-4756-9f0e-1e40f83cdd21";'
这样,就在脚本中,将 debug 的provisioning 绑定为4173f94a-df88-4756-9f0e-1e40f83cdd21 了。