根据目标加载不同的plist

时间:2013-11-18 02:30:49

标签: ios objective-c xcode c-preprocessor plist

我认为尝试使用相同的代码库构建多个应用程序会很有趣,其中唯一的差异化数据保存在几个plist中。例如,一个plist包含一些主题信息 - 一些键/值来驱动应用程序中使用的颜色方案。我将调用此theme.plist的原始版本。

我很快就知道我应该在我的项目中创建多个目标,并且能够成功添加这些目标。每一个,通过它自己的appname-info.plist,都有一个不同的名称和包ID - 它在我的主屏幕上看到所有三个都很整洁而没有任何真正的额外工作。

但是现在他们都是完全相同的。我还没想出如何为每一个使用不同的数据集。

我的第一个想法是为每个目标创建一个文件夹 - 每个目标都有自己的主题plist theme.plist - 并以某种方式分配每个目标与不同的文件夹。但研究这个想法并没有给我带来太多的谷歌果汁。

那么多个主题文件呢?好的,到目前为止看起来更好 - 我可以为每个中的相同键创建一个app1-theme.plist和'app2-theme.plist',其中包含不同的值。 Xcode甚至允许我使用一些标志来说明哪些目标应该包含每个资源。

但我不知道如何在运行时加载适当的plist。我需要检查一些东西(捆绑ID?),然后将主题plist的相应名称分配给某些东西(什么)?

似乎这可能与#ifdef有关,无论可能是什么......?

有人可以解释我应该如何实现这一目标吗?我是在正确的轨道上吗?我很高兴有一些阅读时间,但我甚至不知道该怎么看。

2 个答案:

答案 0 :(得分:2)

你就在那里。 Xcode支持在项目中拥有多个具有相同名称的文件,一种方法是将它们存储在项目文件夹中的不同文件夹中。

不幸的是,此时Xcode不会给你很多帮助,所以在Finder中打开你的项目,为你的每个应用创建一个子文件夹,在这些文件夹中放置一个plist的副本。现在依次将每个副本添加到您的项目中,确保将每个副本添加到您的一个目标中。

您可能希望在Xcode中创建一个名为“主题文件”的组,以完全保留它们。

HTH

答案 1 :(得分:0)

你要做的事情是微不足道的。如果从项目中选择一个文件,并在实用程序区域中显示“文件检查器”(按命令选项1),您应该看到“目标成员资格”部分。将列出项目中的每个目标,旁边有一个复选框。如果选中文件和目标的复选框,则该文件将内置到该目标中。取消选中文件和目标的复选框,该文件不会复制到指定的目标(您可能需要运行一个干净的,并从目标设备中删除该应用程序,以删除以前包含的文件但您没有检查过.Xcode通常不会自动删除过去包含的内容。

您可以在捆绑包中创建一个目录,并教您的应用程序扫描该目录以获取plist文件。然后在该目录中为每个目标包含一组不同的文件,每个目标应用程序的行为都将发生变化。

相关问题