LaunchScreen.storyboard 动态设置版本号
设置启动图的两种方式:
- 1.制作不同尺寸的静态图片
- 2.使用启动图片文件
需求:通过Launch Screen文件设置启动图,启动图上展示版本号
这个实现不难,在LaunchScreen.storyboard
文件中新增一个UILabel,通过自动布局设置其位置,并设置文字如"版本号V1.0":
但是每次升级版本号的时候都需要手动来改动LaunchScreen.storyboard
上对应版本号的文字,有没有动态设置的办法?
我们知道,通过LaunchScreen.storyboard
来设置启动图片有很多限制,如:
- 系统不能调用app中任何自定义的视图控制器去启动代码;
- 只能使用标准的UIKit类,自定义的子类则不可以使用,即如果自定义一个继承自UIViewController的子类LaunchScreenViewController来关联
LaunchScreen.storyboard
会报错; - ......
所以按照原先的思维在一个控制器类中关联设置版本的label来动态设置app的版本号,这样的想法行不通。
不过,最终找到了解决办法How do I display the CFBundleShortVersionString in my LaunchStoryboard?
实现步骤如下:
-
点击选择
Snip20170806_17.pngLaunchScreen.storyboard
文件,然后点击选中设置版本号的label,再点击右侧Show the Identity inspector
,在label属性框中输入APP_VERSION
。之后如果查看LaunchScreen.storyboard
文件(右击 --> Open As -->Source Code),对应的XML文件中将会出现一个属性为userLabel
值为APP_VERSION
的label.
Snip20170806_19.png -
点击选择工程的target,选择
Snip20170806_11.pngBuild Phases
,点击‘+’按钮,选择New Run Script Phase
,双击新增的条目重命名一个有意义的名称Update Launch Version
,然后拖动这条新增的条目放到Copy Bundle Resources
之前
Snip20170806_12.png
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
是工程的工程名
Snip20170806_20.png
至此就实现了通过Launch Screen文件动态更改版本号的功能,以后改动了Project—>Target—>General—>Identity—>Version
对应的版本号,不需要再到LaunchScreen.storyboard
文件中手动更改对应的版本号了。