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的更多相关文章

  1. SVN版本更新后,upData工程之后,Xcode 工程文件打不开解决办法

    svn更新代码后,打开xcode工程文件,会出现  xxx..xcodeproj  cannot be opened becausethe project file cannot be parsed. ...

  2. 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 ...

  3. 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 ...

  4. Xcode 工程文件“.xcodeproj”文件夹解析

    项目.xcodeproj 文件夹底下一般有4个文件: project.pbxproj 文件 xcuserdata 文件夹 xcshareddata 文件夹 project.xcworkspace 文件 ...

  5. 关于XCode工程中PrefixHead.pch文件的使用

    1.首先先清除pch文件在工程中的作用: 存放一些全局的宏(整个项目中都用得上的宏) 用来包含一些全部的头文件(整个项目中都用得上的头文件) 能自动打开或者关闭日志输出功能 2.由于新建的XCode工 ...

  6. 多人开发Xcode工程冲突,打不开解决办法

    在公司多人协作开发,相信好多程序员都遇到非常忧伤的问题,就是工程打不开,这样就无从下手,好多程序怨只能再从代码服务器上下载一份新的代码,今天军哥教你几个小技巧,让你的bigger瞬间提升一个档次 在公 ...

  7. XcodeProj,使用Ruby更改工程文件

    利用xcodeproj修改xcode工程文件 一,Ruby基础 Ruby迭代器each.map.collect.inject each——连续访问集合的所有元素collect—-从集合中获得各个元素传 ...

  8. 【Xcode 4 无法打开 Xcode 5 DP 打开过的工程文件 解决方法】

    试用Xcode 5 DP打开现有工程文件后再用Xcode4打开后 Xcode 4 会进入崩溃模式折腾了几次发现下面的方法可以让工程文件恢复 如果在Xcode5-DP中打开过xib文件需要在侧栏中修改I ...

  9. iOS Xcode工程目录的 folder 和 group的区别(蓝色和黄色文件夹的区别)

    1. 来自 http://blog.csdn.net/fanjunxi1990/article/details/9352917 XCode工程目录里面,有时你会发现2个不同颜色的文件夹,一种是蓝色的, ...

随机推荐

  1. Java Mail 附件名太长导致接收端附件名解析出错

    问题前提:公司需要往邮件中写 excle 文件,返送成功后发现文件格式有误(如:xxxx.bat 等文件后缀),但是有些文件又不会, 后来发现是由于文件名称太长所导致. 问题原因:java mail中 ...

  2. Python 入门之流程控制语句

    Python 入门之流程控制语句 1.if判断 (1) 单 if if –-如果 if 条件: 缩进 结果 (官方推荐4个空格,或者一个tab 不能空格和tab混合使用) money = 10 pri ...

  3. python3使用hashlib进行加密

    hashlib是个专门提供hash算法的库,里面包括md5, sha1, sha224, sha256, sha384, sha512,使用非常简单.方便. MD5 MD5的全称是Message-Di ...

  4. TScreen研究(有待研究)

    先扔在这里,待研究: http://blog.csdn.net/lailai186/article/details/8141170 procedure TForm1.Button1Click(Send ...

  5. phpstorm配置成sublime的代码高亮逼格风格

    使用sublime text3的风格来编程感觉是相当逼格的,然而在php的时候还是觉得phpstorm用起来更顺手一点. 正好在phpstorm中也有配置sublime类似风格的插件,这里来教大家如何 ...

  6. CTS2018+1没去记&APIO2018+1游记

    bgm Tips:想知道为什么标题不是2019吗,请看评论区 Day -2 md上午才写一道题qwq 机房里一堆dalao都回家收东西去北京了qwq,我菜死了,cts都去不了QAQ 下午晚上也才肝了两 ...

  7. python中的面向对象和面向过程

    一.面向对象和面向过程 一.什么是面向过程 核心是过程二字:面向过程是一种流水线的工作流程,是先做什么在做什么 二.什么是面向对象 核心 是对象二字:是一种编程思想,上帝思维,一切皆对象,编程中负责调 ...

  8. windows无法安装.net framework 3.5解决方法

    windows server 12r2 或 win10 安装.netframework 3.5方法: 一. 直接在“启用或关闭windows功能”中可以启用,需联网.但是经常会出错,可能安装过程中需要 ...

  9. 四、VLC搭建rtsp服务器

    一.VLC搭建rtsp服务器 1.rtsp服务搭建 https://blz-videos.nosdn.127.net/1/OverWatch/AnimatedShots/Overwatch_Anima ...

  10. Beta冲刺-(3/3)

    这个作业属于哪个课程 https://edu.cnblogs.com/campus/xnsy/SoftwareEngineeringClass1/ 这个作业要求在哪里 https://edu.cnbl ...