自动将日期/时间和内部版本号添加到Info.plist Xcode

ecb*_*tln 8 bash xcode

我希望自动将构建日期和内部版本号添加到我的Info.plist文件中,仅用于存档iOS应用程序的构建.

我的脚本如下

#!/bin/bash
# This was taken from variations from:
# http://davedelong.com/blog/2009/04/15/incrementing-build-numbers-xcode

if [ "$CONFIGURATION" != "Release" ]
then
exit
fi


buildPlist="$SRCROOT/$PROJECT_NAME/$PROJECT_NAME-Info.plist"


# Get the existing buildVersion and buildNumber values from the buildPlist
buildVersion=$(/usr/libexec/PlistBuddy -c "Print CFBuildVersion" "$buildPlist")

buildNumber=$(/usr/libexec/PlistBuddy -c "Print CFBuildNumber" "$buildPlist")

buildDate=$(date "+%s")


# Increment the buildNumber
buildNumber=$(($buildNumber + 1))

# Set the version numbers in the buildPlist
/usr/libexec/PlistBuddy -c "Set :CFBuildNumber $buildNumber" "$buildPlist"
/usr/libexec/PlistBuddy -c  "Set :CFBuildDate $buildDate" "$buildPlist"
/usr/libexec/PlistBuddy -c "Set :CFBundleVersion $buildVersion.$buildNumber" "$buildPlist"
/usr/libexec/PlistBuddy -c "Set :CFBundleShortVersionString $buildVersion.$buildNumber" "$buildPlist"
/usr/libexec/PlistBuddy -c "Set :CFBundleLongVersionString $buildVersion.$buildNumber.$buildDate" "$buildPlist"
Run Code Online (Sandbox Code Playgroud)

这里的一切是伟大的工作,我有这个脚本运行的构建阶段在构建阶段选项卡目标相关性之后.

我唯一的问题是项目似乎是使用Info.plist的旧值而不是新的值构建的.

换句话说,如果我归档应用程序并检查生成的ipa中的Info.plist文件,它们会反映旧值.但是,查看项目中的Info.plist会显示脚本确实正确执行,但是没有及时使用旧的Info.plist构建项目.

这有什么解决方案吗?

这似乎可以相对容易地修复,但我很惊讶没有多少人在关​​于这个主题的文章中询问过这个问题.

ecb*_*tln 5

事实证明,答案非常简单明了.所有必要的是打开Info.plist预处理,然后使用__TIMESTAMP__预处理器指令.

  • 你介意分享你是怎么做到的吗?在这个问题上找不到任何可靠的文档. (8认同)

fre*_*ace 5

问题是该Info.plist文件是在其他任何操作运行之前处理的。通过检查构建日志,这涉及将其转换为二进制文件并将其放入构建目录中。

要解决此问题,版本控制脚本必须修改构建目录中的文件,而不是项目目录中的文件。构建目录中的路径Info.plist可以通过组合构建过程中设置的以下环境变量来获得:

plistpath=${BUILT_PRODUCTS_DIR}/${INFOPLIST_PATH}
Run Code Online (Sandbox Code Playgroud)

如果您现在修改该文件,$plistpath您将修改最终将打包到最终应用程序中的 plist。

我使用这种技术将构建信息获取到版本中,并将版本控制脚本作为第一个构建短语运行。