Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/109.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 使用Swift在启动屏幕中显示应用程序版本_Ios_Swift_Uiviewcontroller_Launch Screen - Fatal编程技术网

Ios 使用Swift在启动屏幕中显示应用程序版本

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 许多应用程序都会在屏幕上显示其版本。这就是为什么我认为一定有办法做到这一点 您可以尝试使用启动

场景

我想展示用Swift制作的iOS 9应用程序的版本

我所做的

我知道如何将版本(
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”中的可访问性标识符。或者,您可以正确阅读已经给出的说明;-)一个小问题是,如果路径中有空格,则最后一行不起作用。所需要的只是最后一项的报价。