LaunchScreen xib并显示plist中的应用程序版本号

时间:2014-11-05 00:19:28

标签: ios objective-c xcode

我在Xcode中创建了一个LaunchScreen,它带有默认的应用程序标题和版权声明。但是,我想显示版本号,但我宁愿从Info.plist中提取版本号,而不是每当版本号更改时都要修改多个位置。这是可能的还是我需要放弃LaunchScreens并创建一个SplashScreenViewController来实现这个目标?

2 个答案:

答案 0 :(得分:5)

虽然它现在可以是xib而不是位图,但应用程序启动屏幕仍然无法执行任何类型的应用程序代码。它本质上是静态的。因此,无法在启动屏幕中包含plist中的版本号。除非您设法添加某种构建操作来编辑启动屏幕(无论是xib还是位图)。

答案 1 :(得分:1)

这就是我使用自定义构建规则完成的方法。基本思想是添加一个占位符字符串,该字符串将在构建过程中使用正确的版本进行替换。然后该版本将还原为占位符文本。

  1. 创建包含内容的脚本文件$PROJECT_DIR/Scripts/splash-version.sh
  2. 重要:查看XIB和PLIST路径与项目使用的路径相匹配

    #!/bin/bash
    
    xib_file="$PROJECT_DIR/Base.lproj/LaunchScreen.xib" # CHECK this path
    plist_file="$PROJECT_DIR/$TARGET_NAME.plist".       # CHECK this path
    bundle_ver=$(/usr/libexec/PlistBuddy -c "Print CFBundleVersion" "$plist_file")
    bundle_short_ver=$(/usr/libexec/PlistBuddy -c "Print CFBundleShortVersionString" "$plist_file")
    str_ver="v$bundle_short_ver($bundle_ver)". # You can edit this. Beware this is used by sed as a regex 
    placeholder_ver="#version#"                # You can edit this
    
    if [ "$1" == "set" ]; then 
        if ! grep "$placeholder_ver" "$xib_file" >/dev/null; then
            echo "Version placeholder $placeholder_ver not found in XIB file $xib_file"
            exit 1
        fi
        sed -i -e "s/$placeholder_ver/$str_ver/" "$xib_file"
    elif [ "$1" == "reset" ]; then
        sed -i -e "s/$str_ver/$placeholder_ver/" "$xib_file"
    else
        echo "syntax: $0 set | reset"
        exit 1
    fi
    
    1. 添加执行权限

    2. 在XIB文件中添加文本#version#的新标签。这是占位符字符串,将由具有正确版本的脚本替换

    3. 添加“新运行脚本阶段”并设置命令"$PROJECT_DIR/Scripts/splash-version.sh" set

    4. 在“复制捆绑资源”阶段之前移动

    5. 添加“新运行脚本阶段”并设置命令"$PROJECT_DIR/Scripts/splash-version.sh" reset

    6. 在“复制捆绑资源”阶段后移动 。此步骤将版本字符串还原为占位符字符串。