将动态内容写入xCode项目.plist

时间:2015-04-17 09:33:49

标签: ios objective-c xcode plist nsbundle

我想动态地复制/更新现有iOS应用程序.plist中的某些内容。

例如,.plist包含我想要随时更新的FacebookAppID或Twitter API密钥,而无需在商店上重新部署应用程序。

我知道我可以将.plistNSBundle复制到NSDocumentsDirectory以使其可写。 但是新复制的文件不是操作系统用来访问我需要随时更改的信息的文件。 由于SDK(FBSDK等)仅依赖于属性文件,因此我无法使用其他方式来存储我感兴趣的键/值。

有什么想法吗?

2 个答案:

答案 0 :(得分:2)

在运行时无法编辑App-Info.plist文件(请参阅this thread)。

对于Facebook SDK,您只需在App-Info.plist中设置AppID,但AppID不会每天都有变化(Twitter也是如此)。如果您需要关联其他应用,则需要推送应用更新。

如果您有多个应用程序(例如,一个用于生产,一个用于测试),请为每个应用创建多个目标,并为每个目标创建单独的.plist文件,以便您可以根据您构建的目标切换AppID。

答案 1 :(得分:0)

您无法在运行时执行此操作。

但是您可以在构建期间动态地执行此操作。

  1. 在Xcode中进入“构建设置”,将“预处理信息.plist”文件设置为“是”
  2. 将Info.plist预处理程序前缀文件转换为使用#define指令放置在项目中的.h文件。

使用.h文件包含要放入plist的值。

pmullw

然后在info.plist中,执行以下操作

#ifdef DEVELOPMENT

#define FACEBOOK_APP_ID             @"00000000"
#define FACEBOOK_APP_URL            @"fb00000000"
#define FACEBOOK_APP_NAME           @"App Display Name - Test"
#define FACEBOOK_APP_SECRET         @"abcdef00000000"

#else

#define FACEBOOK_APP_ID             @"00000001"
#define FACEBOOK_APP_URL            @"fb00000001"
#define FACEBOOK_APP_NAME           @"App Display Name"
#define FACEBOOK_APP_SECRET         @"abcdef00000001"

#endif

您无法在运行时执行此操作。但是希望这样做至少可以节省您进行项目更新的所有配置的时间。