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
转载于:https://www.cnblogs.com/xiongwj0910/p/11040820.html
Xcode工程文件pbxproj相关推荐
- 通过Xcodeproj深入探究Xcode工程文件 一
前言 你是否好奇Cocoapods是如何修改掉Xcode工程的结构?你也是否曾被Xcode工程的配置文件里面杂乱的内容搞得摸不清头脑?你又是否知道Xcodeproj这个神奇的Ruby库?下面我将通过这 ...
- 通过Xcodeproj深入探究Xcode工程文件
你是否好奇Cocoapods是如何修改掉Xcode工程的结构?你也是否曾被Xcode工程的配置文件里面杂乱的内容搞得摸不清头脑?你又是否知道Xcodeproj这个神奇的Ruby库?下面我将通过这个系列 ...
- Qt工程生成xcode工程文件
前言 xcode 是 Mac 下重要的开发工具,若是用 Qt 开发 Mac/ios 的 App 时,可以使用 xcode 软件进行调试或者配置一些平台属性等等,毕竟是苹果自己的开发工具,使用肯定会比较 ...
- Xcode工程文件无法打开
解决方法:1.对.xcodeproj 文件右键,显示包内容 2.双击打开 project.pbxproj 文件 3.找到以上类似的冲突信息(可以用commad + f 搜索) 4.删除 << ...
- 集成Reveal:不修改您的Xcode工程并加载Reveal
转载于:http://support.revealapp.com/kb/getting-started/revealxcodereveal 此方法仅适用于在iOS模拟器上运行的应用. 通过不修改Xco ...
- 使用svn删除Xcode工程中的文件
这个问题困扰我好久,一直觉得删除受svn管理的文件就是一个梦魇. 今天同学遇到一个文件重复定义的问题,导致整个工程无法编译,解决的办法是删除之前重复定义的文件,使用自己的命名规则来命名一个新的文件. ...
- iOS Xcode工程目录的 folder 和 group的区别(蓝色和黄色文件夹的区别)
本文转载至 http://blog.csdn.net/fanjunxi1990/article/details/9352917 XCode工程目录里面,有时你会发现2个不同颜色的文件夹,一种是蓝色的, ...
- Xcode 物理文件夹与工程文件夹
在Xcode 工程中分两种文件夹:物理文件夹(如下图蓝色文件夹),工程文件夹(如下图黄色文件夹) 物理文件夹添加方法如下: 使用 pathForResource:ofType:取出物理文件夹里面的文件 ...
- Xcode工程,蓝色文件夹、黄色文件夹以及 .bundle文件的区别
Xcode工程,蓝色文件夹.黄色文件夹以及 .bundle文件的区别 用过 Xcode 做过开发的应该都知道,在左边的目录索引中,有蓝色的文件夹,黄色的文件夹,还有 .bundle 文件.那么它们都有 ...
最新文章
- apns 服务器 php,PHP技术来查询APNs反馈服务器
- vue-router的两种模式(hash和history)及区别
- python解密md5值_Python之POST提交解密MD5
- Linux常用命令和服务器配置
- Spring Data Redis入门示例:基于RedisTemplate (三)
- 使用Java 8流进行快速失败的验证
- js php 数据类型判断,【js基础】变量类型判断
- 从青铜到王者的路线,java枚举类使用场景
- P3193 [HNOI2008]GT考试
- 你是怎么看待那些拿几千块钱炒股的人?
- ecshop数据库操作类
- i3 7100黑苹果_教你用2000多块装一台黑苹果主机 玩吃鸡剪视频毫无压力
- 一、首页、详情页、文章编辑页制作《iVX低代码/无代码个人博客制作》
- sap abap开发从入门到精通_云端的ABAP Restful服务开发
- WRF-ChemV4.0安装
- SPSS怎么筛选无效数据
- 《犯罪心理》第一至第六季 名人名言 全
- 为什么没有黑客攻击棋牌游戏
- 2022-03-25 redis组建哨兵及主从高可用的failover
- CCF中有关计算机网络的顶级会议和推荐期刊(2019年版本)
热门文章
- java斐波那契数列公式_斐波那契数列(公式)
- AOP-01-02 房产经纪人网络营销之博客篇
- Linux系统下的nobody用户与nologin
- China Merchants Bank Beats Rivals In Quality Of Service
- Hadoop常备知识点
- CRM的客户数据模型:Siebel Party Data Model (VI)
- Robust semantic segmentation by dense fusion network on blurred vhr remote sensing images
- php wss发送,HTTPS 连接WSS问题
- itunes一直显示正在验证iphone恢复_新iPhone到手了,怎样将数据资料迁移过去?
- THORChain被盗:黑客资金溯源报告