如何让XCode添加构建日期&时间到Info.plist文件

时间:2011-10-30 09:39:20

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

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

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

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

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

根据那里的答案,我进入了Scheme Editor并将下面的脚本添加到Build阶段的“Post-Action”部分:

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

在XCode中,我的Scheme Editor窗口如下所示:

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

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

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

并且在写出的文件中日期显得非常好。从上面的脚本将字符串写入Info.plist文件非常好,非常烦人。

总而言之,如何将日期添加到Info.plist文件中?

3 个答案:

答案 0 :(得分:6)

啊,我应该再花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”更好支持),我会很高兴找到(当然我会接受并使用它也是出色的答案。

答案 1 :(得分:4)

迈克尔答案中的代码不正确或不再是最新的。下面的版本修复了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

注意:此更改已作为修改提交但遭到拒绝,而且我还没有足够的声誉对其回答发表评论...

答案 2 :(得分:3)

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

顺便说一句,感谢您的建议,它非常聪明且有用。