9

我希望自动将构建日期和构建号添加到我的 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"

这里的一切都很好,我让这个脚本在构建阶段选项卡中的目标依赖项之后作为构建阶段运行。

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

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

有什么解决办法吗?

这似乎可以相对容易地解决,但令我惊讶的是,在关于该主题的文章中没有那么多人询问这个问题。

4

3 回答 3

6

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

于 2013-01-01T18:23:11.870 回答
4

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

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

plistpath=${BUILT_PRODUCTS_DIR}/${INFOPLIST_PATH}

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

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

于 2013-09-16T22:20:39.070 回答
0

归档应用程序会构建应用程序,这会增加构建计数。您可以尝试在编译二进制文件之前执行该脚本(只需将运行脚本一直拖到构建阶段)。如果这不起作用,我敢肯定,如果您正在构建存档,则可以有条件地增加 2。

于 2012-12-25T20:14:50.080 回答