码农的世界移动开发程序员

iOS 启动页动态显示版本

2018-07-02  本文已影响12人  口子窖

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文件。

我们分两步走,在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里面的脚本会在发布脚本编译完再执行,这样就起不到作用。

解决办法,我们把脚本统一的放到外部的发布脚本里面,确保在脚本编译程序之前替换成功。

区分发布包和内测包

同样的我们来分析一下任务:

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;
上一篇 下一篇

猜你喜欢

热点阅读