为什么我的 iOS 生成会失败,并显示“在 keychain 中未找到有效的 iPhone 代码签名密钥”?

错误的原因

当有关项目查找有效的代码签名凭据但找不到凭据时,会出现此错误消息。 在物理 iOS 设备上进行测试和部署需要代码签名;临时和 App Store 版本也需要。

如果正在从 Windows 上的 Visual Studio 生成并尝试使用分发配置文件和证书进行生成,但无远程设备或连接到 Mac 生成主机的物理设备(已选为目标设备),则可能会发生这种情况。 如果有本地设备或连接到所选 Windows 电脑的设备,则即使它安装在 Mac 上,生成也无法找到分发证书。

预配设备

如果以前尚未预配 iOS 设备,以下指南将引导你完成完整的分步过程:设备预配指南

使用 iOS 模拟器时出现 Bug

注意

此问题已在最新版本的 Xamarin for Visual Studio 中解决。 但是,如果问题是在软件的最新版本上出现的,请提交新的 bug 并附上完整的版本控制信息和生成日志输出记录。

Xamarin.Visual Studio 3.11 中有一个 bug,导致 Xamarin.Forms 模板中的 iOS 项目将 codeign Entitlements.plist 添加到模拟器生成;有效阻止使用模拟器进行测试。

修复方法

可以从 .csproj 文件的调试版本中删除<CodesignEntitlements>标志以解决该问题。 你可以按如下所示进行操作:

警告

.csproj 文件中的错误可能会中断项目,因此最好先备份文件,然后再尝试这样做。

  1. 右击解决方案窗格中的 iOS 项目,然后选择“卸载项目”
  2. 再次右击项目,然后选择“编辑[ProjectName].csproj”
  3. 找到 Debug PropertyGroups,它们应从如下所示的标志开始:
    • 调试:<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|iPhoneSimulator' ">
    • 发布:<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|iPhoneSimulator' ">
  4. 在使用模拟器的每个生成中,删除或注释禁止以下属性:<CodesignEntitlements>Entitlements.plist</CodesignEntitlements>
  5. 重新加载项目,你应该能够部署到模拟器。

后续步骤

如需进一步的帮助,请与我们联系,或者,如果在使用上述信息后仍然存在此问题,请参阅 Xamarin 有哪些可用的支持选项?,了解有关联系人选项、建议以及如何在需要时提交新 Bug 的信息。