LaunchScreen.storyboard 动态设置版本号

设置启动图的两种方式:

  • 1.制作不同尺寸的静态图片
  • 2.使用启动图片文件
需求:通过Launch Screen文件设置启动图,启动图上展示版本号

这个实现不难,在LaunchScreen.storyboard文件中新增一个UILabel,通过自动布局设置其位置,并设置文字如"版本号V1.0":

LaunchScreen.storyboard 动态设置版本号_第1张图片
Snip20170806_16.png

但是每次升级版本号的时候都需要手动来改动LaunchScreen.storyboard上对应版本号的文字,有没有动态设置的办法?

我们知道,通过LaunchScreen.storyboard来设置启动图片有很多限制,如:

  • 系统不能调用app中任何自定义的视图控制器去启动代码;
  • 只能使用标准的UIKit类,自定义的子类则不可以使用,即如果自定义一个继承自UIViewController的子类LaunchScreenViewController来关联LaunchScreen.storyboard会报错;
  • ......

所以按照原先的思维在一个控制器类中关联设置版本的label来动态设置app的版本号,这样的想法行不通。
不过,最终找到了解决办法How do I display the CFBundleShortVersionString in my LaunchStoryboard?


实现步骤如下:

  • 点击选择LaunchScreen.storyboard文件,然后点击选中设置版本号的label,再点击右侧Show the Identity inspector,在label属性框中输入APP_VERSION。之后如果查看LaunchScreen.storyboard文件(右击 --> Open As -->Source Code),对应的XML文件中将会出现一个属性为userLabel值为APP_VERSION的label.

    LaunchScreen.storyboard 动态设置版本号_第2张图片
    Snip20170806_17.png

    LaunchScreen.storyboard 动态设置版本号_第3张图片
    Snip20170806_19.png

  • 点击选择工程的target,选择Build Phases,点击‘+’按钮,选择New Run Script Phase,双击新增的条目重命名一个有意义的名称Update Launch Version,然后拖动这条新增的条目放到Copy Bundle Resources之前

    LaunchScreen.storyboard 动态设置版本号_第4张图片
    Snip20170806_11.png

    LaunchScreen.storyboard 动态设置版本号_第5张图片
    Snip20170806_12.png

    LaunchScreen.storyboard 动态设置版本号_第6张图片
    Snip20170806_13.png

  • 展开Update Launch Version,在Shell后面输入/bin/bash然后在下面输入脚本语句

versionNumber=$(/usr/libexec/PlistBuddy -c "Print :CFBundleShortVersionString" "${PROJECT_DIR}/${INFOPLIST_FILE}")
sed -i bak -e "/userLabel=\"APP_VERSION\"/s/text=\"[^\"]*\"/text=\"版本号V$versionNumber\"/" $PROJECT_DIR/ZSJW/Base.lproj/LaunchScreen.storyboard

注:脚本语句中$PROJECT_DIR/ZSJW/Base.lproj/LaunchScreen.storyboard此处的ZSJW是工程的工程名

LaunchScreen.storyboard 动态设置版本号_第7张图片
Snip20170806_20.png

至此就实现了通过Launch Screen文件动态更改版本号的功能,以后改动了Project—>Target—>General—>Identity—>Version对应的版本号,不需要再到LaunchScreen.storyboard文件中手动更改对应的版本号了。


LaunchScreen.storyboard的使用

你可能感兴趣的:(LaunchScreen.storyboard 动态设置版本号)