Ios 使用Swift在启动屏幕中显示应用程序版本
场景 我想展示用Swift制作的iOS 9应用程序的版本 我所做的 我知道如何将版本(Ios 使用Swift在启动屏幕中显示应用程序版本,ios,swift,uiviewcontroller,launch-screen,Ios,Swift,Uiviewcontroller,Launch Screen,场景 我想展示用Swift制作的iOS 9应用程序的版本 我所做的 我知道如何将版本(let version:String=NSBundle.mainBundle().infoDictionary![“CbundleShortVersionString”]as!String) 我的主屏幕上还有一个自定义标签 我的问题 我现在的问题是,不允许在启动/启动屏幕上使用您自己的UIViewController 许多应用程序都会在屏幕上显示其版本。这就是为什么我认为一定有办法做到这一点 您可以尝试使用启动
let version:String=NSBundle.mainBundle().infoDictionary![“CbundleShortVersionString”]as!String
)
我的主屏幕上还有一个自定义标签
我的问题
我现在的问题是,不允许在启动/启动屏幕上使用您自己的UIViewController
许多应用程序都会在屏幕上显示其版本。这就是为什么我认为一定有办法做到这一点 您可以尝试使用
启动屏幕.storyboard
。尝试使用新文件->用户界面->启动屏幕
向项目中添加新的启动屏幕
,它会自动创建情节提要
类型的启动屏幕
。然后,您可以在本节中的project settings->General
上更改初始启动屏幕:
并将此
序列图像板
与您的自定义类一起使用它不允许在LaunchScreen中使用任何UIViewController
,因此其他应用程序所做的是在LaunchScreen xib/序列图像板中放置一个UILabel
,并将其版本号作为文本写入
可能有一些变通方法,苹果仍然不喜欢或不允许,不要浪费时间搜索。如果您试图设置自定义类,您将出现以下错误:
error: Illegal Configuration: Launch screens may not set custom classnames
注意:应用程序通常会在默认启动屏幕之后直接创建另一个启动屏幕
UIViewContoller
,该屏幕具有相同的设计,并且不显示动画,例如用于接收一些数据。您可以在项目的构建阶段创建脚本。但要确保你先做几件事
转到LaunchScreen.storyboard ViewController并创建版本标签。确保在Identity Inspector窗格->文档->标签中将标签命名为“应用程序版本”
然后转到项目的构建阶段,通过单击左上角的“+”按钮创建脚本,然后从下拉菜单中选择“新建运行脚本阶段”,然后将其拖到“复制捆绑资源”阶段之前
更新:我以前的答案在最新的Xcode环境中不起作用。我已经修复了当前的问题并重构了脚本。当递增器工作时,我将进行更新。仅供参考,请确保重新安装应用程序以显示更新的LaunchScreen.storyboard(由于系统管理最新版本的iOS中启动屏幕的缓存)
下面是XCode 11(Swift 5)中shell:/bin/sh的最终工作脚本:
# ON/OFF Script Toggle (script ON with #, script OFF without #)
#exit 0
# App vesion / Build version constants
sourceFilePath="$PROJECT_DIR/$PROJECT_NAME/Base.lproj/LaunchScreen.storyboard"
versionNumber="$MARKETING_VERSION"
buildNumber="$CURRENT_PROJECT_VERSION"
# Output version & build numbers into a label on LaunchScreen.storyboard
sed -i .bak -e "/userLabel=\"APP_VERSION\"/s/text=\"[^\"]*\"/text=\"$versionNumber($buildNumber)\"/" "$sourceFilePath"
更新了@resose脚本
# ON/OFF Script Toggle (script ON with #, script OFF without #)
#exit 0
# Increment Build Number Bool (Increment ON with true, increment OFF with false)
shouldIncrement=true
# App vesion / Build version constants
versionNumber=$(/usr/libexec/PlistBuddy -c "Print CFBundleShortVersionString" "$INFOPLIST_FILE")
buildNumber=$(/usr/libexec/PlistBuddy -c "Print CFBundleVersion" "$INFOPLIST_FILE")
# Increment build number
if [ "$shouldIncrement" = true ]; then
buildNumber=$(($buildNumber + 1))
/usr/libexec/PlistBuddy -c "Set :CFBundleVersion $buildNumber" "$INFOPLIST_FILE"
fi
# Output version & build numbers into a label on LaunchScreen.storyboard
sed -i bak -e "/userLabel=\"APP_VERSION\"/s/text=\"[^\"]*\"/text=\"Version: $versionNumber Build: $buildNumber\"/" "$PROJECT_DIR/$PROJECT_NAME/Base.lproj/LaunchScreen.storyboard"
使用LaunchScreen.storyboard仍然不允许您使用视图控制器来动态设置应用程序版本。类似于是的,就我所知,仍然不允许。这个答案没有帮助,也没有提供解决海报问题的方法。这不应该是公认的答案。请参阅“resose”提供的答案,这应该是公认的答案。此脚本有效,应该是公认的答案+1对我有用。在构建阶段添加脚本让我大吃一惊。您必须首先单击左上角的
+
,然后从下拉菜单中选择新建运行脚本阶段。侧注:对我来说,使用project dir+plist文件的组合路径时脚本崩溃。之所以会发生这种情况,是因为${INFOPLIST_FILE}已经返回plist文件的完整路径,因此只需要一个路径。如果仔细遵循说明,该方法非常有效。有两件事让我有点困惑,那就是,构建过程中运行脚本的位置,以及将标签标识符设置为APP_VERSION,以便脚本知道要更新什么。为了防止我遇到的问题:-将“运行脚本”放在“构建阶段”中的“复制捆绑资源”之前-对于标签标识符,请确保设置为APP_版本的“Identity Inspector”中的“Document”>“label”而不是“Accessibility identifier”中的可访问性标识符。或者,您可以正确阅读已经给出的说明;-)一个小问题是,如果路径中有空格,则最后一行不起作用。所需要的只是最后一项的报价。