昨天,我下载了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运行之前和之后,都没有任何改变。
我已经尝试过的:
~/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上运行。
答案 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)
也发生在我身上,浪费了整整一天的时间寻找可能的原因。
最终解决问题并允许我在模拟器上安装的步骤:
/Library/Developer
(从根目录删除),或者如果要保留备份,请重命名除了问题中提到的步骤(完全卸载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)
答案 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)”
以下内容无法解决该问题:
这是因为CoreSimulator.framework
安装在/Library/Developer/PrivateFrameworks/CoreSimulator.framework
捆绑包之外的Xcode.app
中。
重新安装后,xcode10会检测到当前安装的CoreSimulator.framework
版本比xcode10会安装的版本新,因此它保持原样。
短期修正
/Library/Developer/PrivateFrameworks/CoreSimulator.framework
长期修复
由于这不是“真正的”错误,而是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)
您可以:
在模拟器成功运行应用程序后,您可以再次更改CFBundleVersion,发现它仍然可以在XD上运行
答案 7 :(得分:2)
如果您得到以下内容 running error。
(*请参阅下面的屏幕截图)
这是解决此问题的方法。
分几步完成。
步骤1)转到Xcode中的项目导航器。
第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
第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.
不会在模拟器上构建
答案 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)。
所以我尝试了以下方法:
在Info.plist中修复CFBundleVersion。(设置正确的版本格式,数字或X.X.XX)
更改Bundle标识符,例如,将前缀地址com.example添加到com.example.test。然后尝试在模拟器上编译并安装该应用程序。现在,您可以看到该应用程序可以正常安装。
然后将Bundle标识符更改为原始标识符,例如com.example。然后重试,您将看到可以在模拟器上安装该应用程序或正常存档。
答案 14 :(得分:0)
在Xcode 12.0 beta 3中,我在启动模拟器时一直遇到问题。我尝试了所有上述技术。没事。 我通过将此属性添加到Info.plist来解决: 捆绑版本字符串(短)和 将其值设置为1.0 See Image Here
答案 15 :(得分:0)
我几个小时都遇到了类似的问题,这实际上对我有用。