安装 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 之前和之后没有任何改变.
我已经尝试过的:
- 我已经删除了 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 上运行。
我遇到了同样的问题。
我发现 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)
您可以:
- 按此样式编辑您的 CFBundleVersion LINK
- 重置您的 Xcode 和模拟器
再次- 运行,你会看到它再次起作用
当你运行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.
它不会在模拟器上构建
在我的例子中,运行 11 beta 的 simulator/coresimulator 版本与 10.1 的版本 -> 杀死并让 Xcode 重新打开模拟器解决了问题。
我也遇到过,花了将近一整天的时间寻找可能的原因。
最终解决问题并允许我在模拟器上安装的步骤:
- 退出Xcode和iOS模拟器
- 删除
/Library/Developer
(根目录下的那个),如果要保留备份则重命名它
- 重新启动Xcode,同意安装命令行工具
- 继续你留下的工作:)
除了问题中提到的步骤(完全卸载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修复
- 卸载xcode11
- 安装Xcode 10(如果已经安装就不需要re-install)
- 删除
/Library/Developer/PrivateFrameworks/CoreSimulator.framework
- 启动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)。
所以我尝试了以下方法:
修复 Info.plist 中的 CFBundleVersion。(设置正确的版本格式、数字或 X.X.XX)
更改Bundle标识符,例如在com.example.test中添加前缀地址com.example。然后尝试在模拟器上编译并安装该应用程序。现在,您可以看到该应用程序可以正常安装。
然后把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
我几个小时都遇到了类似的问题,这才是对我有用的。
- 导航到资源文件夹
- 查找Info.plist
- 添加 key-value 对:CFBundleShortVersionString:
- 清理构建文件夹
- 清除设备缓存
- 运行 和构建
昨天,我下载了 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 之前和之后没有任何改变.
我已经尝试过的:
- 我已经删除了 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 上运行。
我遇到了同样的问题。 我发现 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)
您可以:
- 按此样式编辑您的 CFBundleVersion LINK
- 重置您的 Xcode 和模拟器 再次
- 运行,你会看到它再次起作用
当你运行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.
它不会在模拟器上构建
在我的例子中,运行 11 beta 的 simulator/coresimulator 版本与 10.1 的版本 -> 杀死并让 Xcode 重新打开模拟器解决了问题。
我也遇到过,花了将近一整天的时间寻找可能的原因。
最终解决问题并允许我在模拟器上安装的步骤:
- 退出Xcode和iOS模拟器
- 删除
/Library/Developer
(根目录下的那个),如果要保留备份则重命名它 - 重新启动Xcode,同意安装命令行工具
- 继续你留下的工作:)
除了问题中提到的步骤(完全卸载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修复
- 卸载xcode11
- 安装Xcode 10(如果已经安装就不需要re-install)
- 删除
/Library/Developer/PrivateFrameworks/CoreSimulator.framework
- 启动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)。
所以我尝试了以下方法:
修复 Info.plist 中的 CFBundleVersion。(设置正确的版本格式、数字或 X.X.XX)
更改Bundle标识符,例如在com.example.test中添加前缀地址com.example。然后尝试在模拟器上编译并安装该应用程序。现在,您可以看到该应用程序可以正常安装。
然后把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
我几个小时都遇到了类似的问题,这才是对我有用的。
- 导航到资源文件夹
- 查找Info.plist
- 添加 key-value 对:CFBundleShortVersionString:
- 清理构建文件夹
- 清除设备缓存
- 运行 和构建