iOS 启动页动态显示版本

作者: 口子窖 | 来源:发表于2018-07-02 16:43 被阅读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文件。

    • 使用图片:我们直接放弃,除非用脚本动态合成图片,这个太过于复杂
    • 使用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;
    

    相关文章

      网友评论

        本文标题:iOS 启动页动态显示版本

        本文链接:https://www.haomeiwen.com/subject/xycluftx.html