ios - 如何在我的 LaunchStoryboard 中显示 CFBundleShortVersionString?

标签 ios xcode storyboard

有什么方法可以在我的 LaunchStoryboard 中将 CFBundleShortVersionString 显示为 UILabel 文本,而无需在每次递增时手动输入它?我知道如何在代码中执行此操作,但无法在显示 LaunchStoryboard 时运行代码。
是否可以通过 Xcode 变量?

最佳答案

众所周知,您不能将代码放入启动屏幕。不幸的是,没有一种内置方法可以在启动屏幕中为标签文本使用变量(类似于如何使用头文件中的值预处理 Info.plist)。

实现您的目标的唯一选择是编写您自己的脚本来更新 LaunchScreen.storyboard 文件并将该脚本添加为您的目标的自定义构建阶段。

为了使这更容易,我会将您的目标设置为使用 Info.plist 的预处理器文件。一旦完成并开始工作,您现在就有了一个单独且简单的头文件,您可以在脚本中查询以处理 LaunchScreen.storyboard 文件。

这是一个完整的解决方案:

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

添加以下行:

#define APP_VERSION 2.6 // Update this version as needed

现在在 Xcode 中选择项目的目标并转到“常规”选项卡。将版本值从您那里的任何数字更改为 APP_VERSION

现在选择build设置选项卡。搜索 信息。在 Packaging 部分下,将 Preprocess Info.plist File 设置为 Yes。同时将 Info.plist preprocessing Prefix File 设置为 Info.h

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

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

选择您的启动屏幕 Storyboard,然后选择将包含版本号的标签。显示身份检查器 Pane 。在 Label 属性中输入 APP_VERSION。如果您现在查看 Storyboard文件,标签的 XML 现在将显示一个值为 APP_VERSIONuserLabel 属性。

返回到项目目标并选择“构建阶段”选项卡。单击 + 图标并选择添加一个新的运行脚本阶段。将新阶段重命名为有用的名称,例如“更新启动版本”。然后将新阶段拖到现有“复制捆绑资源”阶段之前。

现在打开新的“更新启动版本”阶段。在 Shell 字段中输入 /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

现在做一个干净的构建。这是一个测试。查看 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

这个最终版本实际上更新了启动屏幕 Storyboard文件。以前的版本是一个测试,以确保其他一切正常工作,而不会有破坏 Storyboard的风险。

关于ios - 如何在我的 LaunchStoryboard 中显示 CFBundleShortVersionString?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37214139/

相关文章:

ios - 使用 ALAssetLibrary 获取照片库中图像的时间戳

ios - 删除特定对象 Realm Swift

ios - 如何解决架构 i386 的 undefined symbol

iphone - 使用 Storyboard在两个 Controller 之间传递数据

ios - Plupload with iOS 仅适用于新照片,不适用于相机胶卷

xcode - 将iOS SDK安装到新的Xcode

xcode - 在构建qt项目时“no such sysroot directory”

iphone - 根据 iOS 15 上的黑暗模式,Unity 着色器出现故障

ios - Storyboard上的阿拉伯语

ios - iOS 5.0 Storyboard相对于传统 UI 布局有哪些优势?