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. Android remote gdb

    On Android phone adb push ~/utils/android-ndk-r12b/prebuilt/android-arm64/gdbserver/gdbserver /data/ ...

  2. linux:服务器代理squid安装配置

    国内上往外的网站太慢,配了个香港代理服务器.如下:当前环境: centos系统.香港服务器IP(假设:59.188.71.11)检查squid是否安装:[root@localhost ~]# rpm ...

  3. express与koa对比

    使用体验koaconst Koa = require('koa');const app = new Koa();app.use(ctx => { ctx.body = 'Hello Koa'; ...

  4. spring多个context:property-placeholder不生效问题

    先来看下A和B两个模块,A模块和B模块都分别拥有自己的Spring XML配置,并分别拥有自己的配置文件: A模块的Spring配置文件如下: <?xml version="1.0&q ...

  5. vue中项目如何引入sass (vue-cli项目)

    1.进入项目目录 2.安装sass的依赖 npm install --save-dev sass-loader npm install --save-dev node-sass 3.在build文件夹 ...

  6. 时间戳转换日期格式 - Vue

    日常开发中经常会遇到时间相关的问题,服务端返回的数据都是以时间戳的方式,那么需要将其处理转化为对应的时间格式,具体方式如下: 一.filters 中 formatDate 方法实现 <scrip ...

  7. 七、latex中的插图

  8. mac 命令行终端 设置代理

    环境: macOS Mojave 10.14.3 iTrem 2 3.2.8 酸酸乳1.1.4.4-R8 查看自己命令行的状态 curl ip.gs 正式开始 一.首先检查自己的酸酸乳是否正常,并在高 ...

  9. mysql分组函数及其用例

    功能:用作统计使用,又称为聚合函数或统计函数或组函数 分类:sum 求和.avg 平均值.max 最大值 .min 最小值 .count 计算个数 特点: 1.sum.avg一般用于处理数值型,max ...

  10. Django视图中使用本地缓存

    Django服务器视图使用缓存可以大大减小服务器的压力,对数据实时性要求不高的场景使用缓存非常适合. 使用Django本地缓存 1. 在settings.py配置CACHES CACHES = { ' ...