2011-02-24 57 views
6

在C++的iOS项目(或任何其他的Mac OS),是有使二者提供给Info.plist设置的一个值的一个简单的方法,并以的形式的代码一个预处理宏?的Info.plist值作为C++的#define

理想情况下,我想有这样的事情

C++代码:

#define MY_VERSION_STRING "1.0" 

的Info.plist

CFBundleVersion: ${MY_VERSION_STRING} 

或者,有没有从获取值的方法.pList在C++中? (没有手动解析.pList为xml)

+0

Xcode支持Info.plist预处理。 – Richard 2011-06-15 16:41:12

回答

2

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

要输出从plist中的值:

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

这将工作 - 我可以添加预生成步骤来生成.h文件。干杯! – 2011-02-24 01:18:48

0

属性列表也可以存储阵列或一些二进制数据。你如何表达?它是非常特定领域的。所以,如果你确切地知道你是怎么想的每个类型在C++中表示,你必须要么解析plist文件并生成C++代码,是预处理指令,或一些代码定义数组,枚举等有可用的PlistBuddyplutil工具,但他们可能不会有太大的帮助。最简单的方法是使用perl,详见Using Perl to Manage Plist Files

祝你好运!

0

如果有人愿意做同样的事情,这是我加入到目标编译阶段前的脚本:

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

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

我知道这已经回答了,但我会加上我的两个分为后裔。正如理查德如上所述,Xcode中有预处理的Info.plist文件一对夫妇的选择 - 最相关的当前问题是“预处理Info.plist中”和“的Info.plist预处理前缀文件”。

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

1

这是不涉及PlistBuddy可言,完全使用构建设置所有容易可行的。

创建用户定义的构建设置你的项目/目标无论是在Xcode的用户界面,或者如果您熟悉xcconfig文件,你可以在一个完全文本=形式存在定义它。

  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
0

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