【问题标题】:What's the difference between "version number" in iTunes Connect, "bundle version", "bundle version string" in Xcode?iTunes Connect 中的“版本号”、Xcode 中的“捆绑版本”、“捆绑版本字符串”有什么区别?
【发布时间】:2011-11-09 00:19:01
【问题描述】:

Apple 的文档本可以更清楚地说明如何提交更新版本。

正如标题中所说, 有什么区别

  1. itunes connect 中的版本号(提交更新时必须提供)
  2. xcode 中的捆绑版本
  3. 捆绑版本字符串,短

它们有什么关联吗?

【问题讨论】:

标签: iphone version


【解决方案1】:

是的,它们是相关的。它们都指的是您的应用程序的版本。

  • iTunes 连接
    这是 App Store 中显示的版本号;这必须是纯版本号,例如1.2.3

  • 捆绑版本 (CFBundleVersion)
    这不需要是纯版本号。这可能类似于123451.2.3 (Build 12345AB)。例如,这显示在 Mac OS X 应用程序的“关于”窗口中,并且通常更像是“内部版本号”而不是“版本号”。

  • 捆绑版本字符串 (CFBundleShortVersionString) 该值用作“真实”版本号。此必须iTunes Connect 中的版本使用相同的字符串。

更新:
正如@snlehton 所指出的,当您要将应用程序上传到 (iOS) App Store 时,CFBundleVersion 必须是像 1.2.3 这样的纯版本号。

【讨论】:

  • 对于 测试,您将捆绑版本字符串设置为最终版本号,例如 1.2.3,然后为每个构建增加捆绑版本。
  • 这是错误的 CFBundleVersion 需要用于 x.y.z,否则上传构建将失败! link
  • 我最近提交了一个带有 "1.0.2 RC3" 的 CFBundleVersion 构建,它反弹并显示错误消息:“捆绑包无效。Info.plist 文件中的关键 CFBundleVersion 必须是句点分隔的非负整数列表。”我认为 nn.n.nxnnn 是正确使用的格式,但还没有尝试过。
  • 这里的CFBundleVersion 1235,没问题
  • 这里的混淆是因为 CFBundleShortVersionString 是可选的,当它被设置时,它会改变 CFBundleVersion 的用途。如果只包括 CFBundleVersion 那么它必须是公共版本号,例如1.0。但是,如果同时设置了 CFBundleVersion 和 CFBundleShortVersionString,那么 CFBundleShortVersionString 现在必须是公共版本号,例如1.0。现在 CFBundleVersion 更改为内部版本号,通常是单个整数,例如374629。希望这可以清除它。
【解决方案2】:

是的,它们是相关的,但它们的定义取决于它们的使用方式。

  • iTunes 连接版本

    始终必须是版本号,例如1.0

使用模式 1 - 仅设置 CFBundleVersion

  • 捆绑版本 (CFBundleVersion)

    必须是版本号,例如1.0。必须与 iTunes Connect 版本匹配。

使用模式 2 - CFBundleVersion 和 CFBundleShortVersionString 已设置

  • 捆绑版本 (CFBundleVersion)

    必须是内部版本号,例如一个像 435163 这样的整数。

  • 捆绑短版本字符串 (CFBundleShortVersionString)

    必须是版本号,例如1.0。必须与 iTunes Connect 版本匹配。

使用模式 2 是最好的方法。以下是应用升级路径的一些示例编号:

CFBundleShortVersionString CFBundleVersion 
1.0                        1
1.0.1                      2
1.0.2                      3
1.2                        5  (build 4 was a beta and never released publicly)
1.2.1                      6

关于版本号的额外说明:如果您向您的应用提交小更新(例如错误修复),您绝不能错过版本号中的句点,例如始终使用 1.0.1 和从不 1.01,否则您将将来可能无法使用某些版本号,因为无法增加它们。

【讨论】:

  • 仅该表就可以很好地解释这两个数字在实践中的关联和使用方式。谢谢。
  • 必须与 iTunes Connect 版本匹配。这不是硬性要求(即使它应该是必须的)
【解决方案3】:

是的,它们都是相关的。

itunesconnect 中的

版本号 是您需要提供的版本号。例如,2.1.1 或 3.1.2 等。这也应该等于 CFBundleShortVersionString

Xcode 中的捆绑版本 (CFBundleVersion) 仅代表构建编号,用于标识应用程序的迭代(已发布或未发布)。

Bundle 版本字符串,短 (CFBundleShortVersionString) 是一个数字,由三个用点分隔的整数组成。第一个代表应用程序的任何重大更新,例如实现新功能或重大更改的更新。第二个整数表示实现不太突出的功能的修订。第三个整数代表维护版本。

【讨论】:

  • 实际上,“Bundle versions string, short”不需要是三个数字,用点分隔。我认为“1”和“1.1”也是有效的。
  • 实际上从我在 itunesconnect 中测试的版本号完全独立于 CFBundleVersion 和 ShortVersion。所以你甚至可以让它们不同
【解决方案4】:

小心CFBundleVersion。它不仅是生产版本号。 Apple 在二进制上传过程中会检查此值,它可能会失败。

确保在构建要提交的版本时将 CFBundleVersion 的值设置为 CFBundleShortVersionString

this post about it

【讨论】:

  • 这是正确的信息,接受的答案实际上是错误的。
  • 这是不正确的,CFBundleVersion 不必匹配 CFBundleShortVersionString。例如,如果您查看 Chrome 的当前 .ipa 文件(现在在应用商店中),CFBundleVersion 有“34.0.1847.18”,CFBundleShortVersionString 有“34.1847.18”。
  • 没有文档说 CFBundleVersion 和 CFBundleShortVersionString 应该相同。
【解决方案5】:

接受的答案是要走的路 - 只是添加这个作为示例。

对于我们的上一个版本,“Bundle Version String,short”是必需的,我继续将其与 Bundle 版本号(我们的应用程序为 1.2.8)匹配。

然后我启用了 Testflight,并将等待 Apple 审核的版本 (1.2.8) 提供给我们的内部测试人员。然而,一位测试人员发现了一个需要修复的问题,我们就地删除了二进制文件。上传新版本时,我们收到一个错误,表明该版本版本已上传。

在阅读了一些 SO 链接和 Apple 文档后,我的理解是制作 bundle 版本:1.2.8.001,同时保持 bundle-version-short 的原样。如果需要新的构建,我们将 bundle-version 增加到 1.2.8.002。

注意:上传已被接受,并且在预发布版本下构建显示为“1.2.8.001”。版本号仍为 1.2.8。

【讨论】:

    【解决方案6】:

    此链接的已接受答案包含很好的详细信息:: Which iOS app version/build number(s) MUST be incremented upon App Store release?

    来自苹果文档

    CFBundleVersion(捆绑版本)

    CFBundleVersion (String - iOS, OS X) 指定捆绑包的构建版本号,它标识捆绑包的迭代(已发布或未发布)。构建版本号应该是由三个非负的、以句点分隔的整数组成的字符串,其中第一个整数大于零。该字符串应仅包含数字 (0-9) 和句点 (.) 字符。前导零会从每个整数中截断并被忽略(即 1.02.3 等价于 1.2.3)。此键不可本地化。

    CFBundleShortVersionString(捆绑版本字符串,短)

    CFBundleShortVersionString (String - iOS, OS X) 指定包的发布版本号,它标识了应用程序的发布迭代。发布版本号是由三个以句点分隔的整数组成的字符串。第一个整数代表应用程序的主要修订,例如实现新功能或重大更改的修订。第二个整数表示实现不太突出的功能的修订。第三个整数代表维护版本。

    此键的值与 CFBundleVersion 的值不同,后者标识应用的迭代(已发布或未发布)。可以通过将它包含在 InfoPlist.strings 文件中来本地化这个键。

    【讨论】:

      猜你喜欢
      • 2016-01-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-01-21
      • 1970-01-01
      • 2018-09-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多