Cle*_*idt 6 xcode storyboard ios
有没有办法在我的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
Run Code Online (Sandbox Code Playgroud)
现在,在Xcode中选择项目的目标,然后转到"常规"选项卡.从您拥有的任何数字更改版本值APP_VERSION.
现在选择Build Settings选项卡.搜索Info.在"打包"部分下,将"设置"设置Preprocess Info.plist File为Yes.同时设置Info.plist preprocessing Prefix File为Info.h.
现在,当您进行构建时,CFBundleShortVersionStringInfo.plist中的值将设置为Info.h文件中的值.
要使启动屏幕文件中的标签更新以匹配,请执行以下操作:
选择启动屏幕故事板,然后选择包含版本号的标签.显示"标识检查器"窗格.进入APP_VERSIONLabel属性.如果现在查看storyboard文件,标签的XML现在将显示userLabel值为的属性APP_VERSION.
返回项目目标并选择Build Phases选项卡.单击+图标,然后选择添加新的运行脚本阶段.将新阶段重命名为"Update Launch Version"之类的有用内容.然后将新阶段拖到现有"复制包资源"阶段之前.
现在打开新的"更新启动版本"阶段./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
Run Code Online (Sandbox Code Playgroud)
现在做一个干净的构建.这是一个测试.看看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
Run Code Online (Sandbox Code Playgroud)
此最终版本实际上更新了启动屏幕故事板文件.之前的版本是一项测试,以确保其他所有工作都没有风险,从而破坏您的故事板.
我根据第一个答案找出了更新 LaunchScreen.storyboard 上的版本和构建标签的脚本,而无需使用任何额外的文件。不幸的是,由于一些语法错误和不正确的路径,Clemens Brockschmidt 的解决方案不起作用。
确保在身份检查器窗格 -> 文档 -> 标签中将标签命名为“APP_VERSION”。
还要在“复制捆绑资源”阶段之前创建脚本。
更新:我的旧答案在最新的 Xcode 环境中不起作用。我已经修复了当前的问题并重构了脚本。
这是XCode 11 (Swift 5)中使用 shell 的最终工作脚本: /bin/sh :
# 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=false
# App vesion / Build version constants
sourceFilePath="$PROJECT_DIR/$PROJECT_NAME/Base.lproj/LaunchScreen.storyboard"
versionNumber="$MARKETING_VERSION"
buildNumber="$CURRENT_PROJECT_VERSION"
# 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=\"$versionNumber($buildNumber)\"/" "$sourceFilePath"
Run Code Online (Sandbox Code Playgroud)
作为奖励,我添加了一个内部版本号增量器和开/关脚本切换,以便在您大量构建项目时禁用增量器。如果您有任何问题或者这是否适合您,请告诉我。
| 归档时间: |
|
| 查看次数: |
1101 次 |
| 最近记录: |