Xcode工程文件的格式说明
来源:互联网 发布:五线谱翻译简谱软件 编辑:程序博客网 时间:2024/06/05 05:19
简介
Xcode工程文件采用的是老式风格的plist文件(Next公司采用的格式,现在新的plist文件采用xml格式),它使用花括弧来组织结构化的数据。文件的开头是一个显式的编码信息,通常是采用utf8编码。这意味着它不支持带bom(Byte Ordering Mark)头的utf8格式文件,因为在开头的bom部分解析时就会失败。
注意: 文档以下的部分只是基于 *.pbxproj
文件和元素推断的结果。本文并不是对真实的代码做逆向的分析,因此可能有不准确的地方。
唯一标识码
文件中的每个元素均由一个96bit的唯一标识码表示,唯一标识码采用十六进制书写(对应24个字符,每个字符对应十六进制的4bit)。即使是不同的文档之间,唯一标识码依然是唯一的(和UUID的原理类似)。
Xcode生成唯一标识码的算法可能引入了日期、序列和其它一些预定义的值,但是并没有确切的文档说明具体的生成过程。一个合理的推测,跨文档的唯一标识码也基本是唯一的(应该不会出现两个不同元素对应相同唯一标识码的情绪)。
下面的链接是关于CMake对Xcode的支持的讨论(还有其它一些文章),或许可以提供一些信息:
- CMake Apple XCode support
- A brief look at the Xcode project format
- More on the Xcode project format
- Xcode project object UUIDs
元素
以下这些是工程文件中包含的元素类型:
- 根节点
- PBXBuildFile
- PBXBuildPhase
- PBXAppleScriptBuildPhase
- PBXCopyFilesBuildPhase
- PBXFrameworksBuildPhase
- PBXHeadersBuildPhase
- PBXResourcesBuildPhase
- PBXShellScriptBuildPhase
- PBXSourcesBuildPhase
- PBXContainerItemProxy
- PBXFileElement
- PBXFileReference
- PBXGroup
- PBXVariantGroup
- PBXTarget
- PBXAggregateTarget
- PBXLegacyTarget
- PBXNativeTarget
- PBXProject
- PBXTargetDependency
- XCBuildConfiguration
- XCConfigurationList
根节点
根节点包含通用的信息。
例子:
// !$*UTF8*$!{ archiveVersion = 1; classes = { }; objectVersion = 45; objects = { ... }; rootObject = 0867D690FE84028FC02AAC07 /* Project object */;}
PBXAggregateTarget
不同构建目标的集合(含依赖关系)。
例子:
4DA521A6115A00AF007C19C3 /* documentation */ = { isa = PBXAggregateTarget; buildConfigurationList = 4DA521AE115A00ED007C19C3 /* Build configuration list for PBXAggregateTarget "documentation" */; buildPhases = ( 4DA521A5115A00AF007C19C3 /* ShellScript */, ); dependencies = ( 4DA521AA115A00BC007C19C3 /* PBXTargetDependency */, ); name = documentation; productName = documentation;};
PBXBuildFile
文件元素,被PBXBuildPhase等作为文件包含或被引用的资源。
例子:
4D05CA6B1193055000125045 /* xxx.c in Sources */ = { isa = PBXBuildFile; fileRef = 4D05CA411193055000125045 /* xxx.c */;};
PBXBuildPhase
一个抽象的构建阶段,最终需有对应到具体化的构建对象。
PBXContainerItemProxy
目标对象的容器。
例子:
4D22DC0C1167C992007AF714 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 08FB7793FE84155DC02AAC07 /* Project object */; proxyType = 1; remoteGlobalIDString = 87293EBF1153C114007AFD45; remoteInfo = xxx;};
PBXCopyFilesBuildPhase
构建阶段复制文件信息。
例子:
MISSING
PBXFileElement
抽象类型,对应具体化的文件和group组元素。
PBXFileReference
用于跟踪项目引用的每一个外部文件,比如源代码文件、资源文件、库文件、生成目标文件等。
例子:
87293F901153D870007AFD45 /* monobjc.mm */ = { isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; name = monobjc.mm; path = sources/monobjc.mm; sourceTree = "";};
PBXFrameworksBuildPhase
用于framewrok构建的链接阶段。
例子:
4D05CA2C119304BD00125045 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0;};
PBXGroup
用于打组文件,或者嵌套组。
例子:
4DA521A2115A003E007C19C3 /* scripts */ = { isa = PBXGroup; children = ( 4D22DBAF116742DE007AF714 /* fix_references.sh */, 4DA521A1115A0032007C19C3 /* generate_descriptors.sh */, ); name = scripts; sourceTree = "";};
PBXHeadersBuildPhase
用于framewrok构建的链接阶段。
例子:
87293EBC1153C114007AFD45 /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0;};
PBXLegacyTarget
MISSING
PBXNativeTarget
对应生成可执行的二进制程序或库文件的本地构建目标对象。
例子:
8D1107260486CEB800E47090 /* XXX */ = { isa = PBXNativeTarget; buildConfigurationList = C01FCF4A08A954540054247B /* Build configuration list for PBXNativeTarget "XXX" */; buildPhases = ( 8D1107290486CEB800E47090 /* Resources */, 8D11072C0486CEB800E47090 /* Sources */, 8D11072E0486CEB800E47090 /* Frameworks */, ); buildRules = ( ); dependencies = ( ); name = XXX; productInstallPath = "$(HOME)/Applications"; productName = TrackIt; productReference = 8D1107320486CEB800E47090 /* XXX.app */; productType = "com.apple.product-type.application";};
PBXProject
工程,对应构建可执行的二进制目标程序或库。
例子:
29B97313FDCFA39411CA2CEA /* Project object */ = { isa = PBXProject; buildConfigurationList = C01FCF4E08A954540054247B /* Build configuration list for PBXProject "XXX" */; compatibilityVersion = "Xcode 2.4"; developmentRegion = English; hasScannedForEncodings = 1; knownRegions = ( English, Japanese, French, German, en, ); mainGroup = 29B97314FDCFA39411CA2CEA /* XXX*/; projectDirPath = ""; projectRoot = ""; targets = ( 8D1107260486CEB800E47090 /* XXX*/, );};
PBXResourcesBuildPhase
构建阶段需要复制的资源文件。
例子:
8D1107290486CEB800E47090 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( 535C1E1B10AB6B6300F50231 /* ReadMe.txt in Resources */, 533B968312721D05005E617D /* Credits.rtf in Resources */, 533B968412721D05005E617D /* InfoPlist.strings in Resources */, 533B968512721D05005E617D /* MainMenu.nib in Resources */, 533B968612721D05005E617D /* TableEdit.nib in Resources */, 533B968712721D05005E617D /* TestWindow.nib in Resources */, ); runOnlyForDeploymentPostprocessing = 0;};
PBXShellScriptBuildPhase
用于构建阶段复制资源文件的shell脚本。
例子:
4D22DBAE11674009007AF714 /* ShellScript */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "./fix_references.sh";};
PBXSourcesBuildPhase
构建阶段中编译源文件。
例子:
4DF8B22D1171CFBF0081C1DD /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( 4DF8B23E1171D0310081C1DD /* test.mm in Sources */, ); runOnlyForDeploymentPostprocessing = 0;};
PBXTarget
抽象对象,对应具体化的构建目标。
PBXTargetDependency
目标的外部依赖管理。
例子:
4D22DC0D1167C992007AF714 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = 87293EBF1153C114007AFD45 /* libXXX */; targetProxy = 4D22DC0C1167C992007AF714 /* PBXContainerItemProxy */;};
PBXVariantGroup
对不同地区资源文件的引用管理。
例子:
870C88031338A77600A69309 /* MainMenu.xib */ = { isa = PBXVariantGroup; children = ( 870C88041338A77600A69309 /* en */, ); name = MainMenu.xib; sourceTree = "";};
XCBuildConfiguration
构建配置元素。
例子:
870C88151338ABB600A69309 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { PRODUCT_NAME = "$(TARGET_NAME)"; }; name = Debug;};870C88161338ABB600A69309 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { PRODUCT_NAME = "$(TARGET_NAME)"; }; name = Release;};
XCConfigurationList
构建配置相关元素的列表。
例子:
870C87E41338A77600A69309 /* Build configuration list for PBXProject "CocoaApp" */ = { isa = XCConfigurationList; buildConfigurations = ( 870C88061338A77600A69309 /* Debug */, 870C88071338A77600A69309 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release;};
- Xcode工程文件的格式说明
- XCode的IOS工程目录结构说明
- VC++的工程文件说明
- VC++的工程文件说明
- VC++的工程文件说明
- VC++的工程文件说明
- VC 的工程文件说明
- VC++的工程文件说明
- VC++的工程文件说明
- VC++的工程文件说明
- VC++的工程文件说明
- cap文件的格式说明
- Xcode项目工程文件存放的地方
- vc6.0工程文件各种格式简单说明
- vc6.0工程文件各种格式简单说明
- VC++的工程文件说明大全
- 关于Qt的.pro工程文件说明
- VC6工程目录下的文件说明
- Searchview搜索框点击事件失效解决方案
- XSLT学习(三)value-of
- HTTP长连接与短连接
- Unity Excel 文件读取和写入
- XSLT学习(四)for-each
- Xcode工程文件的格式说明
- Jetson TX1配置 TensorFlow1.2.1
- XSLT学习(五)sort
- VS2010纯静态编译QT4.8.0,实现VS2010编译调试Qt程序,QtCreator静态发布程序
- XSLT学习(六)if
- windows下端口占用解决方法-查看和杀死占用端口进程
- 第十篇:线程模型
- 点击一个列表时,输出对应的索引
- XSLT学习(七)choose