【问题标题】:Info.plist value as C++ #defineInfo.plist 值作为 C++ #define
【发布时间】:2011-07-03 05:19:18
【问题描述】:

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

理想情况下,我想要这样的东西

C++ 代码:

#define MY_VERSION_STRING "1.0"

Info.pList

CFBundleVersion: ${MY_VERSION_STRING}

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

【问题讨论】:

  • Xcode 支持 Info.plist 预处理。

标签: c++ ios c-preprocessor


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    这一切都可以轻松实现,完全无需 PlistBuddy,完全使用构建设置。

    您可以在 Xcode UI 中为您的项目/目标创建用户定义的构建设置,或者如果您熟悉 xcconfig 文件,您可以在那里以完全文本 = 形式定义它。

    1. 您可以在 Xcode 或 xcconfig 文件中创建设置 MY_VERSION_STRING,并将其值 1.0 作为构建设置。
    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

    【讨论】:

      【解决方案3】:

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

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

      【讨论】:

        【解决方案4】:

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

        VERSION=`/usr/libexec/PlistBuddy -c 'Print :CFBundleVersion' Info.plist`
        
        echo "#define VERSION_STRING L\"$VERSION\"" > Version.h
        

        【讨论】:

          【解决方案5】:

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

          祝你好运!

          【讨论】:

            【解决方案6】:

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

            从 plist 中输出一个值:

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

            【讨论】:

            • 这行得通 - 我可以添加一个预构建步骤来生成 .h 文件。干杯!
            猜你喜欢
            • 2016-06-30
            • 1970-01-01
            • 2018-10-13
            • 2021-09-24
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2022-06-30
            • 2022-11-24
            相关资源
            最近更新 更多