我在Xcode中创建了一个LaunchScreen,它带有默认的应用程序标题和版权声明。但是,我想显示版本号,但我宁愿从Info.plist中提取版本号,而不是每当版本号更改时都要修改多个位置。这是可能的还是我需要放弃LaunchScreens并创建一个SplashScreenViewController来实现这个目标?
答案 0 :(得分:5)
虽然它现在可以是xib而不是位图,但应用程序启动屏幕仍然无法执行任何类型的应用程序代码。它本质上是静态的。因此,无法在启动屏幕中包含plist中的版本号。除非您设法添加某种构建操作来编辑启动屏幕(无论是xib还是位图)。
答案 1 :(得分:1)
这就是我使用自定义构建规则完成的方法。基本思想是添加一个占位符字符串,该字符串将在构建过程中使用正确的版本进行替换。然后该版本将还原为占位符文本。
$PROJECT_DIR/Scripts/splash-version.sh
:重要:查看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
添加执行权限
在XIB文件中添加文本#version#
的新标签。这是占位符字符串,将由具有正确版本的脚本替换
添加“新运行脚本阶段”并设置命令"$PROJECT_DIR/Scripts/splash-version.sh" set
在“复制捆绑资源”阶段>之前移动
添加“新运行脚本阶段”并设置命令"$PROJECT_DIR/Scripts/splash-version.sh" reset
在“复制捆绑资源”阶段>后移动 。此步骤将版本字符串还原为占位符字符串。