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相关推荐

  1. 通过Xcodeproj深入探究Xcode工程文件 一

    前言 你是否好奇Cocoapods是如何修改掉Xcode工程的结构?你也是否曾被Xcode工程的配置文件里面杂乱的内容搞得摸不清头脑?你又是否知道Xcodeproj这个神奇的Ruby库?下面我将通过这 ...

  2. 通过Xcodeproj深入探究Xcode工程文件

    你是否好奇Cocoapods是如何修改掉Xcode工程的结构?你也是否曾被Xcode工程的配置文件里面杂乱的内容搞得摸不清头脑?你又是否知道Xcodeproj这个神奇的Ruby库?下面我将通过这个系列 ...

  3. Qt工程生成xcode工程文件

    前言 xcode 是 Mac 下重要的开发工具,若是用 Qt 开发 Mac/ios 的 App 时,可以使用 xcode 软件进行调试或者配置一些平台属性等等,毕竟是苹果自己的开发工具,使用肯定会比较 ...

  4. Xcode工程文件无法打开

    解决方法:1.对.xcodeproj 文件右键,显示包内容 2.双击打开 project.pbxproj 文件 3.找到以上类似的冲突信息(可以用commad + f 搜索) 4.删除 << ...

  5. 集成Reveal:不修改您的Xcode工程并加载Reveal

    转载于:http://support.revealapp.com/kb/getting-started/revealxcodereveal 此方法仅适用于在iOS模拟器上运行的应用. 通过不修改Xco ...

  6. 使用svn删除Xcode工程中的文件

    这个问题困扰我好久,一直觉得删除受svn管理的文件就是一个梦魇. 今天同学遇到一个文件重复定义的问题,导致整个工程无法编译,解决的办法是删除之前重复定义的文件,使用自己的命名规则来命名一个新的文件. ...

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

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

  8. Xcode 物理文件夹与工程文件夹

    在Xcode 工程中分两种文件夹:物理文件夹(如下图蓝色文件夹),工程文件夹(如下图黄色文件夹) 物理文件夹添加方法如下: 使用 pathForResource:ofType:取出物理文件夹里面的文件 ...

  9. Xcode工程,蓝色文件夹、黄色文件夹以及 .bundle文件的区别

    Xcode工程,蓝色文件夹.黄色文件夹以及 .bundle文件的区别 用过 Xcode 做过开发的应该都知道,在左边的目录索引中,有蓝色的文件夹,黄色的文件夹,还有 .bundle 文件.那么它们都有 ...

最新文章

  1. apns 服务器 php,PHP技术来查询APNs反馈服务器
  2. vue-router的两种模式(hash和history)及区别
  3. python解密md5值_Python之POST提交解密MD5
  4. Linux常用命令和服务器配置
  5. Spring Data Redis入门示例:基于RedisTemplate (三)
  6. 使用Java 8流进行快速失败的验证
  7. js php 数据类型判断,【js基础】变量类型判断
  8. 从青铜到王者的路线,java枚举类使用场景
  9. P3193 [HNOI2008]GT考试
  10. 你是怎么看待那些拿几千块钱炒股的人?
  11. ecshop数据库操作类
  12. i3 7100黑苹果_教你用2000多块装一台黑苹果主机 玩吃鸡剪视频毫无压力
  13. 一、首页、详情页、文章编辑页制作《iVX低代码/无代码个人博客制作》
  14. sap abap开发从入门到精通_云端的ABAP Restful服务开发
  15. WRF-ChemV4.0安装
  16. SPSS怎么筛选无效数据
  17. 《犯罪心理》第一至第六季 名人名言 全
  18. 为什么没有黑客攻击棋牌游戏
  19. 2022-03-25 redis组建哨兵及主从高可用的failover
  20. CCF中有关计算机网络的顶级会议和推荐期刊(2019年版本)

热门文章

  1. java斐波那契数列公式_斐波那契数列(公式)
  2. AOP-01-02 房产经纪人网络营销之博客篇
  3. Linux系统下的nobody用户与nologin
  4. China Merchants Bank Beats Rivals In Quality Of Service
  5. Hadoop常备知识点
  6. CRM的客户数据模型:Siebel Party Data Model (VI)
  7. Robust semantic segmentation by dense fusion network on blurred vhr remote sensing images
  8. php wss发送,HTTPS 连接WSS问题
  9. itunes一直显示正在验证iphone恢复_新iPhone到手了,怎样将数据资料迁移过去?
  10. THORChain被盗:黑客资金溯源报告