【问题标题】:Providing custom variables for Info.plist为 Info.plist 提供自定义变量
【发布时间】:2021-11-09 09:46:14
【问题描述】:

在 Xcode 中,您可以编辑应用的 Info.plist,您会看到许多动态插入到 plist 中的变量。

在下面的截图中你可以看到例如:

  • EXECUTABLE_NAME
  • PRODUCT_BUNDLE_IDENTIFIER
  • PRODUCT_NAME

我的问题:如何创建自己的变量以包含在 plist 中?

我想将构建日期添加到 plist 中,每次 Xcode 创建新构建时都会动态生成。但是,根据上述系统提供的示例,我看不到在哪里设置动态包含的变量。

我在构建阶段尝试过export BUILD_DATE=$(date +'%Y-%m-%d'),但将$(BUILD_DATE) 作为plist 值并没有给我任何东西。

【问题讨论】:

    标签: xcode plist


    【解决方案1】:

    有两种可能的解决方案可以将键/值动态添加到 Info.plist:

    预处理 Info.plist 文件

    1. Build Settings 中将Preprocess Info.plist file 设置为Yes
    2. 然后将YourProject/Info.h设置为Info.plist Preprocessor Prefix File
    3. 创建包含下一个内容的 Info.h 文件并将其添加到您的项目中:
    #define BUILD_DATE __TIMESTAMP__
    
    1. 在 Info.plist 中创建键/值:
    BuildDateTime String BUILD_DATE
    

    现在你的 Info.plist 将在构建后有下一条记录:

    <key>BuildDateTime</key>
    <string>"Wed Nov 10 01:52:49 2021"</string>
    

    要访问构建日期字符串值,您可以使用下一个代码:

    if let date = Bundle.main.object(forInfoDictionaryKey: "BuildDateTime") as? String {
        print(date)
    }
    

    PlistBuddy

    1. 使用下一条命令在Build Phases 中创建Run Script
    /usr/libexec/PlistBuddy -c "Add :BuildDateTime date `date`" "${BUILT_PRODUCTS_DIR}/${EXECUTABLE_FOLDER_PATH}/Info.plist"
    

    现在你的 Info.plist 将在构建后有下一条记录:

    <key>BuildDateTime</key>
    <date>2021-11-09T23:59:56Z</date>
    

    要访问构建日期值,您可以使用下一个代码:

    if let date = Bundle.main.object(forInfoDictionaryKey: "BuildDateTime") as? Date {
        print(date)
    }
    

    【讨论】:

    • 哇,很棒的答案,谢谢。甚至提供代码来读取 Swift 中的值的奖励积分:)
    • 令人难以置信的是,这么简单的事情在 Xcode 中竟然如此困难......我无法让上述任何一个选项起作用。我在这上面花了几个小时......经过大量的摆弄后,第一个确实添加了构建日期,但即使在干净的构建之后它也不会改变。当我将 plistbuddy 指向 plist source (而不是编译的目标)时,第二个只对我有用,因此每次构建时它都会在 git 中显示脏?
    • 如果它对任何人都有帮助,我最终得到了一点破解,但到目前为止它已经奏效了;我一开始就使用 PlistBuddy 方法将条目添加到我的 source plist 中的运行脚本中;然后,我在最后的运行脚本中从源 plist 中删除该条目,以确保它不会在 git 中始终显示为脏。这是我能找到的唯一真正可靠地为我工作的解决方案。
    猜你喜欢
    • 2020-08-17
    • 1970-01-01
    • 2021-06-13
    • 2021-05-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-14
    • 2022-10-24
    相关资源
    最近更新 更多