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个不同颜色的文件夹,一种是蓝色的, ...
随机推荐
- 深入.NET平台和C#编程的错题
29)有如下C# 代码,则下面选项中说法正确的是(BC).public class A { } Person public class B : A { } StudentA a = new A( ...
- 封装 多态 类的约束 super
python面向对象的三大特性:继承,封装,多态. 1. 封装: 把很多数据封装到⼀个对象中. 把固定功能的代码封装到⼀个代码块, 函数, 对象, 打包成模块. 这都属于封装的思想. 具体的情况具体分 ...
- KMP解决最小循环节问题
# 10035. 「一本通 2.1 练习 1」Power Strings [题目描述] 给定若干个长度 $\le 10^6$ 的字符串,询问每个字符串最多是由多少个相同的子字符串重复连接而成的.如 ...
- POJ练习计划
题目链接:https://cn.vjudge.net/article/348 2019/7/24: [POJ-1423] [题解] [POJ-1503] 模板题
- css禁止鼠标双击选中文字
div{ -moz-user-select:none;/*火狐*/ -webkit-user-select:none;/*webkit浏览器*/ -ms-user-select:none;/*IE10 ...
- ubuntu install xsltproc docbook-xsl docbook-xml
问题一: $ makexsltproc --output phtml/ param.xsl ./pxml/mainbook.xmlmake: xsltproc: Command not foundma ...
- git(github)配置密钥/私钥/SSH公钥)
1.桌面右键 Git Bash Here 打开git命令行 2.ssh-keygen -t rsa -C "xxxxx@qq.com"(你的注册邮箱)enter 3.cd ~/.s ...
- ThinkPHP中的"路由"是什么意思?
路由(route)是指根据url, 分配到对应的处理程序的映射. 简单来说,就是一个路径的解析,根据客户端提交的路径,将请求解析到相应的模块/控制器/方法上. 转载自:https://blog.csd ...
- jQuery实现动态时间
<!DOCTYPE html> <html lang="zh-cn"> <head> <meta charset="UTF-8& ...
- 基于Nginx+nginx-rtmp-module+ffmpeg搭建rtmp、hls流媒体服务器
上篇文章是基于Red5与ffmpeg实现rtmp处理NVR或摄像头的监控视频处理方案,有兴趣的朋友可以查看. Nginx及nginx-rtmp-module安装 新建目录 mkdir /usr/loc ...