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个不同颜色的文件夹,一种是蓝色的, ...
随机推荐
- JSP页面读取数据中的数据内容,出现乱码现象的解决方法
1.首先要确保JSP页面的编码已修改为“utf-8”的字符编码: 2.然后再在jsp页面上添加代码进行设置: 先用getBytes()方法读出数据,然后再new String()方法设置格式为“utf ...
- pg_receivewal实践
测试从pg_receivewal的日志中恢复从库为主库: 主从配置async模式,配置pg_receivewal接收日志pg_receivewal -D /dbaas/pg/data/pg_recei ...
- centos 7 无网络情况下,解决yum 安装依赖rpm包
方法一:在一台有网络的机器,用yum下载好所需程序,传到另外一台网络的机器上安装 yum install xtrabackup --downloadonly --downloaddir=/rpmpat ...
- python爬取b站排行榜
爬取b站排行榜并存到mysql中 目的 b站是我平时看得最多的一个网站,最近接到了一个爬虫的课设.首先要选择一个网站,并对其进行爬取,最后将该网站的数据存储并使其可视化. 网站的结构 目标网站:bil ...
- 小z的洞穴之旅 QDUOJ 并查集+连通块
小z的洞穴之旅 QDUOJ 并查集+连通块 原题链接 题意 小 z 同学在某个闲暇的周末决定去野外探险一波,结果在丛林深处中误打误撞进入了一个神秘的洞穴,虽然洞穴中光线昏暗,但小 z 凭借其敏锐的眼力 ...
- 【Qt笔记】QAction与QToolButton的关联
QAction可以理解为一个动作数据,包含了这个同坐相关的图标.文本.是否可用等数据和状态,以及连接对应的槽函数,用于执行这个动作. QToolButton则可以使用QAction对象作为后端,显示这 ...
- set(详解)
1.关于set C++ STL 之所以得到广泛的赞誉,也被很多人使用,不只是提供了像vector, string, list等方便的容器,更重要的是STL封装了许多复杂的数据结构算法和大量常用数据结构 ...
- C#导出大量数据到excel,怎么提升性能
一,要提升性能,我们先要知道耗时的地方在哪里 1,数据库查询,2,把数据组合成新集合循环嵌套太多 二,那我们怎么优化呢? 一,数据库查询,1>,数据库查询:如果数据量小,我们可以用临时datat ...
- mysql中的substring()截取字符函数
substring(参数1,参数2,参数3),其中三个参数分别表示:参数1表示需要截取的字符串,参数2表示从字符串的那个位置开始截取(字符串下标从1开始),参数3表示要截取多少位,如果不写,表示截取从 ...
- python生成图片验证码
import PIL from PIL import Image from PIL import ImageDraw,ImageFont import random def get_random_co ...