Xamarin.iOS应用程序在丢失Mono运行时时崩溃;找不到合适的图像;代码签名被阻止的mmap
我试图用iOS的关联应用程序扩展来构建Xamarin Forms应用程序。我的解决方案的结构是这样的:Xamarin.iOS应用程序在丢失Mono运行时时崩溃;找不到合适的图像;代码签名被阻止的mmap
MyProject
\BitThicket.MyProject -- Forms project
\BitThicket.MyProject.Core -- NET Standard 2.0 class library
\BitThicket.MyProject.iOS -- iOS project
\BitThicket.MyProject.Extensions.Intents -- Intents project
每个项目从模板创建的,我做了一些变化 - 和崩溃发生在启动,因此没有达到我的代码反正。
我针对iOS 11.1,并且设置了有效的签名证书和配置文件。我能够构建应用程序并从Visual Studio for Mac(7.2.2)将它部署到设备(我的iPhone 7+)。但是,当调试器尝试为我启动应用程序时,显示空白的初始视图,然后应用程序崩溃。调试器从不连接。顺便说一句,当应用程序在设备上手动启动时,它会以同样的方式崩溃。
我检索使用Xcode中设备日志和崩溃是这样的:
Incident Identifier: 948709A2-74AA-4E16-BEEA-072CFCF4AB38
CrashReporter Key: ######################################
Hardware Model: iPhone9,2
Process: BitThicket.Turns.iOS [2457]
Path: /private/var/containers/Bundle/Application/#####-##############-############/BitThicket.Turns.iOS.app/BitThicket.Turns.iOS
Identifier: com.bitthicket.Turns
Version: 1.0 (1.0)
Code Type: ARM-64 (Native)
Role: Foreground
Parent Process: launchd [1]
Coalition: com.bitthicket.Turns [818]
Date/Time: 2017-11-24 09:41:15.3743 -0600
Launch Time: 2017-11-24 09:41:15.3041 -0600
OS Version: iPhone OS 11.1.2 (15B202)
Baseband Version: 3.21.01
Report Version: 104
Exception Type: EXC_CRASH (SIGABRT)
Exception Codes: 0x0000000000000000, 0x0000000000000000
Exception Note: EXC_CORPSE_NOTIFY
Termination Description: DYLD, Library not loaded: @rpath/Mono.framework/Mono | Referenced from: /var/containers/Bundle/Application/########-####-####-####-############/BitThicket.Turns.iOS.app/BitThicket.Turns.iOS | Reason: no suitable image found. Did find: | /private/var/containers/Bundle/Application/########-####-####-####-############/BitThicket.Turns.iOS.app/Frameworks/Mono.framework/Mono: code signing blocked mmap() of '/private/var/containers/Bundle/Application/########-####-####-####-############/BitThicket.Turns.iOS.app/Frameworks/Mono.framework/Mono'
Triggered by Thread: 0
Filtered syslog:
None found
Thread 0 Crashed:
0 dyld 0x0000000106722f1c __abort_with_payload + 8
1 dyld 0x00000001067226f4 abort_with_payload_wrapper_internal + 100
2 dyld 0x0000000106722720 fcntl + 0
3 dyld 0x00000001066f8498 dyld::fastBindLazySymbol+ 17560 (ImageLoader**, unsigned long) + 0
4 dyld 0x00000001066fb714 dyld::_main+ 30484 (macho_header const*, unsigned long, int, char const**, char const**, char const**, unsigned long*) + 7376
5 dyld 0x00000001066f521c _dyld_start + 68
Thread 0 crashed with ARM Thread State (64-bit):
x0: 0x0000000000000006 x1: 0x0000000000000001 x2: 0x000000016d50a470 x3: 0x00000000000000a5
x4: 0x000000016d50a070 x5: 0x0000000000000000 x6: 0x0000000000000000 x7: 0x00000000000002f0
x8: 0x0000000000000020 x9: 0x0000000000000009 x10: 0x6f6e6f4d2f736b72 x11: 0x6f77656d6172662e
x12: 0x726f77656d617246 x13: 0x2e6f6e6f4d2f736b x14: 0x726f77656d617266 x15: 0x00276f6e6f4d2f6b
x16: 0x0000000000000209 x17: 0x000000008000001f x18: 0x0000000000000000 x19: 0x0000000000000000
x20: 0x000000016d50a070 x21: 0x00000000000000a5 x22: 0x000000016d50a470 x23: 0x0000000000000001
x24: 0x0000000000000006 x25: 0x00000001028f4000 x26: 0x0000000106736000 x27: 0x0000000106735f88
x28: 0x000000016d50ba70 fp: 0x000000016d50a040 lr: 0x00000001067226f4
sp: 0x000000016d50a000 pc: 0x0000000106722f1c cpsr: 0x00000000
Binary Images:
0x1028f4000 - 0x103e43fff BitThicket.Turns.iOS arm64 <###########################> /var/containers/Bundle/Application/########-####-####-####-############/BitThicket.Turns.iOS.app/BitThicket.Turns.iOS
0x1066f4000 - 0x106733fff dyld arm64 <##########################> /usr/lib/dyld
EOF
有谁知道是什么原因造成的?在Xamarin论坛或其他地方似乎没有很多直接的答案(包括SO,不幸)。我已经尝试了一些简单的东西,比如重新启动Visual Studio for Mac,或者从我的设备中删除应用程序并清理/重建解决方案,但这些东西似乎没有帮助。
在终止描述中,它听起来像试图加载单声道,但mmap被代码签名以某种方式阻止 - 但我真的不知道如何。该应用程序构建并部署到我的设备,所以它看起来像代码签名正在工作。
经过深入挖掘,我发现了几个似乎相似的问题示例,最常见的方法似乎是签名证书配置不正确。我仍然对其根本原因感到好奇 - 为什么背后是“为什么”。最终,我发现我在“系统”和“登录”钥匙链上都有“Apple全球开发者关系证书颁发机构”,并且在“应始终信任”时配置为“始终信任”只在我的“登录”钥匙串中进行配置,并配置为“系统默认值”。
一旦我纠正了这些问题,我又试了一次,但仍然遇到了问题。它在重新启动我的Mac之后终于消失了。
感谢你们这样做,这发生在我对我的应用程序使用自动签名后,重新启动(并且干净,虽然不确定如果需要)做了生意! :) – WickedW