Info.plist 上传错误中的 CFBundleVersion

Posted

技术标签:

【中文标题】Info.plist 上传错误中的 CFBundleVersion【英文标题】:CFBundleVersion in the Info.plist Upload Error 【发布时间】:2011-06-23 09:59:42 【问题描述】:

"您上传的二进制文件无效。 Info.plist 文件必须包含比 之前上传的版本。”

我在上传应用程序时遇到此错误。

我在 iTunes Connect 上将更新的版本设置为 1.2,并将.plist 文件更新为 1.2。

我不明白为什么会收到此错误。任何帮助,将不胜感激。谢谢。

【问题讨论】:

为什么不尝试将其设置为 1.2.1? 我尝试了很多组合。没有工作。该错误不断出现。 之前上传的版本是什么(在当前发布应用的 Info.plist 中可以找到)? 这个问题解决了吗?同样的问题突然发生在我身上。令人沮丧。 我刚刚收到一封包含此错误的电子邮件,结果发现我的一个旧版本在过去一周被困在 ITC 中作为“处理”,终于得到了处理。当它第一次卡住时,我重新提交了另一个版本号增加的版本,所以当旧版本最终得到处理时,它触发了错误。 【参考方案1】:

Apple 的上传服务器中至少有 1 个已知错误,他们已经超过 12 个月没有修复。注意事项:

    Apple 删除版本号内的所有前导零;即“整个字符串”不被视为数字,而是点之间的位被视为单独的数字。例如Apple 将“1.02”视为“1.2”。所以,对于 Apple 来说,1.02 比 1.1 大 Apple 有时会感到“困惑”,并且似乎会将您上传的应用程序与您之前上传的不同应用程序的版本进行比较。很多人都遇到过这种情况,我自己也见过几次 Apple 应该比较“CFBundleVersion”(即“Bundle 版本”而不是“Bundle 版本字符串,短”);不要混淆。 通常,唯一可行的解​​决方案是增加前面的数字(例如,“2.4”中的“2”——将其增加到“3”) 您上传的版本号与 iTunes 中显示的版本号无关 - 您可以在其中放置任何您想要的内容,这就是您的用户将看到的内容 ...除了,如果您还在应用程序中报告“实际”版本号,用户将看到 CFBundleVersion(通常取决于您的编码方式),而不是 iTunes 版本(我认为不能可从您的应用内部访问)

【讨论】:

CFBundleVersion 在 xcode 4.5 中被标记为“Build”,而不是“Version”!版本最终在 Info.plist 文件中标记为“CFBundleShortVersionString”。因此,确实需要为 Build 提供比以前更高的值。 +1 有用的。我以前的版本使用了1.02。并且,使用这个答案修复它。谢谢。 这个答案应该添加到FAQ 部分关于如何提交应用到应用商店。 :)) @Adam:我已经阅读了CFBundleShortVersionString,并且您在 iTunes Connect 中提供的版本号应该匹配。这意味着如果您在应用程序中显示您的版本号,您将使用CFBundleShortVersionStringCFBundleVersion 也应该增加,这是 Apple 用来确定您是否提交应用的更新版本的那个。 Apple 最近以非向后兼容的方式重新定义了所有字符串的含义。【参考方案2】:

更新内部版本号。版本号很重要,但内部版本号决定一切。例如,我有一个应用程序的初始版本:

version #: 1.0
build #:   1.0

但是当我尝试上传下一个版本时,即

version #: 1.1
build #:   1.0

它不会接受上传。只需将 build # 增加到 1.1 即可接受上传。

【讨论】:

完美...更改构建 # 为我做了这件事,这很棒,因为我真的想保持我的捆绑版本和 iTunes 版本同步。【参考方案3】:

如果您不重新归档应用程序,Xcode 4 会认为您想要重新上传相同的版本。即使您更改了 Bundle Version 并重新构建,上传也会失败。记得在产品菜单中进行“存档”!

【讨论】:

【参考方案4】:

这里的许多答案最终都帮助了我,但直到我看到 Apple 正在比较的确切“版本”编号。

    转到 iTunes Connect -> 管理您的应用程序 选择您要检查以前版本的应用程序 单击标有查看详细信息的蓝色按钮 单击标有二进制详细信息的链接 找到 Bundle Version 的值

虽然我以为我提交了版本号 1.0.1,但 Apple 存储的实际数字是 101。上面的一些 cmets 让我相信我需要将我的版本更改为 2.0 (20) 或 1.5 (15) 或1.2 (12) — 如您所见,这些都小于 101。更新我的版本号 102(不带点)解决了这个问题。

【讨论】:

【参考方案5】:

This article 指出在应用商店中看到的版本号不一定与捆绑包的版本号相同。当您在 iTunes 中查看应用程序的详细信息时,会有一个名为“二进制详细信息”的链接。该页面显示捆绑版本。我正在开发的应用程序之一是 1.0 版本,但它的捆绑版本是 2.0。上传 1.1 版本的捆绑包失败,但 2.1 确实有效。

所以,有一个应用版本和一个捆绑版本。此问题与捆绑版本有关。

【讨论】:

【参考方案6】:

似乎混乱是由数字格式引起的。捆绑版本不是小数。它是一个版本(或者可能是构建版本),所以 1.11 实际上是“一点十一”。因此 1.11 大于 1.2。在这种情况下,我成功使用了 1.20。

【讨论】:

【参考方案7】:

通常,这可能是由于缺少版本号造成的。因此,在身份下添加版本号,并检查内部版本号。

继续编码...... :)

【讨论】:

【参考方案8】:

对我来说(Xcode 4.5)更改内部版本号解决了这个问题。将版本设置为 1.0.2 ... 2.0.2 等,然后增加构建#(亚当 3 点给我一个 idia 去哪里看)。

【讨论】:

【参考方案9】:

您应该能够登录 iTunes Connect 并查看应用程序的当前版本(包括您已提交但尚未上线的任何版本)。检查以确保您之前没有提交过更高(或相同)版本号的版本。

【讨论】:

这是误导; Apple 不会简单地与 iTunesConnect 版本进行比较。参考文献彼得的答案如下以获得更准确的答案。 @Adam 截至目前 (2014-05),Apple 确实将您的 ios 应用程序的内部版本号与 iTunesConnect 版本号进行了比较。如果不匹配,您会收到此警告消息(不是错误):Version Mismatch - Neither CFBundleVersion ['201405030503'] nor CFBundleShortVersionString ['201405030503'] in the Info.plist match the version of the app set in iTunes Connect ['1.0.0']. 但此 iTunesConnect 比较不是此问题中问题的原因。 iTunesConnect 比较只是一个警告,而不是显示停止错误。【参考方案10】:

我花了几个小时试图解决这个问题。我已经尽我所能检查以确保 CFBundleVersion 确实高于旧版本,方法是在文本编辑器上打开 info.plist,获取目标信息并阅读属性上的版本,让我的妻子阅读版本在 iTunes 上确认我没有被意外的早期阿尔茨海默病击中。

最后,这以某种方式成功了。我的旧版本是 1.0.4。我尝试了 1.3.5、1.4.5 等;没有工作。但令人惊讶的是,当我进入 2.0.0 时,Application Loader 喜欢它所看到的并上传它。这是由于应用程序加载器中的错误造成的吗?

【讨论】:

【参考方案11】:

在 xcode4 中版本号旁边的目标摘要中是构建,我从 1 开始,每次上传二进制文件时都会递增,这解决了我的问题

【讨论】:

这也是我的问题,错误信息非常具有误导性! 我也有这个问题。令人难以置信的令人沮丧的是,该消息如此具有误导性。浪费了我下午的大部分时间。感谢您提供有用的答案。【参考方案12】:

如果报告的错误是 CFBundleVersion,修复通常很容易。检查/试试这个:

    转到项目导航器中的***项目项并单击它。 在面板中右击应用程序目标。 单击摘要选项卡。

在摘要选项卡上,您会看到可以调整两个不同的“版本”。第一个是“版本”字段,用于 Mac 应用程序的默认“关于”屏幕。右侧是“构建版本”。这对于 App Store 提交来说才是真正重要的!

【讨论】:

【参考方案13】:

我知道这是一个老问题,但我刚刚遇到了这个问题。我通过从存档中删除项目,然后重新存档来解决它。显然,以前版本的应用程序在那里并造成混乱。

【讨论】:

【参考方案14】:

注意错误信息。

错误消息在方括号中包含以前的捆绑包编号(例如 [9])。

因此,您需要增加该捆绑包编号(例如 9.1),尽管您的新版本号是 1.2

因此,当您在 iTunes Connect 中将版本从 1.1 更新到 1.2 时,您需要在项目中设置这些值

Version number = 1.2
Bundle number = [previous bundle number]++

【讨论】:

注意:如果您不确定上次上传版本的捆绑包 # 是什么,请单击旧版本并查找二进制详细信息(在链接下)。您应该会看到“捆绑版本:#”【参考方案15】:

我遇到了同样的问题,这是因为我还没有存档,而且我使用的是用于 1.0 但使用 1.0.1 的第一个存档。所以我选择了iOS设备,存档然后验证。 Ta-daaa,成功了!

【讨论】:

【参考方案16】:

我的项目中有 iPhone 和 iPad 版本,ipad 的 infoplist 由于某种原因未与 ipad 产品关联,检查 Target 成员资格并将其与正确的产品相关联为我解决了这个问题。

【讨论】:

【参考方案17】:

我在这篇帖子CFBundleVersion must be higher than previous version找到了这个错误的解决方案

希望这会有所帮助!

【讨论】:

【参考方案18】:

我把“版本”和“版本”号互换了,弄错了。

我没有将 2.3 放在 Version 字段中,而是将其放在 Build 号中。

【讨论】:

【参考方案19】:

这是我解决问题的方法(我猜这是很多人的问题):

1) 单击项目设置的常规选项卡(可以通过单击所有代码文件顶部的项目名称来访问)。

2) 确保构建字段与您在 plist 中为“Bundle Version”键输入的内容相匹配。

这对我来说是个问题,无论出于何种原因,它们都不同步。我认为当您更改 Bundler Version 密钥时,它应该同步(反之亦然)。但无论出于何种原因,它都没有发生 - 可能是一个错误。

【讨论】:

【参考方案20】:

我遇到了同样的问题。基本上我以前的版本是 1.12 我想把它改成 1.2 但有提到的错误。我确实尝试了 1.20,它确实工作得很好

【讨论】:

第二个数字必须在0到9之间,所以12“太大了” 第二个数字(我叫它minor版本号,只是为了好玩)可以是任何整数,没有界限;所以1220 是完美的次要 版本号。【参考方案21】:

只要我使用 Apple 的“应用程序加载器”上传我的 ipa 文件,就没有一组不断增加的版本号起作用,但是如果我使用 XCode 的“组织器”(在 3.2 版的“窗口”下拉菜单下找到) .5),单击“验证...”按钮,等待它批准我,然后单击“提交...”按钮,一切都按预期进行,并带有一个健全的版本号(一个高于该版本号的单个增量目前在应用商店中可用)。

【讨论】:

【参考方案22】:

在 xcode 4.2 中,如果您从 info.plist 文件进行修改,似乎不会注册捆绑版本。 我直接在 xcode 面板“信息”中设置了我的新捆绑包版本,现在它可以工作了!

【讨论】:

【参考方案23】:

我找到了另一个解决方案。

如果你选择你的目标>>info>>更新Bundle ID。

【讨论】:

【参考方案24】:

我遇到了同样的问题。第一次提交的版本是1.5.20,想更新到1.7.30。

在尝试 1.8、2.0 和 3.0 版本失败后,我将我的 CFBundleVersion 更新为 10.0,然后它突然工作了。

我不确定这种行为背后的逻辑是什么,但它导致我浪费了大约 2 天的工作时间。

【讨论】:

【参考方案25】:

检查你之前上传的bundle版本,你应该给出比已经上传版本的bundle版本更高的bundle版本。已经上传的版本可以通过itunesconnect/application/view details/binary details查看。

【讨论】:

【参考方案26】:

我在一个类似的问题上花了两个晚上。我以前的版本是 1.02,我尝试使用 1.2、1.20、1.1 进行验证,但总是收到无效的二进制消息。

我通过输入 2.0 作为版本号解决了这个问题,并且有效。我怀疑这也是一个错误。最近将我的游戏从 1.0 升级到 1.1 时,我没有收到此消息,但那是使用 xcode 3。感谢您的提示!

【讨论】:

【参考方案27】:

我有类似的问题,花了半个小时后,我发现我增加了错误的数字。 我没有增加 Bundle version,而是在 Info.plist 中增加了 Bundleversions, string, short。 使用 CMD + Shift + F 在您的项目中搜索“CFBundleVersion”。您将看到您需要增加 CFBundleVersion 编号。

【讨论】:

【参考方案28】:

尝试将 version="1.1.1.0" 更改为 version="1.1.1"

【讨论】:

【参考方案29】:

截至late October,Apple 要求版本号少于 4 位(1.2.3 或 1.23,而不是 1.2.3.4 或 1.234)。这也适用于图书馆!

在你的项目目录中对有问题的版本号进行快速 grep 应该会打开有问题的库:

grep -r "1.2.3.4" .

【讨论】:

【参考方案30】:

我正在运行一个有效的 TestFlight 测试版。 Build 2020,版本 407

我提交了一个应用程序供官方 App Store 审核。 Build 2020,版本 435,并获得批准。它就在那里,等着我把它实时推送到 App Store。

在不添加复杂的支线故事的情况下,我想做的是给我的 TestFlight 测试版用户一个更新版本,以便在 App Store 版本上线之前预览几天的官方 App Store 版本。你为什么问?因为他们获得了免费功能,所以一旦应用上线,他们就要花钱了。

所以,我向 TestFlight 提交了 Build 2020 版本 436,但被拒绝了。

它被拒绝了,因为我有一个经过批准的官方 App-Store 候选版本,具有相同的内部版本号

解决方案:更改您的 TestFlight 版本的内部版本号。我向 TestFlight 提交了 Build 20200(我添加了一个额外的零)版本 436,并获得了批准。别担心,只要您仍然使用相同的 BundleID,您仍然可以将此构建推送到同一个 TestFlight beta 组。

【讨论】:

以上是关于Info.plist 上传错误中的 CFBundleVersion的主要内容,如果未能解决你的问题,请参考以下文章

Phonegap - 包中的 Info.plist 必须包含 CFBundleVersion 键

由于一般错误 (1095),此时无法处理应用程序 info.plist 验证

错误 ITMS-90190:“Info.plist 文件中的键 'UISupportedDevices' 无效。”

Info.plist 中 CFBundleDocumentTypes 键的值必须是字典数组

错误 ITMS-90190:“无效的 Info.plist 键。Payload/brownie.appInfo.plist 文件中的键 'UIUserInterfaceStyle' 无效。”

在上传构建之前如何知道 info.plist 中缺少啥?