52

昨天,我下载了 Xcode 11 的 beta 版本。之后,我打开了我的项目并尝试使用新的 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.
--

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

我已经尝试过的:

  • 我已删除 Xcode 11 测试版
  • 我已经清理了我的项目并从最新的分支中提取了它
  • 我已经从以下位置完全删除了 Xcode 10:
~/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
  • 然后安装全新的稳定版 10.2.1

我可以毫无问题地运行其他未经 Xcode 11 测试的项目。

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

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

4

16 回答 16

56

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

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

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

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

于 2019-06-11T04:22:10.240 回答
22

也发生在我身上,浪费了几乎一整天的时间寻找可能的原因。

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

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

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

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

你一定会喜欢测试版的:)

于 2019-06-06T16:14:52.603 回答
9

我去targets发现“Version”一栏是空的,填个数字就好了,比如1.0

在此处输入图像描述

于 2020-02-28T21:19:58.697 回答
8

我有同样的问题。我发现 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)

而这个链接是CFBundleVersion的格式。

当我解决这个问题时,我发现第一次运行 App 时是否遇到了 CFBundleVersion 问题。那么无论格式是否正确,它总是有问题。所以我重新启动 Xcode 和模拟器,并将 CFBundleVersion 更改为正确的格式,应用程序运行正常。

于 2019-06-05T07:19:03.457 回答
7

结合 Sgeven.Zheng 和 Cristik 的答案。

原因

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

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

“没有 CFBundleVersion 的捆绑包无效,无法正确安装在设备或模拟器上。CoreSimulator 现在会在流程的早期检查并拒绝此类捆绑包,并显示更清晰的错误消息。(49892531)”

以下不会解决问题:

  • 卸载 Xcode11 Beta
  • 卸载并重新安装 Xcode 10

这是因为CoreSimulator.framework安装在包/Library/Developer/PrivateFrameworks/CoreSimulator.framework之外Xcode.app。重新安装时,xcode10 检测到当前安装的版本CoreSimulator.framework比 xcode10 安装的版本新,因此保持原样。

短期修复

  1. 卸载 xcode11
  2. 安装 Xcode 10(如果已经安装则无需重新安装)
  3. 消除/Library/Developer/PrivateFrameworks/CoreSimulator.framework
  4. 启动 Xcode 10 并同意安装命令行工具

长期修复

由于这不是“真正的”错误,而是 Xcode11 的预期行为,因此最终需要采取措施确保应用程序始终使用有效的CFBundleVersion.

于 2019-06-09T19:01:15.350 回答
5

就我而言,我的目标上的“构建版本”字段为空,我将其更改为 1,并且该应用程序能够安装。

于 2019-08-22T21:01:17.293 回答
4

嗨,我刚刚解决了这个问题:我的 info.plist 中只有这个键:

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

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

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

与再次工作的模拟器....

注意:没有 CFBundleVersion 我的应用程序在物理设备上运行良好!!!

于 2020-02-28T07:50:01.953 回答
2

这是 Xcode11 中的一个新功能。

在发行说明中它说:

没有 CFBundleVersion 的捆绑包无效,无法正确安装在设备或模拟器上。CoreSimulator 现在会在流程的早期检查并拒绝此类捆绑包,并提供更清晰的错误消息。(49892531)

你可以:

  1. 通过此链接的样式编辑您的 CFBundleVersion
  2. 重置您的 Xcode 和模拟器
  3. 再次运行,你会看到它再次工作

当您在模拟器中成功运行应用程序时,您可以再次更改您的 CFBundleVersion,您会发现它仍然可以工作 XD

于 2019-06-05T07:50:15.917 回答
2

如果出现以下 运行错误

(*见下面的截图)

这是解决此问题的方法。

分几步完成。

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

步骤 2)在 info.plist 中。

步骤 3)在 (Bundle Version) 下面添加一个 * (Bundle versions string, short )

// Hint: Select the + sign to browse it if necessary .

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

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

步骤 5) 构建成功。

   Happy Coding :-)
于 2020-03-31T16:13:54.510 回答
1

除此之外,我注意到如果您的 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.它不会建立在模拟器上

关联

于 2019-06-06T15:33:07.260 回答
1

在我的情况下,它运行的是 11 beta 的模拟器/coresimulator 版本与 10.1 的模拟器 -> 杀死并让 Xcode 重新打开模拟器解决了这个问题。

于 2019-06-06T15:36:05.777 回答
0

我也遇到了同样的问题。

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

如果您不确定在哪里可以找到它,只需执行以下操作:Xcode -> Preferences -> Locations 并选择 Derived Data 路径旁边的箭头

于 2019-06-10T21:50:55.427 回答
0

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

我刚刚在 info.plist 中添加了CFBundleVersion键,如下所示,它起作用了。

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

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

于 2019-10-10T07:30:00.500 回答
0

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

所以我尝试了以下方法:

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

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

  3. 然后将 Bundle 标识符更改为您的原始标识符,例如 com.example。然后再试一次,你会看到你可以在模拟器上安装应用程序或正常存档。

于 2020-03-29T00:47:27.753 回答
0

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

于 2020-08-12T16:56:19.230 回答
0

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

  1. 导航到资源文件夹
  2. 查找信息.plist
  3. 添加键值对:CFBundleShortVersionString:
  4. 清理构建文件夹
  5. 清除设备缓存
  6. 运行和构建
于 2020-09-24T21:20:12.083 回答