【发布时间】:2013-10-17 09:20:26
【问题描述】:
我最近一直在研究 Xcode 的项目格式,并试图了解将其加载到内存中的最佳方式。作为参考,我在这个实验中使用了 Python。
我正在寻找一种简单的方法来读出项目的内容,以便可以找到磁盘上的任何文件。 (一旦我有了文件的路径,我希望能够读取和写入它们。)
Xcode 的文件格式是xcodeproj,它是一个包含多个文件的包。有趣的是project.pbxproj 文件,因为它包含您在Xcode 左侧窗格中看到的文件引用和逻辑组。我找到了一个不错的reference to for the format at monobjc.net。
pbxproj 文件本身是一个 OpenStep 属性列表。它包含一个字典,用于识别构成项目的各种文件和组。对我来说最有趣的是项目引用文件系统的方式。
您需要从该链接知道的是,每个框架、文件引用和 Xcode 项目组都由一个字典表示,该字典除其他外还有一个名为 isa 的属性,该属性指定对象的种类。每个对象也有一个唯一的标识符作为键。一些条目有路径。文件总是有它们,组有时也有。请允许我解释...
让我们以一个示例文件结构为例:
在这种情况下,我有一个名为 Characters 的文件夹,其中包含一个名为 Warlock 的文件夹。在 Xcode 内部,它看起来像这样:
我有一个名为 Characters 的组和一个名为 Warlock 的子组。本质上,我的组结构反映了我的文件结构。
在我的pbxproj 中,实际上有两种方法可以引用磁盘上的文件。名为“Characters”的组的字典表示可以具有 path 属性,该属性将指向 Characters/Warlock。 Accessories.bundle 文件的路径为Accessories.bundle。如果我拖入整个文件夹,往往会出现这种情况。
表示文件系统这种排列的第二种方式是在组的字典中没有路径属性,文件引用会有更完整的路径。如果您单独拖入每个文件,就会发生这种情况。
考虑到组关联,我正在尝试找出遍历这些文件的最佳数据结构。我希望能够读取这些文件,因此我需要获取完整的路径,即使它们与 Xcode 项目相关。
在 python 中处理字典的好方法是什么? Apple 使用什么数据结构来管理内存中的 Xcode 项目?
【问题讨论】:
-
请注意,关键不是父组是否有路径,而是文件(或子组)的
sourceTree值是<group>还是<absolute>。您可以在 GUI 中为每个文件单独选择它,您的代码将不得不处理它。
标签: python xcode data-structures xcode-project