Info.plist值为C ++ #define

时间:2011-02-24 00:52:36

标签: c++ ios c-preprocessor

在C ++ iOS项目(或任何其他Mac OS)中,是否有一种简单的方法可以为Info.pList设置和预处理器宏形式的代码提供值?

理想情况下,我希望有类似的东西

C ++代码:

#define MY_VERSION_STRING "1.0"

的Info.plist

CFBundleVersion: ${MY_VERSION_STRING}

或者,有没有办法从c ++中的.pList获取值? (无需手动将.pList解析为xml。)

6 个答案:

答案 0 :(得分:2)

可能不是最好的解决方案,但您可以在构建脚本中使用/ usr / libexec / PlistBuddy实用程序来生成包含带有从plist中提取的值的define的.h文件。

从plist输出值:

/usr/libexec/PlistBuddy -c 'Print :Path:To:Key' filename.plist

答案 1 :(得分:2)

我知道这已经得到了解答,但我会为后代加上我的两分钱。正如Richard上面提到的,Xcode有几个预处理Info.plist文件的选项 - 与当前问题最相关的是“Preprocess Info.plist”和“Info.plist Preprocessor Prefix File”。

如果您的版本信息已定义,例如ver.h,则可以包含ver.h作为前缀文件,并直接从Info.plist中引用版本宏。

答案 2 :(得分:1)

这完全可以在不涉及PlistBuddy的情况下完成,完全使用构建设置。

您可以在Xcode UI中为项目/目标创建用户定义的构建设置,或者如果您熟悉xcconfig文件,则可以在完全textual = form中对其进行定义。

  1. 您在Xcode或xcconfig文件中创建值为1.0的设置MY_VERSION_STRING作为您的构建设置。
  2. 在您的Info.plist中,您的CFBundleVersion行的值为$ {MY_VERSION_STRING}
  3. 启用Info.plist预处理
  4. 最后,使用GCC_PREPROCESSOR_DEFINITIONS构建变量。对于该构建设置,您可以指定MY_VERSION_STRING = $ {MY_VERSION_STRING}的值,这将导致您在c / c ++ / obj-c代码中使用已定义和共享的构建设置定义,就好像您已将其创建为#define < / LI>

答案 3 :(得分:0)

属性列表还可以存储数组或某些二进制数据。你是如何代表的?它非常特定于域。因此,如果您确切地知道如何在C ++中表示每种类型,则必须解析plist文件并生成C ++代码,执行预处理程序指令,或者定义数组,枚举等的代码。PlistBuddyplutil工具可用,但它们可能不会有太大帮助。对我来说最简单的方法是使用perl,有关详细信息,请参阅Using Perl to Manage Plist Files

祝你好运!

答案 4 :(得分:0)

如果有人想要做同样的事情,这是我在编译阶段之前添加到目标的脚本:

VERSION=`/usr/libexec/PlistBuddy -c 'Print :CFBundleVersion' Info.plist`

echo "#define VERSION_STRING L\"$VERSION\"" > Version.h

答案 5 :(得分:0)

如果您使用#define ...,则应使用.plist键,MY_VERSION_STRING,而不是$ {MY_VERSION_STRING}。这也适用于“Info.plist预处理器前缀文件”。在这两种情况下都不要忘记设置“Preprocess Info.plist File”。