我最近一直在研究 Xcode 的项目格式,我试图了解将其加载到内存中的最佳方式。作为参考,我在这个实验中使用了 Python。
我正在寻找一种简单的方法来读出项目的内容,以便可以找到磁盘上的任何文件。(一旦我有了文件的路径,我希望能够读取和写入它们。)
Xcode 的文件格式是xcodeproj
,它是一个包含多个文件的包。感兴趣的是project.pbxproj
文件,因为它包含您在 Xcode 左侧窗格中看到的文件引用和逻辑组。我在 monobjc.net 找到了一个很好的格式参考。
该pbxproj
文件本身是一个 OpenStep 属性列表。它包含一个字典,用于识别构成项目的各种文件和组。对我来说最有趣的是项目引用文件系统的方式。
您需要从该链接知道的是,每个框架、文件引用和 Xcode 项目组都由一个字典表示,该字典除其他外还有一个名为的属性,该属性isa
指定对象的种类。每个对象也有一个唯一的标识符作为键。一些条目有路径。文件总是有它们,组有时也有。请允许我解释...
让我们以一个示例文件结构为例,以进行说明:
在这种情况下,我有一个名为的文件夹Characters
,其中包含一个名为Warlock
. 在 Xcode 内部,它看起来像这样:
我有一个名为的组Characters
和一个名为Warlock
. 本质上,我的组结构反映了我的文件结构。
在 mypbxproj
中,实际上有两种方法可以引用磁盘上的文件。名为“Characters”的组的字典表示可以有一个path
属性,该属性将指向 Characters/Warlock。该Accessories.bundle
文件的路径为Accessories.bundle
. 如果我拖入整个文件夹,往往会出现这种情况。
表示这种文件系统排列的第二种方法是在组的字典中没有路径属性,文件引用将具有更完整的路径。如果您单独拖入每个文件,就会发生这种情况。
考虑到组关联,我试图找出遍历这些文件的最佳数据结构。我希望能够读取文件,因此我需要获取完整的路径,即使它们与 Xcode 项目相关。
在 python 中处理字典的好方法是什么?Apple 使用什么数据结构来管理内存中的 Xcode 项目?