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

时间:2019-06-04 19:39:34

标签: ios xcode xcode10 xcode11

昨天,我下载了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 beta
  • 我已经清理了我的项目,并将其从最新的分支机构中撤出
  • 我已经从以下位置完全删除了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上运行。

16 个答案:

答案 0 :(得分:29)

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

这里的问题是,带有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中解决。

答案 1 :(得分:11)

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

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

  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中正常运行的模拟器运行时。

您一定喜欢beta版:)

答案 2 :(得分:7)

我有同样的问题。 我发现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和Simulator,然后将CFBundleVersion更改为正确的格式,从而使App正常运行。

答案 3 :(得分:7)

我去了目标,发现“版本”字段为空,只需填写一个数字,例如1.0

enter image description here

答案 4 :(得分:6)

结合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构建应用。

答案 5 :(得分:3)

嗨,我已经解决了: 我在info.p中只有此键:

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

...因此现在所有作品都可以添加:

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

具有可再次使用的模拟器。...

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

答案 6 :(得分:2)

这是Xcode11中的新功能。

在发行说明中它说:

  

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

您可以:

  1. 通过此LINK的样式编辑CFBundleVersion
  2. 重置您的Xcode和模拟器
  3. 再次运行,您将看到它再次运行

在模拟器成功运行应用程序后,您可以再次更改CFBundleVersion,发现它仍然可以在XD上运行

答案 7 :(得分:2)

如果您得到以下内容 running error

(*请参阅下面的屏幕截图)

这是解决此问题的方法。

分几步完成。

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

第2步)。在info.plist中。

步骤3)在(捆绑版本)下方添加* (Bundle versions string, short)

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

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

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

第5步,构建成功。

   Happy Coding :-)

答案 8 :(得分: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.不会在模拟器上构建

link

答案 9 :(得分:1)

在我的情况下,它运行的是11 beta版的模拟器/核心模拟器版本,而运行的是10.1版的模拟器/核心模拟器版本->杀死并让Xcode重新打开模拟器即可解决问题。

答案 10 :(得分:1)

我也遇到了同样的问题。

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

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

答案 11 :(得分:1)

在我的情况下,目标上的“构建版本”字段为空,我将其更改为1,并且该应用能够安装。

答案 12 :(得分:0)

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

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

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

我希望它也能帮助其他人。

答案 13 :(得分:0)

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

所以我尝试了以下方法:

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

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

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

答案 14 :(得分:0)

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

答案 15 :(得分:0)

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

  1. 导航到“资源”文件夹
  2. 找到Info.plist
  3. 添加键值对:CFBundleShortVersionString:
  4. 清理构建文件夹
  5. 清除设备缓存
  6. 运行并构建