有什么方法可以在我的 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_VERSION
的 userLabel
属性。
返回到项目目标并选择“构建阶段”选项卡。单击 + 图标并选择添加一个新的运行脚本阶段。将新阶段重命名为有用的名称,例如“更新启动版本”。然后将新阶段拖到现有“复制捆绑资源”阶段之前。
现在打开新的“更新启动版本”阶段。在 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/