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

Tob*_*aut 5 uiviewcontroller ios swift launch-screen

脚本

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

我做了什么

我知道如何获得版本(let version: String = NSBundle.mainBundle().infoDictionary!["CFBundleShortVersionString"] as! String)

我的主屏幕上也有自定义标签.

我的问题

我现在的问题是,不允许在启动/启动屏幕上使用自己的UIViewController.

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

Rep*_*ose 36

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

转到LaunchScreen.storyboard ViewController并创建您的版本标签.确保在Identity Inspector窗格 - >文档 - >标签中将标签命名为"APP_VERSION".

然后转到项目的构建阶段并通过单击左上角的"+"按钮创建脚本,然后从下拉菜单中选择"New Run Script Phase",然后在"Copy Bundle Resources"阶段之前拖动它.

这里是shell的最终工作脚本:/ bin/sh在XCode 9(Swift 4)中:

#   ON/OFF Script Toggle (script ON with #, script OFF without #)
#exit 0

#   Increment build number
buildNumber=$(/usr/libexec/PlistBuddy -c "Print CFBundleVersion" "${PROJECT_DIR}/${INFOPLIST_FILE}")
buildNumber=$(($buildNumber + 1))
/usr/libexec/PlistBuddy -c "Set :CFBundleVersion $buildNumber" "${PROJECT_DIR}/${INFOPLIST_FILE}"

#   Output version & build numbers into a label on LaunchScreen.storyboard
versionNumber=$(/usr/libexec/PlistBuddy -c "Print :CFBundleShortVersionString" "${PROJECT_DIR}/${INFOPLIST_FILE}")
sed -i bak -e "/userLabel=\"APP_VERSION\"/s/text=\"[^\"]*\"/text=\"Version: $versionNumber Build: $buildNumber\"/" $PROJECT_DIR/$PROJECT_NAME/Base.lproj/LaunchScreen.storyboard
Run Code Online (Sandbox Code Playgroud)

作为奖励,我已经包含了一个内置编号增量器和ON/OFF脚本切换,以便在您构建项目时禁用增量器.如果您有任何问题或者这对您有效,请告诉我.

  • 这个脚本有效,应该是接受的答案.+1 (3认同)
  • 对我有用。在构建阶段添加脚本让我很困惑。您必须首先单击左上角的“+”,然后从下拉列表中选择“New Run Script Phase”。 (2认同)
  • 如果仔细遵循说明,则效果完美。有两件事确实让我有点困惑,那就是构建期间运行脚本的位置,以及将标签标识符设置为 APP_VERSION,以便脚本知道要更新什么。为了防止出现这个问题,我遇到了: - 将“运行脚本”放在“构建阶段”中的“复制捆绑资源”之前 - 对于标签标识符,请确保它是“文档”>“标签”,而不是“身份检查器”中的辅助功能标识符它被设置为 APP_VERSION 或者,您可以只阅读已经正确给出的说明;-) (2认同)

Aao*_*oIi 5

它不允许UIViewController在LaunchScreen中使用任何其他应用程序所做的是UILabel在LaunchScreen xib/Storyboard中放置一个并将其版本号写为文本.

可能有一些工作,它仍然不是Apple的首选或允许,不要浪费你的时间搜索如果你试图设置自定义类,你会得到以下错误:

error: Illegal Configuration: Launch screens may not set custom classnames
Run Code Online (Sandbox Code Playgroud)

注意:通常应用程序所做的是UIViewConttoller在具有相同设计的默认启动屏幕之后直接创建另一个LaunchScreen ,并且不显示动画,例如接收一些数据.


小智 5

更新了@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"
Run Code Online (Sandbox Code Playgroud)