安装 Xcode 后无法在模拟器上 运行 应用程序 11 - CFBundleVersion 错误

Cannot run application on simulator after installing Xcode 11 - CFBundleVersion error

昨天,我下载了 Xcode 11 的测试版。之后,我打开了我的项目并尝试 运行 使用新的 Xcode。不幸的是,消息发生了错误:


Failed to install the requested application
Domain: NSPOSIXErrorDomain
Code: 22
Failure Reason: The application's CFBundleVersion is invalid.
Recovery Suggestion: Ensure your bundle contains a CFBundleVersion with a valid semantic version number.
--

我已经关闭测试版并尝试使用最新稳定版 Xcode (10.2.1) 再次 运行,但出现了同样的错误。我需要提到的是,在尝试使用 Xocde 11 运行 一个项目之前,它在 Xcode 10 上没有任何问题。在 运行 beta Xcode 之前和之后没有任何改变.

我已经尝试过的:

~/Library/Caches/com.apple.dt.Xcode
~/Library/Developer
~/Library/MobileDevice
~/Library/Preferences/com.apple.dt.Xcode.plist
/Library/Preferences/com.apple.dt.Xcode.plist
/System/Library/Receipts/com.apple.pkg.XcodeExtensionSupport.bom
/System/Library/Receipts/com.apple.pkg.XcodeExtensionSupport.plist
/System/Library/Receipts/com.apple.pkg.XcodeSystemResources.bom
/System/Library/Receipts/com.apple.pkg.XcodeSystemResources.plist

我可以 运行 其他未使用 Xcode 11 测试的项目没有任何问题。

我最后的想法是只重新安装 macOS,但我不想这样做。

编辑:我忘了提到应用程序正在物理 iPhone XS 上运行。

我遇到了同样的问题。 我发现 Xcode 11 Beta 发行说明对此进行了解释。

Bundles without a CFBundleVersion are invalid and can’t be properly installed on 
devices or simulators. CoreSimulator now checks and rejects such bundles earlier in
the process with a clearer error message. (49892531)

而这个link就是CFBundleVersion的格式。

我在解决这个问题的时候,发现是不是第一次运行App的时候出现了CFBundleVersion的问题。然后无论格式是否正确,它总是有问题。所以我重新启动 Xcode 和模拟器,并将 CFBundleVersion 更改为正确的格式,App 运行 正确。

这是 Xcode11 中的新功能。

在发行说明中说:

Bundles without a CFBundleVersion are invalid and can’t be properly installed on devices or simulators. CoreSimulator now checks and rejects such bundles earlier in the process with a clearer error message. (49892531)

您可以:

  1. 按此样式编辑您的 CFBundleVersion LINK
  2. 重置您的 Xcode 和模拟器
  3. 再次
  4. 运行,你会看到它再次起作用

当你运行app在模拟器上成功后,你可以重新改回你的CFBundleVersion,你会发现它仍然可以工作XD

除此之外,我注意到如果您的 CFBundleVersion 未指定为:

This key is a machine-readable string composed of one to three period-separated integers, such as 10.14.1. The string can only contain numeric characters (0-9) and periods. 它不会在模拟器上构建

link

在我的例子中,运行 11 beta 的 simulator/coresimulator 版本与 10.1 的版本 -> 杀死并让 Xcode 重新打开模拟器解决了问题。

我也遇到过,花了将近一整天的时间寻找可能的原因。

最终解决问题并允许我在模拟器上安装的步骤:

  1. 退出Xcode和iOS模拟器
  2. 删除 /Library/Developer(根目录下的那个),如果要保留备份则重命名它
  3. 重新启动Xcode,同意安装命令行工具
  4. 继续你留下的工作:)

除了问题中提到的步骤(完全卸载Xcode 11,完全卸载Xcode 10然后重新安装),我还尝试将项目克隆到另一个位置,循环遍历所有可能的派生数据的位置,安装其他模拟器运行时并尝试这些运行时。 None 其中一个有效,幸运的是控制台日志应用程序显示了拒绝应用程序包的进程的路径,它是 Xcode 在 /Library/Developer/PrivateFrameworks/CoreSimulator.framework.[=13= 中安装的二进制文件之一]

似乎 Xcode 11 安装了更新版本的框架,而 Xcode 10 没有覆盖它们。删除整个 /Library/Developer 文件夹触发了命令行工具安装,最终恢复了在 Xcode 10.

中正常运行的模拟器运行时

你一定会喜欢测试版 :)

结合 Sgeven.Zheng 和 Cristik 的回答。

原因

安装 Xcode11 Beta 会安装具有以下更新的新版本 CoreSimulator.framework

https://developer.apple.com/documentation/xcode_release_notes/xcode_11_beta_release_notes

"Bundles without a CFBundleVersion are invalid and can't be properly installed on devices or simulators. CoreSimulator now checks and rejects such bundles earlier in the process with a clearer error message. (49892531)"

以下方法无法解决问题:

  • 正在卸载 Xcode11 测试版
  • 正在卸载并重新安装 Xcode 10

这是因为 CoreSimulator.framework 安装在 /Library/Developer/PrivateFrameworks/CoreSimulator.framework 中,它在 Xcode.app 包之外。 当 re-installed、xcode10 检测到当前安装的 CoreSimulator.framework 版本比 xcode10 应该安装的版本新,因此它保留 as-is.

SHORT-TERM修复

  1. 卸载xcode11
  2. 安装Xcode 10(如果已经安装就不需要re-install)
  3. 删除/Library/Developer/PrivateFrameworks/CoreSimulator.framework
  4. 启动Xcode 10 并同意安装命令行工具

LONG-TERM修复

由于这不是 "real" 错误,而是 Xcode11 的预期行为,因此最终需要采取措施确保始终使用有效 CFBundleVersion.

我 运行 也遇到了同样的问题。

我还没有尝试这里提供的其他一些选项,但我可以通过简单地删除 /DerivedData 目录来返回到模拟器的构建。

如果您不确定在哪里可以找到它,只需执行以下操作: Xcode -> 首选项 -> 位置 select 派生数据路径旁边的箭头

这里的答案有很多错误信息,所以我想提供一个权威的回应。

这里的问题是 CoreSimulator.framework 的新版本 Xcode 11 beta 对 CFBundleVersion 进行了验证,而以前的版本没有进行验证。这些检查是有效的,它确实代表了您的应用程序中的一个问题,但在 Xcode 11 Beta 1 中执行检查的方式也存在一个错误,这使问题更加复杂。

首先,修复 Info.plist 中的 CFBundleVersion。它应该只包含数字和最多两个句点(即##.[.##[.##]],例如:12.4.2).

其次,在修复 CFBundleVersion 后,您需要 killall -9 CoreSimulatorBridge 因为旧值不幸缓存在 CoreSimulatorBridge 中,阻止它识别新值。这部分是一个错误,已在 Xcode 11 Beta 2 中解决。

在我的例子中,我的目标上的 "Build Version" 字段是空的,我将其更改为 1 并且应用能够安装。

在我的例子中,Build Version 字段是空的。我在那里添加了值,但仍然没有用。我尝试了 killall -9 CoreSimulatorBridge 命令,但也没有帮助。 最后,当我检查 info.plist 的 xml(打开方式 -> 源代码)时,CFBundleVersion 键不存在,版本显示在 info.plist 通过 CFBundleShortVersionString.

我刚刚在 info.plist 中添加了下面给出的 CFBundleVersion 密钥并且它起作用了。

<key>CFBundleVersion</key> <string>$(MARKETING_VERSION)</string>

我希望它对其他人也有帮助。

您好,我刚刚解决了这个问题: 我的 info.plist 只有这把钥匙:

<key>CFBundleShortVersionString</key>
<string>2.1</string>

...所以现在所有的工作都添加了这个:

<key>CFBundleVersion</key>
<string>2.1</string>

使用再次运行的模拟器....

注意:在没有 CFBundleVersion 的情况下,我的应用程序在物理设备上运行完美!!!

我去targets,发现"Version"字段是空的,随便填一个数字,比如1.0

我昨天遇到了这个问题。情况是我从 git 中提取我的代码并尝试编译,之后,我可能无法 运行 我的应用程序在模拟器上(或存档应用程序以提交到应用程序商店,版本编号尚未放入存档信息列表,没有版本信息为 1.3.4(123))。错误消息是 CFbundleVersion 未正确设置。我的 Xcode 版本是 11.4 (11E146)。

所以我尝试了以下方法:

  1. 修复 Info.plist 中的 CFBundleVersion。(设置正确的版本格式、数字或 X.X.XX)

  2. 更改Bundle标识符,例如在com.example.test中添加前缀地址com.example。然后尝试在模拟器上编译并安装该应用程序。现在,您可以看到该应用程序可以正常安装。

  3. 然后把Bundle identifier改成你原来的,比如com.example。然后再试一次,你会看到你可以在模拟器或存档上正常安装应用程序。

如果你得到以下 running error。

(*见下面的截图)

这就是解决这个问题的方法。

几个步骤就搞定了。

步骤 1) 转到 Xcode 中的项目导航器。

  • find the info.plist then select it

步骤2)在info.plist.

  • Select the (Bundle Version) field.

    将其值更改为单个数字,从 (4.0) 改为 (4)。 通过删除任何小数点。

步骤 3) 在(捆绑版本)

下方添加 * (Bundle versions string, short)
// Hint: Select the + sign to browse it if necessary .

步骤 4) 在值字段(字符串)中,添加版本,但这次使用小数点。

因此,如果(捆绑版本)是 4,请确保为其添加一个句点 4.0

  • See this picture for guidance.

步骤 5) 构建成功。

   Happy Coding :-)

在 Xcode 版本 12.0 beta 3 中,我在启动模拟器时一直遇到问题。我尝试了所有上述技术。没有任何效果。 我通过将 属性 添加到 Info.plist 解决了这个问题: 捆绑版本字符串(短)和 将其值设置为 1.0 See Image Here

我几个小时都遇到了类似的问题,这才是对我有用的。

  1. 导航到资源文件夹
  2. 查找Info.plist
  3. 添加 key-value 对:CFBundleShortVersionString:
  4. 清理构建文件夹
  5. 清除设备缓存
  6. 运行 和构建