Xcode工程文件pbxproj
Xcode工程文件pbxproj
Xcode会去读Project.pbxproj文件,把pbxproj转成plist文件,看起根目录结构
rootObject:指向的是我们的工程对象。(对应一个24个16进制字符,96位的UUID,具体生成规则没有确切文档说明,Xcodeproj使用的是 日期+进程ID+MAC地址组合成一个唯一ID,任何一个文件都对应一个uuid,并且一定属于某个组内,工程根目录所在组为mainGroup)
- objects:
工程中的所有配置都在这里
- archiveVersion:打包版本???
- objectVersion:Xcode兼容的版本???例如 Xcode 9.3以上兼容???官方没有具体说,参考 XcodeCompatibilityVersion枚举值。
- classes:空字段暂时不知道含义
Xcode解读工程树形结构
Xcode读取rootObject值,找到工程uuid。并在
objects对象
中寻找rootObject对象。rootObject的isa类型是PBXProject类型,表示是工程对象,我们看看工程对象的包含了哪些东西
- attributes 属性,包含一些编译器的基本信息,版本,以及项目中的target,每一个target一个UUID其中,Xcode自动创建的项目里面有三个target一个就是所要编译的APP主target,其余两个为test Target,可以看到其余两个target中有一个字段TestTargetID指向主target,可以理解为依赖相关吧
- buildConfigurationList 配置列表 指向一个配置字典 XCConfigurationList 类型类型
- compatibilityVersion (兼容版本 目前看来是 Xcode 3.2)
- developmentRegion 语言版本,English英语
- hasScannedForEncodings 是否已经扫描了文件编码信息
- knownRegions 不同区域的本地资源文件列表
mainGroup Xcode的文件组织形式,可以理解为文件层次 PBXGroup 类型
- productRefGroup 编译后的输出文件 PBXGroup 类型
- projectDirPath 项目路径
- projectRoot 项目的根目录
- targets 项目下的N个target对象 PBXNativeTarget类型
根据mainGroup的uuid找到对应的对象,Xcode打开工程对比配置
根据children中的uuid又可以找到对应的组对象,组对象又会包含其他的对象,形成树形结构
objects中包含的集合对象
PBXProject (工程包含所有信息)
PBXNativeTarget section(点击工程project那一栏)
XCBuildConfiguration (没错 这个就是我们经常看见的build Setting选项卡的内容 对应各个target的 buildSetting)
XCConfigurationList(Xcode编译模式,指向多个XCBuildConfiguration)
PBXTargetDependency
PBXBuildFile 工程构建所需要的源文件,依赖库,资源文件
PBXBuildPhase 就是Xcode中Build Phases选项卡
PBXContainerItemProxy
PBXFileElement(抽象类型,包含文件类型,组类型)
PBXTarget (编译目标对象)
Xcodeproj修改工程配置
Group的概念
group并不一定要是真实文件夹,只是Xcode用于管理文件归类的集合。也可以是真实的文件夹,我们分别创建1个虚拟组和1个真实文件夹组,看看proj文件的变化。我们发现虚拟组的group对象是没有path值的 ,真实文件夹group对象有指定path和sourceTree 来指向文件夹“实际路径”
文件也有sourceTree和path两个属性用来指定实际文件路径。
给一个实体group添加文件Demo
给一个虚拟group添加文件Demo
添加库到target
添加系统库依赖 见Demo
添加三方库依赖 见Demo
修改Build Setting 设置
编译依赖配置分为工程配置和目标对象配置。
修改目标依赖,见Demo
修改工程依赖,见Demo
整个pbxproj文件结构图
XcodeProj脚本demo
https://github.com/xiongwj0910/testXcodeProj/tree/master
脚本功能目录
添加文件到虚拟group脚本--addFileToInventedGroup.rb
添加文件到有实体文件夹的group脚本--addFileToGroup.rb
添加系统库给target脚本--addFrameWorkToTarget.rb
添加三方库给target脚本--addThirdFrameWorkToTarget.rb
进入到工程根目录,在执行对应功能的脚本
cd /xxx/xxx/testXcodeProj
ruby ./Script/addThirdFrameWorkToTarget.rb
3.参考网站
project.pbxproj结构参考 https://yulingtianxia.com/blog/2016/09/28/Let-s-Talk-About-project-pbxproj/
https://www.jianshu.com/p/e82ec6a56fc2(Xcode工程文件project.pbxproj小结)
官网结构文档 http://www.monobjc.net/xcode-project-file-format.html
https://www.jianshu.com/p/bd4e3c1a7276#(xcode工程文件格式说明 翻译官网)
https://blog.csdn.net/darya_1/article/details/78095821(xcodeproj使用心得)
Xcodeproj源码详解
https://www.jianshu.com/p/84936d9344ff(cocoapods做了什么 )
https://www.jianshu.com/p/98029cf49a69(Xcodeproj: 使用 ruby 自由的修改Xcode 工程文件)
https://blog.csdn.net/skylin19840101/article/details/64905318(各语言版本的解析库)
Xcodeproj使用参考网站 https://www.jianshu.com/p/98029cf49a69
https://blog.csdn.net/darya_1/article/details/78095821
https://www.jianshu.com/p/03a3f7eafe26
https://www.jianshu.com/p/cca701e1d87c
https://blog.csdn.net/auccy/article/details/68061889
Xcode工程文件pbxproj的更多相关文章
- SVN版本更新后,upData工程之后,Xcode 工程文件打不开解决办法
svn更新代码后,打开xcode工程文件,会出现 xxx..xcodeproj cannot be opened becausethe project file cannot be parsed. ...
- Xcode 工程文件打开不出来, cannot be opened because the project file cannot be parsed.
svn更新代码后,打开xcode工程文件,会出现 xxx..xcodeproj cannot be opened because the project file cannot be parsed ...
- Xcode工程文件打不开:cannot be opened because the project file cannot be parsed
svn更新代码后,打开xcode工程文件,会出现 xxx..xcodeproj cannot be opened because the project file cannot be parsed ...
- Xcode 工程文件“.xcodeproj”文件夹解析
项目.xcodeproj 文件夹底下一般有4个文件: project.pbxproj 文件 xcuserdata 文件夹 xcshareddata 文件夹 project.xcworkspace 文件 ...
- 关于XCode工程中PrefixHead.pch文件的使用
1.首先先清除pch文件在工程中的作用: 存放一些全局的宏(整个项目中都用得上的宏) 用来包含一些全部的头文件(整个项目中都用得上的头文件) 能自动打开或者关闭日志输出功能 2.由于新建的XCode工 ...
- 多人开发Xcode工程冲突,打不开解决办法
在公司多人协作开发,相信好多程序员都遇到非常忧伤的问题,就是工程打不开,这样就无从下手,好多程序怨只能再从代码服务器上下载一份新的代码,今天军哥教你几个小技巧,让你的bigger瞬间提升一个档次 在公 ...
- XcodeProj,使用Ruby更改工程文件
利用xcodeproj修改xcode工程文件 一,Ruby基础 Ruby迭代器each.map.collect.inject each——连续访问集合的所有元素collect—-从集合中获得各个元素传 ...
- 【Xcode 4 无法打开 Xcode 5 DP 打开过的工程文件 解决方法】
试用Xcode 5 DP打开现有工程文件后再用Xcode4打开后 Xcode 4 会进入崩溃模式折腾了几次发现下面的方法可以让工程文件恢复 如果在Xcode5-DP中打开过xib文件需要在侧栏中修改I ...
- iOS Xcode工程目录的 folder 和 group的区别(蓝色和黄色文件夹的区别)
1. 来自 http://blog.csdn.net/fanjunxi1990/article/details/9352917 XCode工程目录里面,有时你会发现2个不同颜色的文件夹,一种是蓝色的, ...
随机推荐
- 只使用非递归的mutex
mutex分为递归(以下简写为rm)和非递归(以下简写为nrm)两种,它们的唯一区别在于:同一个线程可以重复对rm加锁,但是不能重复对nrm加锁. 虽然rm使用起来要更加方便一些,并且不用考虑一个线程 ...
- linux获取外网ip
引言:目前获取ip的方法中,ifconfig和ip获取函数得到的都是内网ip.有时候需要获取外网ip,目前通用的做法,是向外部服务器发送请求,解析外部服务器响应,从而得到的自己的外网ip.linux下 ...
- PDFObject的使用(转)
1.pdfobject.js官网:https://pdfobject.com/ 2.在html文件中引入这个文件,以pdfobject.min.js为例 1 <script type=" ...
- linux:服务器代理squid安装配置
国内上往外的网站太慢,配了个香港代理服务器.如下:当前环境: centos系统.香港服务器IP(假设:59.188.71.11)检查squid是否安装:[root@localhost ~]# rpm ...
- Neo4j源代码分析
1.下载neo4j源码 https://github.com/neo4j/neo4j/ 参考文章 原文地址:https://blog.csdn.net/e15273/article/details/7 ...
- 前端开发HTML&css入门——伪类选择器和一些特殊的选择器
伪类和伪元素 有时候,你需要选择本身没有标签,但是仍然易于识别的网页部位,比如段落首行或鼠标滑过的连接.CSS为他们提供一些选择器:伪类和伪元素. 常用的一些伪类选择器: :link :visited ...
- pandas 常规操作大全
那年夏天抓住了蝉的尾巴 gitbook 前言 pandas 抓住 Series (排序的字典), DataFrame (row + 多个 Series) 对象 , 就如同 numpy 里抓住 ndar ...
- iOS手势操作,拖动,轻击,捏合,旋转,长按,自定义(http://www.cnblogs.com/huangjianwu/p/4675648.html)
1.UIGestureRecognizer 介绍 手势识别在 iOS 中非常重要,他极大地提高了移动设备的使用便捷性. iOS 系统在 3.2 以后,他提供了一些常用的手势(UIGestureReco ...
- 2019 计蒜之道 初赛 第二场 A 百度AI小课堂-矩阵问题 ( 等差数列求和公式)
题目背景 91029102 年 99 月 11 日,百度在 X 市 XX 中学举办了一场 AI 知识小课堂,本场 AI 知识小课堂老师教授了一些矩阵的相关知识,因为矩阵在 AI 人工智能中也有相当的 ...
- pipeline语法学习日记
1.pipeline 整合job的通用代码,比较基本 2.pipeline参数化构建