Xcode:如何在应用程序名称中包含内部版本号

Xcode:如何在应用程序名称中包含内部版本号,xcode,Xcode,我正在推出一款Mac应用的测试版,并希望在应用名称中包含当前版本号,例如用户在dock中看到的应用名称等 如果我的应用程序名为应用程序,我希望它显示应用程序Beta 1234 因此,在目标的构建配置中,有一个值为$(target\u Name) 现在,在调试版本中,我想在那里添加版本号。这应该可以使用$(TARGET_NAME)Beta$(?) 我应该把什么放在那里而不是??还是不是那么简单 e、 g.这是: 但是,我没有使用詹金斯,而且它看起来有些不可靠。这是访问CbundLeverVersi

我正在推出一款Mac应用的测试版,并希望在应用名称中包含当前版本号,例如用户在dock中看到的应用名称等

如果我的应用程序名为
应用程序
,我希望它显示
应用程序Beta 1234

因此,在目标的构建配置中,有一个值为
$(target\u Name)

现在,在调试版本中,我想在那里添加版本号。这应该可以使用
$(TARGET_NAME)Beta$(?)

我应该把什么放在那里而不是
?还是不是那么简单

e、 g.这是:


但是,我没有使用詹金斯,而且它看起来有些不可靠。这是访问CbundLeverVersion…?的唯一/正确方法吗?

使用$(目标名称)Beta$(构建编号)

您可以执行多种操作:


1) 使用构建阶段修改
CFBundleName
  • 选择要在Xcode中修改的目标
  • 打开所选目标的构建阶段
  • 添加新的运行脚本构建阶段
  • 粘贴以下代码
BUILD_NUMBER=$(/usr/libexec/PlistBuddy-c“Print CFBundleVersion”“$INFOPLIST_FILE”)
/usr/libexec/PlistBuddy-c“Set:CFBundleName$PRODUCT\u NAME Beta$BUILD\u NUMBER”“$TARGET\u BUILD\u DIR/$INFOPLIST\u PATH”

该脚本使用PlistBuddy。首先,它从您的
Info.plist
中获取
CFBundleVersion
,并将其存储在变量
BUILD\u NUMBER
中。在第二步中,它使用PlistBuddy将
CFBundleName
设置为
$PRODUCT\u NAME Beta$BUILD\u NUMBER
。请注意,it将而不是修改原始plist,而是修改构建目录中的plist,这样您就不会被git存储库中的更改所困扰

应用程序运行时,
CFBundleName
将显示在菜单栏中。它不会对Dock中的应用程序名(从应用程序的文件名派生)产生影响

注意:如果使用
CFBundleDisplayName
对捆绑包名称进行了本地化,则这可能不起作用。在这种情况下,您可能需要修改上面的脚本


2) 使用自定义生成设置
  • 选择要修改的目标
  • 打开选定目标的生成设置
  • 编辑器-->添加生成设置-->添加用户定义设置
  • 命名您的新设置
    CUSTOM\u BUILD\u VERSION
    并添加一个值
  • 在生成设置中搜索
    PRODUCT\u NAME
    ,并将其更改为
    $(目标名称)Beta$(自定义生成版本)
  • 打开目标的
    Info.plist
  • CbundLeverVersion
    更改为
    $(自定义版本)
  • 如果要更改生成版本,请改为更改
    CUSTOM\u build\u version
使用此方法,Xcode将创建一个名为“SomeApp Beta”的应用程序。由于dock中的名称与应用程序包名称相同,因此dock也将使用该名称


3) 在构建后重命名应用程序 当然,您也可以在使用Xcode构建应用程序后重命名它。如果您是使用Gradle(请参阅)或自定义构建脚本从命令行构建应用程序,那么这当然可以自动化。
使用PlistBuddy从捆绑应用程序中提取
CFBundleVersion
,然后重命名捆绑包以包含提取的值,应该非常容易。这应该与1中的脚本非常相似。

这对我不起作用。Xcode似乎没有看到名为BUILD_NUMBER.Try${PRODUCT_NAME}${CbundLeverVersion}的变量,在CbundleDisplayName键上刚刚尝试过,不幸的是没有工作。与$(TARGET_NAME)一起尝试过…尝试过没有花括号是。。有趣的是,捆绑包名称或捆绑包显示名称似乎都不会影响应用程序文件/捆绑包上显示的名称。但在目标构建设置中调整产品名称确实会产生效果。好像我无法访问那里的版本号嘿,谢谢!我目前使用的是解决方案2),这并不完美,因为Xcode似乎没有在CbundLeverVersion中提取自定义变量,例如,它将
$(自定义构建版本)
视为字符串。将尝试解决方案1),这似乎是正确的做法。你确定吗?我试过了,实际上检查了捆绑应用程序中显示正确版本的
Info.plist
。您是否查看了应用程序的
Info.plist
,或者只是查看了Xcode的目标视图?不幸的是,正如您所说,目标视图不会展开变量并将其视为字符串。