文档章节

project.pbxproj的配置

super_co
 super_co
发布于 2015/06/12 16:29
字数 819
阅读 11
收藏 0

pbxproj文件主要包含了以下几项主要信息

  1. 工程文件关联信息,如PBXBuildFile、PBXFileReference

  2. 组织结构分类信息,如PBXGroup

  3. 项目工程配置信息,如XCBuildConfiguration、XCConfigurationList

pbxproj文件格式既不是json也不是xml,但是网上已经开源了不少解析该文件的工具,如XcodeProjectJavaAPIpbxplorer等,通过这些工具,我们可以解析pbxproj文件从而获取工程的一些配置信息等。

由于Xcode工具的存在,我们一般不需要与pbxproj直接打交道,通过General、Build Settungs或者Info等面板,就可以完成项目工程配置信息的修改。但是,当涉及到命令行的时候,xcode就显得束手无策。最常见的比如ci的持续集成。通常情况下,大型工程一般由多个开发人员共同开发,而每一个开发人员的开发证书配置文件都有可能不同,特别是当工程中包含Today或者Watch时,配置证书的不同经常会导致ci编译的失败。此时,通过xcode几乎无法解决问题,而在ci编译前,通过修改pbxproj文件证书配置信息就能很好的解决该问题

打开pbxproj文件,涉及到证书配置文件的代码段如下

1
2
3
4
5
6
7
8
9
10
11
12
A05D02521AFFB09600011ADB  /* Debug */  = {
     isa = XCBuildConfiguration;
     buildSettings = {
            ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
            CODE_SIGN_IDENTITY =  "" ;
            INFOPLIST_FILE = Simple/Info.plist;
            LD_RUNPATH_SEARCH_PATHS =  "$(inherited) @executable_path/Frameworks" ;
            PRODUCT_NAME =  "$(TARGET_NAME)" ;
            PROVISIONING_PROFILE =  "4656b587-123a-45bc-a030-bd1a2ewqeqeq" ;
     };
     name = Debug;
};

我们需要做的就是在ci编译前用服务器上相应mobileprovision替换PROVISIONING_PROFILE后面的mobileprovision(mobileprovision文件通常以字符串命名),不幸的是,你会发现多行PROVISIONING_PROFILE,而Today和Watch与工程的证书文件都不相同,简单的字符替换已无法区别target。解决方法就是通过A05D02521AFFB09600011ADB这一串编号(姑且叫它编号吧)来区分不同的target

当工程创建的时候,每一个target都有一个相应的编号,并且不会再改变,编号后面/*Debug*/表明这一配置属于Debug Configuration,而ci集成时一般选择release或者distribution,因此,选择对应的编号,其后面的PROVISIONING_PROFILE就是我们需要修改的字符串

1
2
3
4
5
6
7
8
9
10
filepath=project.pbxproj
functhParam(){
     orgin=$(grep -i -n $1 $filepath | head -n 1 | 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
}
  
functhParam  "^.*7AD502241505A17900652731.*="  'PROVISIONING_PROFILE = "ace6cb3b-9231-498c-acad-5ea4542f53ff";'

以上脚本的功能就是查找7AD502241505A17900652731编号后面的PROVISIONING_PROFILE,并将该行替换为“ace6cb3b-9231-498c-acad-5ea4542f53ff”表示的mobileprovision配置文件

以上只是修改pbxproj文件的一个应用,如果你想一键修改工程Bundle Identifier,或者你想工程文件夹整理,修改pbxproj都是一种不错的选择,换一换思路,也许路就有了,祝大家玩的愉快!


© 著作权归作者所有

super_co
粉丝 1
博文 10
码字总数 7205
作品 1
东城
高级程序员
私信 提问
project.pbxproj 文件的学习

(这篇文章原来发布在 csdn ,现在 blog 迁移过来,并用 Markdown 重新排版以及修改) 因为项目的需求,最近学习了一下 project.pbxproj ,对于这个文件的介绍,网上有不少资料,但感觉都不甚详细...

zachwang
2017/11/29
0
0
smartsvn学习(二)如何在Xcode下使用SVN

1、Xcode4中苹果有自带的SVN软件------>Organizer------>Repositories 2、SVN checkout到本地后,删除本地file,对服务器有影响吗? 不会影响服务器,当你执行“svn update”时会zai再次被自动...

Align
2016/01/08
163
0
使用Git合成之文件冲突

用git pull(该命令抓取数据到本地分支后,会自动进行merge操作)抓取远程数据到本地进行分支合并后,出现的一些问题: Q:Xcode无法打开项目 S:在解决冲突文件时,对project.pbxproj文件的处理...

zhangjiansong0
2014/07/12
0
0
project.pbxproj 文件的组织及说明

一、Xcode Project 概念Project Xcode 中的 project 里面包含了所有的源文件、资源文件和构建一个或者多个 product 的信息。project 利用他们去编译我们所需的 product,也帮我们组织它们之间...

IT追寻者
2016/06/22
21
0
Xcode 工程文件“.xcodeproj”文件夹解析

项目.xcodeproj 文件夹底下一般有4个文件: project.pbxproj 文件 xcuserdata 文件夹 xcshareddata 文件夹 project.xcworkspace 文件夹 (这里暂不讲解) 下面主要讲解涉及到 .xcschemes 相关...

shede333
2016/02/02
3.7K
0

没有更多内容

加载失败,请刷新页面

加载更多

mysql mysql中的视图

视图是由数据库中的一个表或者多个表导出的虚拟表,方便用户操作。其内容是由查询定义。 视图是存储在数据库中的查询的sql语句。 一、创建视图 1. 查看创建视图的权限 select Select_priv,C...

edison_kwok
25分钟前
2
0
以太坊中文文档翻译-账号

本文原文链接 点击这里获取Etherscan API 中文文档(完整版) 完整内容排版更好,推荐读者前往阅读。 账号(Account) 账号及地址相关的 API,接口的参数说明请参考Etherscan API 约定, 文档中...

Tiny熊
35分钟前
2
0
Springboot 集成redis

这里只做单机版简单集成,不过为项目中使用 1.在pom文件中引入支持 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redi......

贾峰uk
今天
4
0
Qt编写安防视频监控系统4-删除视频

一、前言 一般会有两种处理方式来删除视频,一种是鼠标右键菜单,删除当前视频或者删除所有视频,一种是直接按住当前视频,移到视频通道界面以外就表示删除当前视频,这也是个比较人性化的设...

飞扬青云
今天
2
0
NCRE考试感想 三级信息安全(下)

时代的变迁 一些学科的兴起,一些学科的没落;一些职业的兴起,一些职业的没落。在2016年,新闻报道中说:国务院取消了百余项职业资格证书。一切都处于变动之中,要找到变化的规律,跟上时代...

志成就
今天
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部