【问题标题】:Loading a different plist depending on the target根据目标加载不同的 plist
【发布时间】:2013-12-01 02:10:33
【问题描述】:

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

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

但现在它们都是相同的。我还没有弄清楚如何为每个数据使用不同的数据集。

我的第一个想法是为每个目标设置一些文件夹——每个目标都有自己的主题 plist,名为 theme.plist——并以某种方式将每个目标分配到不同的文件夹。但是研究这个想法并没有让我得到太多的谷歌果汁。

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

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

看起来这可能与#ifdef 有关,不管那可能是什么......?

有人能解释一下我应该如何实现这一目标吗?我在正确的轨道上吗?我很高兴花一些时间阅读,但我什至不知道该查找什么。

【问题讨论】:

  • 自写作以来我就想到了一个想法——也许我可以有一些便利类(类似于 Constants.h,但具有派生属性)来检查包 ID 并返回相关的 plist 路径。然后确保在整个应用程序中我始终使用 kThemePlistPath(例如)?

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


【解决方案1】:

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

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

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

HTH

【讨论】:

  • 完美。我可以为每个目标添加一个文件夹,然后将文件夹添加为一个组。
【解决方案2】:

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

您可以在您的包中创建一个目录并教您的应用程序扫描该目录中的 plist 文件。然后在该目录中为每个目标包含一组不同的文件,每个目标应用程序的行为都会改变。

【讨论】:

  • 谢谢,但我已经在问题中提到了那部分。我只在每个目标中包含正确的 plist。但是它们不能都具有相同的名称(或者可以吗?)。所以我问最好的方法是在运行时加载不同命名的 plist。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-10-21
  • 2019-07-18
  • 2011-08-02
  • 2013-03-17
  • 1970-01-01
  • 2015-01-11
  • 2019-11-03
相关资源
最近更新 更多