iOS打包脚本动态显示Version
需求
1、根据info.plist配置的版本号,显示在程序内部显示版本号
2、需要在启动页下方动态显示版本号
3、区分发布包和内测包
1、根据info.plist配置的版本号,显示在程序内部显示版本号
这个需求很简单,只需要获取到info.plist里面的版本号,我们可以放到工具类中作为一个静态方法
+(NSString*)appVersion
{
return [[NSBundle mainBundle]
objectForInfoDictionaryKey:@"CFBundleShortVersionString"];
}
拿到appVersion,想怎么处理就容易了。
需要在启动页下方动态显示版本号
要想解决这个问题,我们先调研了Launch Screen File分为两种,一种直接设置成图片,另一种是加载LaunchScreen.storyboard文件。
- 使用图片:我们直接放弃,除非用脚本动态合成图片,这个太过于复杂
- 使用LaunchScreen.storyboard文件:我们知道xib文件其实是一个xml文件,我们只需要通过某种方式,在程序编译之前用脚本把xml里面的版本信息替换掉
我们分两步走,在run script phase里面插入脚本即:
1、用脚本获取info.plist里面的版本字段
#1、用脚本获取info.plist里面的版本字段
versionNumber=$(/usr/libexec/PlistBuddy -c "Print :CFBundleShortVersionString" "./目录/info.plist");
echo $versionNumber
# PlistBuddy功能很强大,有兴趣的可以研究
2、用脚本替换掉xml里版本相关信息
#.sh
#我在LaunchScreen.storyboard里面拖了一个UILabel进去,取名为AppVersion
sed -i bak -e "/userLabel=\"AppVersion\"/s/text=\"[^\"]*\"/text=\" $versionNumber\"/" ./目录/LaunchScreen.storyboard;
在用XCode直接跑程序的时候,亲测没问题,但是用了脚本发布app,就会出现问题了。
run script phase里面的脚本会在发布脚本编译完再执行,这样就起不到作用。
解决办法,我们把脚本统一的放到外部的发布脚本里面,确保在脚本编译程序之前替换成功。
区分发布包和内测包
- 在内测包,Alpha版本的时候版本号显示为:Alpha_V20180702
- 在发布包,发布版本的时候版本号显示正常的:V1.0.1
同样的我们来分析一下任务:
1、Alpha_V20180702里面包含了固定字符串Alpha_V和一个时间串
#获取时间
versionNumber=$(date +%Y%m%d);
sed -i bak -e "/userLabel=\"AppVersion\"/s/text=\"[^\"]*\"/text=\" Alpha_V$versionNumber\"/" ./目录/LaunchScreen.storyboard;
*2、如果我们需要在程序内部使用,又不想重新写代码获取时间,这里有一个方法
- 先在目标文件中申明一个变量
const NSString *version = @"V1.1.3";
#.sh
sed -i bak -e "s/^const NSString \*version = @.*$/const NSString \*version = @\"Alpha_V$versionNumber\";/g" ./目录/AboutUsView.m;
#sed 查找以const NSString *version = @开头的并替换为const NSString *version = @"xxx";
完整代码
echo "打包模式 1-Debug/2-Release"
read debugMode
echo "打包模式 1-Alpha版本/2-发布版"
read archiveFlag
if [ "$archiveFlag" = "1" ];then
versionNumber=$(date +%Y%m%d);
sed -i bak -e "/userLabel=\"AppVersion\"/s/text=\"[^\"]*\"/text=\" Alpha_V$versionNumber\"/" ./目录/LaunchScreen.storyboard;
sed -i bak -e "s/^const NSString \*version = @.*$/const NSString \*version = @\"Alpha_V$versionNumber\";/g" ./目录/AboutUsView.m;
else
versionNumber=$(/usr/libexec/PlistBuddy -c "Print :CFBundleShortVersionString" "./目录/info.plist");
sed -i bak -e "/userLabel=\"AppVersion\"/s/text=\"[^\"]*\"/text=\"$versionNumber\"/" ./目录/LaunchScreen.storyboard;
sed -i bak -e "s/^const NSString \*version = @.*$/const NSString \*version = @\"Alpha_V$versionNumber\";/g" ./目录/AboutUsView.m;
网友评论