project.pbxproj 文件的学习

(这篇文章原来发布在 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 了。

相关文章
相关标签/搜索