美文网首页iOS的日常简友们的精华iOS
LaunchScreen.storyboard 动态设置版本号

LaunchScreen.storyboard 动态设置版本号

作者: 写代码的小学生Roy | 来源:发表于2017-08-06 11:29 被阅读204次

    设置启动图的两种方式:

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

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

    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.

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

      Snip20170806_11.png
      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文件中手动更改对应的版本号了。


    LaunchScreen.storyboard的使用

    相关文章

      网友评论

      • GeniusWong:能获取其它的信息吗?
      • 0b280fdad16c:这个可以动态更改imageview的image吗?前提是imagename是存在自定义的plist里面的
      • 布带:script 的第二行sed前面应该增加一个回车,不然直接复制的话,script执行失败.
        看了原作者代码才意识到
        布带:@coderRoy 直接从网页上复制的话,他们是一行,没有换行.
        写代码的小学生Roy:特地又去验证了一下,没有问题啊

      本文标题:LaunchScreen.storyboard 动态设置版本号

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