最后......经过几年的观看和一个月的参与,我有机会向你们问一个我自己的问题。
我的老板不相信我(或任何程序)增加内部版本号,他也希望有一个构建日期&时间融入应用程序。我想把它放到通常的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文件中?
答案 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 ,这对我来说听起来很合理。
顺便说一句,感谢您的建议,它非常聪明且有用。