【问题标题】:how to get XCode to add build date & time to Info.plist file如何让 XCode 将构建日期和时间添加到 Info.plist 文件
【发布时间】:2011-12-18 03:42:31
【问题描述】:

终于...经过几年的观看和一个月的参与,我有机会问你们一个我自己的问题。

我的老板不相信我(或任何流程)会增加内部版本号,他还希望在应用程序中加入构建日期和时间。我想把它放到通常的 Info.plist 文件中。

我发现了这个相关的问题:

Build information in iOS Application (date/time app was built)

根据那里的答案,我进入方案编辑器并将以下脚本添加到构建阶段的“操作后”部分:

infoplist="$BUILT_PRODUCTS_DIR/$INFOPLIST_PATH"
builddate=`date`
if [[ -n "$builddate" ]]; then
    defaults write "${infoplist%.plist}" BuildDate "${builddate}"
fi

在 XCode 中,我的方案编辑器窗口如下所示:


(来源:myke at maniac.deathstar.org

不幸的是,BuildDate 永远不会被写入 Info.plist。

将“${builddate}”更改为“$builddate”也不起作用。我在脚本中添加了这一行:

echo "build date is $builddate" > /tmp/result.txt

并且日期在写出的文件中看起来非常好。从上面的脚本中将字符串写入 Info.plist 文件可以正常工作,但很烦人。

那么,总结一下,如何获取要添加到Info.plist文件中的日期呢?

【问题讨论】:

  • 我没有任何问题将您的脚本用作发布操作,只是它最终使签名无效。似乎作为构建阶段而不是后期操作可以正常工作,无论您是否共享工作区,这也有利于工作。它也比 pre-action 更有效,因为 pre-action 会被对真实 info.plist 的更改所影响,从而导致构建时覆盖。

标签: shell xcode4 nsuserdefaults xcode4.2 info-plist


【解决方案1】:

我正在使用您的确切代码,但在操作前而不是操作后,并且构建产品中的 info.plist 正确报告了构建日期。换句话说,您必须在 将 info.plist 复制到构建产品之前对其进行自定义,这对我来说听起来很合理。

顺便说一句,谢谢你的建议,它非常聪明和有用。

【讨论】:

  • 如果您在预先操作中执行此操作,然后实际更新 info.plist,您的更改将在更新中得到闪电般的更新。可能无关紧要,因为 info.plist 不会更新那么多。
【解决方案2】:

啊,我应该再花 30 分钟(在我已经浪费的 2 小时的基础上)并在发布我自己的问题之前查看这个问题的答案:

Insert Subversion revision number in Xcode

这个动作后脚本可以解决问题并且对我有用:

infoplist="$BUILT_PRODUCTS_DIR/$INFOPLIST_PATH"
builddate=`date`
if [[ -n "$builddate" ]]; then
    # if BuildDateString doesn't exist, add it
    /usr/libexec/PlistBuddy -c "Add :BuildDateString string $builddate" "${infoplist}"
    # and if BuildDateString already existed, update it
    /usr/libexec/PlistBuddy -c "Set :BuildDateString $builddate" "${infoplist}"
fi

如您所见,它在那里做了一些修改(如果它不存在则添加它;之后立即设置它)。

如果有人可以使用上面的“默认写入”方法(我认为它可能比“PlistBuddy”得到更好的支持)提出解决方案,我会很高兴发现(当然我会接受并使用它更好的答案,也是)。

【讨论】:

  • defaults write 不得用于写入 plist 文件。这意味着只读取或修改用户首选项,可能使用 plist 文件来存储它们的值,但主要是默认值只是首选项,而不是你应该弄乱的文件。
【解决方案3】:

Michael 回答中的代码不正确或不再是最新的。以下版本修复了 set 语法中的一个错误,并且还支持在其中包含空格的构建路径。

infoplist="$BUILT_PRODUCTS_DIR/$INFOPLIST_PATH"
builddate=`date`
if [[ -n "$builddate" ]]; then
    # if BuildDateString doesn't exist, add it
    /usr/libexec/PlistBuddy -c "Add :BuildDateString string $builddate" "${infoplist}"
    # and if BuildDateString already existed, update it
    /usr/libexec/PlistBuddy -c "Set :BuildDateString $builddate" "${infoplist}"
fi

注意:此更改已作为编辑提交但被拒绝,我还没有足够的声誉来发表评论他的回答...

【讨论】:

  • 我认为将其添加为构建目标的构建阶段下的“运行脚本”会更安全,因为这将确保将值添加到 Info.plist 之前应用已打包和/或签名。
猜你喜欢
  • 2012-12-11
  • 1970-01-01
  • 1970-01-01
  • 2017-11-17
  • 2011-07-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-10-14
相关资源
最近更新 更多