使用 Swift 在启动屏幕中显示应用程序版本
Show version of app in launch screen with Swift
场景
我想显示我的 iOS 9 应用程序的版本 Swift。
我做了什么
我知道如何获取版本(let version: String = NSBundle.mainBundle().infoDictionary!["CFBundleShortVersionString"] as! String
)
我的主屏幕上也有一个自定义标签。
我的问题
我现在的问题是,不允许将您自己的 UIViewController 用于初始/启动屏幕。
许多应用程序直接在该屏幕上显示其版本。这就是为什么我认为必须有一种方法可以做到这一点。
你可以试试LaunchScreen.storyboard
。尝试使用 New File -> User Interface -> Launch Screen
向您的项目添加新的 LaunchScreen
它会自动创建一个 storyboard
类型的 LaunchScreen
。然后,您可以在本节 project settings -> General
上更改初始启动屏幕:
并根据您的自定义 class
使用此 storyboard
它不允许在 LaunchScreen 中使用任何 UIViewController
因此其他应用程序所做的是在 LaunchScreen xib/Storyboard 中放置一个 UILabel
并将它们的版本号写为文本。
可能有一些解决方法,Apple 仍然不喜欢或不允许它,不要浪费时间搜索如果您尝试设置自定义 class,您将收到以下错误:
error: Illegal Configuration: Launch screens may not set custom classnames
注意: 应用程序通常会在默认启动屏幕之后直接创建另一个 LaunchScreen UIViewConttoller
,具有相同的设计并且没有动画显示,例如接收一些数据.
您可以在项目的构建阶段创建脚本。但请务必先做几件事。
转到您的 LaunchScreen.storyboard ViewController 并创建您的版本标签。确保在身份检查器窗格 -> 文档 -> 标签中将标签命名为“APP_VERSION”。
然后转到项目的构建阶段并通过单击左上角的“+”按钮创建脚本,然后从下拉菜单中选择 select“新建 运行 脚本阶段”,然后然后将其拖到“复制捆绑资源”阶段之前。
更新: 我的旧答案在最新的 Xcode 环境中不起作用。我已经修复了当前的问题并重构了脚本。当我有增量器工作时,我会更新。仅供参考,确保重新安装应用程序以显示更新的 LaunchScreen.storyboard(由于系统管理最新版本 iOS 中启动屏幕的缓存)。
这是 shell 的最终工作脚本:/bin/sh in XCode 11 (Swift 5):
# 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"
更新了@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"
场景
我想显示我的 iOS 9 应用程序的版本 Swift。
我做了什么
我知道如何获取版本(let version: String = NSBundle.mainBundle().infoDictionary!["CFBundleShortVersionString"] as! String
)
我的主屏幕上也有一个自定义标签。
我的问题
我现在的问题是,不允许将您自己的 UIViewController 用于初始/启动屏幕。
许多应用程序直接在该屏幕上显示其版本。这就是为什么我认为必须有一种方法可以做到这一点。
你可以试试LaunchScreen.storyboard
。尝试使用 New File -> User Interface -> Launch Screen
向您的项目添加新的 LaunchScreen
它会自动创建一个 storyboard
类型的 LaunchScreen
。然后,您可以在本节 project settings -> General
上更改初始启动屏幕:
并根据您的自定义 class
使用此storyboard
它不允许在 LaunchScreen 中使用任何 UIViewController
因此其他应用程序所做的是在 LaunchScreen xib/Storyboard 中放置一个 UILabel
并将它们的版本号写为文本。
可能有一些解决方法,Apple 仍然不喜欢或不允许它,不要浪费时间搜索如果您尝试设置自定义 class,您将收到以下错误:
error: Illegal Configuration: Launch screens may not set custom classnames
注意: 应用程序通常会在默认启动屏幕之后直接创建另一个 LaunchScreen UIViewConttoller
,具有相同的设计并且没有动画显示,例如接收一些数据.
您可以在项目的构建阶段创建脚本。但请务必先做几件事。
转到您的 LaunchScreen.storyboard ViewController 并创建您的版本标签。确保在身份检查器窗格 -> 文档 -> 标签中将标签命名为“APP_VERSION”。
然后转到项目的构建阶段并通过单击左上角的“+”按钮创建脚本,然后从下拉菜单中选择 select“新建 运行 脚本阶段”,然后然后将其拖到“复制捆绑资源”阶段之前。
更新: 我的旧答案在最新的 Xcode 环境中不起作用。我已经修复了当前的问题并重构了脚本。当我有增量器工作时,我会更新。仅供参考,确保重新安装应用程序以显示更新的 LaunchScreen.storyboard(由于系统管理最新版本 iOS 中启动屏幕的缓存)。
这是 shell 的最终工作脚本:/bin/sh in XCode 11 (Swift 5):
# 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"
更新了@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"