如何在LaunchStoryboard中显示CFBundleShortVersionString?

有没有什么办法可以在我的LaunchStoryboard中将CFBundleShortVersionString作为UILabel文本显示出来,而不需要每次增加时都手动input。 我知道如何在代码中做到这一点,但是在显示LaunchStoryboard时不能运行代码。
是否有可能通过Xcodevariables?

我想出了这个脚本来根据第一个答案更新LaunchScreen.storyboard上的版本和构build标签,而不使用任何额外的文件。 不幸的是,克莱门斯Brockschmidt的解决scheme不起作用,由于一些语法错误和不正确的path。

请确保在Identity Inspector窗格 – >文档 – >标签中将您的标签命名为“APP_VERSION”。

在“复制捆绑软件资源”阶段之前创build您的脚本。

这里是最后的工作脚本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/>>>CHANGE ME<<</Base.lproj/LaunchScreen.storyboard 

注:'>>> CHANGE ME <<<'是一个项目名称。

作为一个奖金,我已经包括一个内部版本增量和开/关脚本切换。 让我知道如果你有任何问题,或者如果这对你有用。

众所周知,你不能把代码放在启动屏幕上。 不幸的是,在启动屏幕中没有内置的方法来为标签的文本使用variables(类似于可以使用头文件中的值预处理Info.plist)。

实现目标的唯一方法是编写自己的脚本来更新LaunchScreen.storyboard文件,并将该脚本添加为目标的自定义Build阶段。

为了使这更容易,我将设置您的目标使用Info.plist的预处理器文件。 一旦完成并运行,您现在可以在脚本中查询单独的简单头文件来处理LaunchScreen.storyboard文件。

这是一个完整的解决scheme:

创build一个名为Info.h的文件,并将其添加到项目的根目录下。

添加以下行:

 #define APP_VERSION 2.6 // Update this version as needed 

现在在Xcode中select你的项目的目标,并转到常规选项卡。 将版本值从您拥有的任何数字更改为APP_VERSION

现在selectBuild Settings选项卡。 在Infosearch 在Packaging部分下,将Preprocess Info.plist File设置为Yes 。 还要将Info.plist preprocessing Prefix FileInfo.h

现在,当您执行构build时,Info.plist中的CFBundleShortVersionString值将被设置为Info.h文件中的值。

要使启动屏幕文件中的标签更新为匹配,请执行以下操作:

select您的启动屏幕故事板,然后select将包含版本号的标签。 显示Identity Inspector窗格。 在Label属性中inputAPP_VERSION 。 如果现在查看故事板文件,则标签的XML现在将显示一个userLabel属性。

返回到项目目标并select“构build阶段”选项卡。 点击+图标并select添加一个新的运行脚本阶段。 将新的阶段重命名为“更新启动版本”。 然后将新阶段拖到现有的“复制包资源”阶段之前。

现在打开新的“更新启动版本”阶段。 在Shell字段中input/bin/bash 。 将以下代码复制并粘贴到阶段中:

 VERSION=`cat Info.h | grep APP_VERSION | cut -f3 -d' '` sed -e "/userLabel=\"APP_VERSION\"/s/text=\"[^\"]*\"/text=\"$VERSION\"/" Storyboard.storyboard > tmp.storyboard 

现在做一个干净的构build。 这是一个testing在这一点上。 看看tmp.storyboard ,并确保它看起来是正确的,应用程序版本的标签显示正确的版本。

一旦工作,更新上面的代码:

 VERSION=`cat Info.h | grep APP_VERSION | cut -f3 -d' '` sed -i bak -e "/userLabel=\"APP_VERSION\"/s/text=\"[^\"]*\"/text=\"$VERSION\"/" Storyboard.storyboard 

这最终版本实际上更新启动屏幕故事板文件。 以前的版本是一个testing,以确保其他一切工作没有风险捣毁你的故事板。

编辑

没有办法使启动屏幕dynamic。 本地化也不行

下面给出一个替代scheme

以前的答案

你应该使你的初始VC类似于LaunchScreen.xib,并在那里制作一个标签。

现在在ViewController中,您可以通过NSBundle方法访问信息plist并设置其值。 这将使从启动屏幕到第一个VC平滑过渡,看起来自然与版本代码animation或如果你想要的东西

 let appVersion = NSBundle.mainBundle().infoDictionary["CFBundleVersion"]; myLabel.text = "\(appVersion)"