在多个Xcode目标的Info.plist中使用相同的版本号

10
我有一个包含多个目标的单个Xcode项目。
每个目标都有自己的Info.plist文件,其中包含该应用程序的版本号(CFBundleVersionCFBundleShortVersionString)。
我如何为每个目标使用单个、通用的版本号和构建号源,而不是编辑每个目标的plist文件?

这是最好的想法吗?如果您需要修复其中一个目标,但不是所有目标,您会为所有目标发布吗? - Popeye
除了可能很少发生的标志更换,我不应该只针对一个目标需要修复。 - Mike Flynn
尽管这种情况发生的可能性非常罕见,但仍然有可能发生。当然,决定权在您手中,我只是想了解它是否是您最好的选择。 - Popeye
我增加版本号的方式是通过一个 shell 脚本(共享 shell 脚本)来完成的,该脚本将在生产中构建的任何目标上运行。但这种方法也存在问题。例如,我们的版本格式为 1.0.0,脚本只会递增最后一位数字,因为我们很少进行影响第二位数字的重大更改,甚至更少进行影响第一位数字的全面升级。 - Popeye
2个回答

28

以下内容适用于Xcode 12,不需要用户定义变量。

  1. 选择您的项目
  2. 选择构建设置并找到“版本控制”
  3. 将“营销版本”设置为您的版本
  4. 将“当前项目版本”设置为您的构建版本

Update project


  1. 接下来,选择每个目标
  2. 删除/移除任何版本号,它将使用默认的“营销版本”
  3. 删除/移除任何构建号,它将使用默认的“当前项目版本”
  4. 对所有目标都执行此操作

Update targets


一旦您这样做了,您只需要更新项目的“营销版本”和“当前项目版本”,所有目标都将相应更新。

我收到了关于小部件扩展的以下警告。根据您的建议,我的两个版本都设置为"无"。有什么想法吗? 应用程序扩展的CFBundleShortVersionString(空)必须与其包含的父应用程序(空)相匹配。 - Oded Ben Dov

11
在您的项目中添加一个新的自定义属性(Editor -> Add Build Setting -> Add User Defined Setting)。我们将其命名为MY_VERSION并给它赋值为1.0.1
现在进入每个目标的Info部分,并将版本设置为${MY_VERSION}

我有一个Settings.plist文件,所有我的目标都使用它,我想这是一个不错的地方来添加它,对吗? - Mike Flynn
不稳定的解决方案。在版本的“常规”选项卡中进行任何编辑(字段未禁用)都会破坏此绑定。 - Argus
@Argus 嗯,你必须知道你正在使用一个属性。没有更好的解决方法。不管怎样,这个解决方案已经有7年了,但我仍然在一些项目中使用它,特别是当版本因构建配置而异时。 - Sulthan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接