1

我们正在为 PhoneGap 使用新的Urban Airship iOS 插件

在插件的 plist 文件中,我们应该输入启用推送通知所需的特定于应用程序的键。

问题是我们有两个版本,免费和付费,同一个应用程序,但 plist 文件只容纳一个版本。

本质上,我们需要修改 Objective-C 代码来读取不同的 plist 值,这取决于它是免费版还是高级版。

我们目前使用相同的代码库和 Xcode 项目管理这两个版本。除非我们更改插件代码,否则我们似乎需要创建一个新的 Xcode 项目,而我们不想这样做。

我们如何调整 Urban Airship 的 Objective-C 文件以从 plsit 文件中读取不同的值?

4

1 回答 1

2

抱歉让你久等了,我想给你一个非常详细的答案,而不是昨晚匆忙:) 所以我们开始吧。

首先在您的项目中,我们需要添加一个新目标。转到您的项目设置并右键单击您的目标。单击复制。

复制你的目标。

您将获得一个可能名为 Target-copy 的新目标。您还将为该目标获得一个新的 info.plist 文件。

Xcode 会自动创建一个新的 info.plist。

接下来我们将编辑我们的专业版的内置设置。滚动或搜索并找到Apple LLVM compiler 4.0 Preprocessing。添加到您的调试和发布配置。我通常只使用简单的PRO=1. 您还需要添加PRO=0到您的 lite 版本,否则当您尝试构建该版本时它将未定义。

创建自定义 PRO 预处理器。

现在让我们看看如何添加一个自定义 plist,我相信你会需要。首先创建两个文件夹。重要的是这些是文件夹而不是组。在每个文件夹中,我们可以创建一个具有完全相同文件名的 plist。

向 Lite 目标添加一个。 向 Pro 目标添加一个

从现在开始,您可以为它们中的每一个添加一些东西。我刚刚添加了一个键property和一个值pro string/ lite string。最后到代码。在我制作的示例项目中,我简单地覆盖了viewDidLoad但显然这将在任何地方工作。由于 plist 具有相同的名称,您可以使用一行代码加载它们。它们永远不会混淆,因为它们只会被复制到各自的目标。如果你需要做基于代码级的逻辑,你可以使用PRO我们制作的预处理器。

- (void)viewDidLoad
{
    [super viewDidLoad];

    // This will load the proper plist automatically.
    NSLog(@"Plist Value: %@",[[NSDictionary dictionaryWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"Property List" ofType:@"plist"]] objectForKey:@"property"]);

    // Also remember we set up a preprocessor PRO. you can use it as well.
    if (PRO) {
        NSLog(@"Only Show for Pro");
    } else {
        NSLog(@"Only Show for Lite");
    }

    NSLog(@"This will show for both");
}

这是我用于所有 lite/pro 版本应用程序的方法,因此我可以共享一个公共代码库,而无需在项目或其他复杂系统之间复制它。到目前为止,它对我来说效果很好:) 快乐编码!

来源

想到有人可能可以使用该项目来查看,所以这里是在GitHub 上

于 2012-08-15T12:25:07.750 回答