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. JSP页面读取数据中的数据内容,出现乱码现象的解决方法

    1.首先要确保JSP页面的编码已修改为“utf-8”的字符编码: 2.然后再在jsp页面上添加代码进行设置: 先用getBytes()方法读出数据,然后再new String()方法设置格式为“utf ...

  2. pg_receivewal实践

    测试从pg_receivewal的日志中恢复从库为主库: 主从配置async模式,配置pg_receivewal接收日志pg_receivewal -D /dbaas/pg/data/pg_recei ...

  3. centos 7 无网络情况下,解决yum 安装依赖rpm包

    方法一:在一台有网络的机器,用yum下载好所需程序,传到另外一台网络的机器上安装 yum install xtrabackup --downloadonly --downloaddir=/rpmpat ...

  4. python爬取b站排行榜

    爬取b站排行榜并存到mysql中 目的 b站是我平时看得最多的一个网站,最近接到了一个爬虫的课设.首先要选择一个网站,并对其进行爬取,最后将该网站的数据存储并使其可视化. 网站的结构 目标网站:bil ...

  5. 小z的洞穴之旅 QDUOJ 并查集+连通块

    小z的洞穴之旅 QDUOJ 并查集+连通块 原题链接 题意 小 z 同学在某个闲暇的周末决定去野外探险一波,结果在丛林深处中误打误撞进入了一个神秘的洞穴,虽然洞穴中光线昏暗,但小 z 凭借其敏锐的眼力 ...

  6. 【Qt笔记】QAction与QToolButton的关联

    QAction可以理解为一个动作数据,包含了这个同坐相关的图标.文本.是否可用等数据和状态,以及连接对应的槽函数,用于执行这个动作. QToolButton则可以使用QAction对象作为后端,显示这 ...

  7. set(详解)

    1.关于set C++ STL 之所以得到广泛的赞誉,也被很多人使用,不只是提供了像vector, string, list等方便的容器,更重要的是STL封装了许多复杂的数据结构算法和大量常用数据结构 ...

  8. C#导出大量数据到excel,怎么提升性能

    一,要提升性能,我们先要知道耗时的地方在哪里 1,数据库查询,2,把数据组合成新集合循环嵌套太多 二,那我们怎么优化呢? 一,数据库查询,1>,数据库查询:如果数据量小,我们可以用临时datat ...

  9. mysql中的substring()截取字符函数

    substring(参数1,参数2,参数3),其中三个参数分别表示:参数1表示需要截取的字符串,参数2表示从字符串的那个位置开始截取(字符串下标从1开始),参数3表示要截取多少位,如果不写,表示截取从 ...

  10. python生成图片验证码

    import PIL from PIL import Image from PIL import ImageDraw,ImageFont import random def get_random_co ...