我希望自动将构建日期和内部版本号添加到我的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构建项目。
这有什么解决方案吗?
这似乎可以相对容易地修复,但我很惊讶没有多少人在关于这个主题的文章中询问过这个问题。
答案 0 :(得分:5)
原来答案非常简单明了。所有必要的是打开Info.plist预处理,然后使用__TIMESTAMP__
预处理器指令。
答案 1 :(得分:3)
问题是在运行任何其他内容之前处理Info.plist
文件。从检查构建日志开始,这涉及将其转换为二进制文件并将其放在构建目录中。
要解决此问题,版本控制脚本必须修改构建目录中的文件,不项目目录中的文件。可以通过组合在构建过程中设置的以下环境变量来获取构建目录中Info.plist
的路径:
plistpath=${BUILT_PRODUCTS_DIR}/${INFOPLIST_PATH}
如果您现在在$plistpath
修改文件,您将修改最终将被打包到最终应用程序中的plist。
我使用这种技术将构建信息发布到版本中,版本控制脚本作为第一个构建短语运行。
答案 2 :(得分:0)
归档应用程序会构建应用程序,从而增加构建计数。您可以尝试在编译二进制文件之前执行该脚本(只需在Build Phases中将Run Script一直拖动)。如果这不起作用,我确信如果您要构建存档,则可以按2进行条件递增。