Xamarin.iOS 应用程序崩溃并出现错误 DYLD 库未加载,映射文件没有 cdhash,代码必须至少经过临时签名

Xamarin.iOS app crashing with error DYLD Library not loaded, mapped file has no cdhash, Code has to be at least ad-hoc signed

我正在使用 Windows VS 2019 与我的 Mac 配对。我的 Xamarin.iOS 应用程序已开始崩溃,并在 Xcode 设备日志中显示此错误:DYLD 库未加载映射文件没有 cdhash,代码必须至少经过临时签名。

Visual Studio 报告应用在 iPhone 上部署成功,开始打开然后崩溃。只有在调试模式下部署应用程序时才会发生这种情况。我可以在发布模式下部署到我的 iPhone 和应用程序商店连接,应用程序运行良好。但我需要能够调试。

此外,应用程序在 phone 上崩溃后,Visual Studio 仍在 运行 调试中。但是当我停止它时,会弹出一个对话框错误,提示“调试器无法终止一个或多个进程:Mono:调试器仍在附加到进程或进程当前未执行为调试选择的代码类型。 “

我联系了 Apple 开发人员技术支持,但他们说他们无能为力,因为我使用的是第 3 方工具 (Visual Studio)。这就是他们会告诉我的所有内容,“这个错误的直接原因非常清楚:你的程序的某些部分没有签名,因此 iOS 拒绝加载它......因为第三方工具正在创建您要求 Xcode 签名的项目。具体而言,此消息:DYLD Library not loaded mapped file has no cdhash 意味着代码根本没有签名。如果您使用的是普通 Xcode 项目,您永远不会遇到这种情况。"

我已经卸载并重新安装了钥匙串中的所有 Apple 证书,并确保将信任设置设置为使用系统默认值。我已经撤销并删除了我在 Apple Developer 中的所有证书、身份和个人资料,并重新创建了它们。我已经将 Xcode 升级到 12.5,将 Visual Studio 升级到 16.10.1。

这是来自 Xcode 设备日志的错误:

异常类型:EXC_CRASH (SIGABRT) 异常代码:0x0000000000000000、0x0000000000000000 例外说明:EXC_CORPSE_NOTIFY 终止说明:DYLD,库未加载:@rpath/libGT.Partners.Phone_Order_Entry.iOS.exe.dylib |参考自:/private/var/containers/Bundle/Application/2F1480CA-1262-4922-B33E-91E0DFC6DFDC/GT.Partners.Phone_Order_Entry.iOS.app/GT.Partners.Phone_Order_Entry.iOS |原因:没有找到合适的图像。找到了: | /private/var/containers/Bundle/Application/2F1480CA-1262-4922-B33E-91E0DFC6DFDC/GT.Partners.Phone_Order_Entry.iOS.app/libGT.Partners.Phone_Order_Entry.iOS.exe.dylib: 代码签名在 (/private/var/containers/Bundle/Application/2F1480CA-1262-4922-B33E-91E0DFC6DFDC/GT.Partners.Phone_Order_Entry.iOS.app/libGT.Partners.Phone_Order_Entry.iOS.exe.dylib) 在使用库验证的过程中使用无效:映射文件没有 cdhash,完全未签名?代码必须至少是临时签名的。 | /private/var/containers/Bundle/Application/2F1480CA-1262-4922-B33E-91E0DFC6DFDC/GT.Partners.Phone_Order_Entry.iOS.app/libGT.Partners.Phone_Order_Entry.iOS.exe.dylib:stat() 失败,errno=1

有没有人遇到并解决了这个问题?请帮忙!

在与 Microsoft 合作的过程中,他们在 Visual Studio 中发现了一个错误。他们发现问题完全与增量构建选项有关。这似乎在 Visual Studio 2019 年 Windows 部署到连接到 Mac 的 iPhone 时被打破。他们可以通过启用增量构建来重现模板项目中的确切错误。

显然,增量构建通过创建 lib.exe.dylib 动态库来工作,以允许仅构建和加载更改,因此错误似乎是生成的增量库未正确签名。

当我禁用增量构建时,我可以将我的应用程序部署到 iPhone 并对其进行调试。

取消选中 iOS 构建设置中的“启用增量构建”。 感谢@jwrule。