在C ++ iOS项目(或任何其他Mac OS)中,是否有一种简单的方法可以为Info.pList设置和预处理器宏形式的代码提供值?
理想情况下,我希望有类似的东西
C ++代码:
#define MY_VERSION_STRING "1.0"
的Info.plist
CFBundleVersion: ${MY_VERSION_STRING}
或者,有没有办法从c ++中的.pList获取值? (无需手动将.pList解析为xml。)
答案 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中对其进行定义。
答案 3 :(得分:0)
属性列表还可以存储数组或某些二进制数据。你是如何代表的?它非常特定于域。因此,如果您确切地知道如何在C ++中表示每种类型,则必须解析plist文件并生成C ++代码,执行预处理程序指令,或者定义数组,枚举等的代码。PlistBuddy
和plutil
工具可用,但它们可能不会有太大帮助。对我来说最简单的方法是使用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”。