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

进入到工程根目录,在执行对应功能的脚本

  1. cd /xxx/xxx/testXcodeProj
  2. 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. Linux rsync 远程同步部署篇

    rsync官网: www.samba.org/ftp/rsync.html端口:873上机实战系列项目100台规模集群全网数据备份解决方案3.本项目提供免费实战讲解视频:Linux集群全网服务器数据备 ...

  2. 如何查看SQL Server某个存储过程的执行历史【转】

    db_name(d.database_id) as DBName, s.name as 存储名称, s.type_desc as 存储类型, d.cached_time as SP添加到缓存的时间, ...

  3. POJ 3549 GSM phone(圆+扫描线+最短路)

    题目意思是求起点s到终点s的最短路,但是只能在圆的内部和边上走.一种可以想到的方法就是求出所有的交点,然后两两连边并验证合法性,但是这样的交点数规模有n2. 我们可以观察发现,我们在圆求并构成的图形中 ...

  4. 剑指offer-二叉树中和为某一值的路径-python

    题目描述 输入一颗二叉树的跟节点和一个整数,打印出二叉树中结点值的和为输入整数的所有路径.路径定义为从树的根结点开始往下一直到叶结点所经过的结点形成一条路径.(注意: 在返回值的list中,数组长度大 ...

  5. OD消息断点

    [文章作者]: icefisher[作者邮箱]: 181712814@qq.com[软件下载]: [软件名称]: echap518.exe(只是供学习的crackme)[加壳方式]: 里面直接有个un ...

  6. Linux系统性能测试工具(五)——磁盘io性能工具之fio

    本文介绍关于Linux系统(适用于centos/ubuntu等)的磁盘io性能测试工具-fio.磁盘io性能测试工具包括: fio: dd

  7. Linux vim程序编辑器

    Tips: 在 vi 里面, [tab] 这个按钮所得到的结果与空格符所得到的结果是不一样的,特别强调一下! 一般模式 移动光标 30↓ 向下移动30行 40→ 向右移动40个字符 gg 移动到档案第 ...

  8. 企业微信的corpsecret在哪里?

      问题: 查看“企业微信”的官方开发文档,在“获取access_token”部分提到,使用GET请求方法,访问 https://qyapi.weixin.qq.com/cgi-bin/gettoke ...

  9. IsNumeric 函数

    VB IsNumeric 判断数字函数功能详解: IsNumeric 函数 函数功能:     返回 Boolean 值,指出表达式的运算结果是否为数. 函数语法:     IsNumeric (ex ...

  10. 磁盘IO性能优化-实践

    RAID卡缓存策略调整 原因详解 操作实例 I/O 调度算法 文件系统journal 磁盘挂载参数 操作实例 性能数据对比 RAID卡缓存策略调整 可以将RAID卡缓存策略由No Write Cach ...