XARrin中的NSURL absoluteString崩溃构建了iOS共享扩展

时间:2015-09-29 15:31:10

标签: c# ios xamarin mono ios-app-extension

我们一直在建立信使类似应用程序的分享扩展(来自safari)。 现在我们遇到了一个大问题,当我试图获取url字符串

时,扩展崩溃了

CRASH:

踏1

未处理的例外:

0 Mono 0x01746691 mono_handle_exception_internal + 2168

1 Mono 0x01745e13 mono_handle_exception + 30

2 Mono 0x0173ed2d mono_arm_throw_exception + 104

3 com.XXX.ShareExtension 0x00268e44 throw_exception + 64

在/Users/builder/data/lanes/2077/d8e9592a/source/maccore/runtime/Delegates.generated.cs:100中的ObjCRuntime.Runtime.throw_ns_exception(intptr)[0x00000] at(包装器本机到托管)ObjCRuntime.Runtime.throw_ns_exception(intptr)< 0x00048>

6 com.XXX.ShareExtension 0x006fe5c0 xamarin_throw_ns_exception + 52

7 com.XXX.ShareExtension 0x007004b0 _ZL17exception_handlerP11NSException + 224

8 CoreFoundation 0x242cbba9 + 644

9 libobjc.A.dylib 0x35c7f087 + 174

10 libc ++ abi.dylib 0x35463e17 + 78

11 libc ++ abi.dylib 0x354638f7 __cxa_rethrow + 102

12 libobjc.A.dylib 0x35c7ef47 objc_exception_rethrow + 42

这意味着单声道崩溃。进一步看,我看到:

踏2

iOS_ShareExtension [336]:未处理的托管例外:

抛出Objective-C异常。名称:NSInvalidArgumentException原因:

NSGetSizeAndAlignment():不支持的类型编码规范'Y'在'Y,'h≈Π0i≈Π√™o≈Π√ª'在'Y,'h≈Π0i≈Π√™o≈Π√ ª'

本机堆栈跟踪:

0 CoreFoundation 0x242cb883 + 150

1 libobjc.A.dylib 0x35c7edff objc_exception_throw + 38

2 CoreFoundation 0x242cce71 + 536

3 CoreFoundation 0x242cef69 + 60

4 CoreFoundation 0x241f9515 + 516

5 libextension.dylib 0x355c2e47 + 150

6 com.XXX.ShareExtension 0x000643f4 wrapper_managed_to_native_ObjCRuntime_Messaging_void_objc_msgSend_IntPtr_IntPtr_IntPtr_intptr_intptr_intptr_intptr_intptr + 128

7 com.XXX.ShareExtension 0x0003a5e8 Foundation_NSItemProvider_LoadItem_string_Foundation_NSDictionary_System_Action_2_Foundation_NSObject_Foundation_NSError + 384

8 com.XXX.ShareExtension 0x0000c5d4 iOS_ShareExtension_ShareViewController_ViewDidLoad + 1048

我的代码崩溃了:

    NSExtensionItem content = ExtensionContext.InputItems [0];

    foreach (NSItemProvider item in content.Attachments) {
        if (item.HasItemConformingTo ("public.url")){
            item.LoadItem (UTType.URL,null, OnItemLoaded);
            break;
        }
    }

然后:

NSUrl url = objectLoaded as NSUrl;
_sharedURl = url.AbsoluteString; // THIS CRASH!!!

知道如何绕过这个吗?我甚至试过以各种方式转换这个NSUrl。

1 个答案:

答案 0 :(得分:0)

此解决方案可以解决此问题:https://bugzilla.xamarin.com/show_bug.cgi?id=34518

我会仔细检查它是否真的到达了您认为导致问题的线路(使用Console.WriteLine,因为调试附件不适用于扩展)。如果objectLoaded不是NSUrl,则强制转换将返回null,我希望有一个空指针异常,而不是一个模糊的编码错误。

编辑:引用的错误修复尚未进入Xamarin alpha通道,但问题似乎是通过将回调方法公开来解决的。在我的情况下,我使用的是内联代理,但这只是一种私有方法"在幕后"。