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

问题描述 投票:0回答:5

场景

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

我做了什么

我知道如何获取版本(

let version: String = NSBundle.mainBundle().infoDictionary!["CFBundleShortVersionString"] as! String
)

我的主屏幕上还有一个自定义标签。

我的问题

我现在的问题是,不允许使用自己的 UIViewController 作为启动画面/启动屏幕。

许多应用程序都会在该屏幕上显示其版本。这就是为什么我认为必须有一种方法来做到这一点。

ios swift uiviewcontroller launch-screen
5个回答
55
投票

您可以在项目的构建阶段创建脚本。但请确保先做几件事。

转到 LaunchScreen.storyboard ViewController 并创建版本标签。确保在身份检查器窗格 -> 文档 -> 标签中将标签命名为“APP_VERSION”。

然后进入项目的构建阶段并通过单击左上角的“+”按钮创建脚本,然后从下拉菜单中选择“新建运行脚本阶段”,然后将其拖动到“复制捆绑资源”阶段之前。

更新:我的旧答案在最新的 Xcode 环境中不起作用。我已经修复了当前的问题并重构了脚本。当增量器工作时我会更新。仅供参考,请确保重新安装应用程序以显示更新后的 LaunchScreen.storyboard(由于系统在最新版本的 iOS 中管理启动屏幕的缓存)。

这是使用 shell 的最终工作脚本:XCode 11 (Swift 5):

中的 /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"

8
投票

更新了@Repose脚本

#   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"

5
投票

不允许在 LaunchScreen 中使用任何

UIViewController
,因此其他应用程序所做的就是在 LaunchScreen xib/Storyboard 中放置
UILabel
并将其版本号写为文本。

可能有一些解决方法,它仍然不是Apple的首选或允许的,不要浪费时间搜索,如果您尝试设置自定义类,您将收到以下错误:

error: Illegal Configuration: Launch screens may not set custom classnames

注意: 应用程序通常会在默认启动屏幕之后直接创建另一个 LaunchScreen

UIViewConttoller
,具有相同的设计且不带动画,例如接收一些数据。


0
投票

苹果非常擅长总是为开发者设置新的障碍。从 Xcode 14 开始,构建设置中的新设置对于 Repose 的脚本继续工作是必需的。

new build setting

Oleh Sherenhovskyi 的脚本版本不再有效,因为 Info.plist 不再包含任何版本信息。


-2
投票

你可以尝试用

LaunchScreen.storyboard
来做。尝试使用
LaunchScreen
将新的
New File -> User Interface -> Launch Screen
添加到您的项目中,它会自动创建
storyboard
类型的
LaunchScreen
。然后您可以在本节中的
project settings -> General
上更改初始启动屏幕:

enter image description here

并使用此

storyboard
与您的自定义类

© www.soinside.com 2019 - 2024. All rights reserved.