Ios 通过UIActivityViewController导出文件时崩溃
以下代码使用Ios 通过UIActivityViewController导出文件时崩溃,ios,swift,uiactivityviewcontroller,Ios,Swift,Uiactivityviewcontroller,以下代码使用UIActivityViewController将文件从我的应用程序的“tmp”文件夹导出到其他应用程序 private func exportFile(_ fileURL: URL) { let items: [Any] = [fileURL] let activityViewController = UIActivityViewController(activityItems: items, applicationActivities: nil) pr
UIActivityViewController
将文件从我的应用程序的“tmp”文件夹导出到其他应用程序
private func exportFile(_ fileURL: URL) {
let items: [Any] = [fileURL]
let activityViewController = UIActivityViewController(activityItems: items, applicationActivities: nil)
present(activityViewController, animated: true, completion: nil)
}
这段代码运行良好,我可以导出到iCloud
,googledrive
,Mail
,Outlook
和iZip
(后者使用“复制到iZip”)
然而,我的应用程序最近在导出时选择了“复制到iZip”
后开始崩溃,尽管导出到其他应用程序可以正常工作。在它工作和崩溃之间,iOS、iZip和我的应用程序都有更新
Crashlytics
报告了以下内容,但这在iOS中看起来很深,很难知道问题的根本原因是什么:
致命异常:NSInvalidArgumentException
***-[\uu NSArrayM insertObject:atIndex:]:对象不能为零
ShareSheet[UIActivityViewController将执行ServiceActivityWithRequest:completion:][U block\U invoke\U 3
这发生在运行iOS 13.3.1的iPhone上
关于在NSInvalidArgumentException上中断的调试器报告:
> (lldb) bt
* thread #1, queue = 'com.apple.main-thread', stop reason = breakpoint 1.1
frame #0: 0x0000000189ffdf6c libobjc.A.dylib`objc_exception_throw
frame #1: 0x000000018a32c360 CoreFoundation`_CFThrowFormattedException + 112
frame #2: 0x000000018a32b9f4 CoreFoundation`-[__NSArrayM insertObject:atIndex:].cold.1 + 48
frame #3: 0x000000018a1ae120 CoreFoundation`-[__NSArrayM insertObject:atIndex:] + 1104
frame #4: 0x0000000195914e80 ShareSheet`__79-[UIActivityViewController willPerformInServiceActivityWithRequest:completion:]_block_invoke_3 + 1512
frame #5: 0x00000001089497fc libdispatch.dylib`_dispatch_call_block_and_release + 24
frame #6: 0x000000010894abd8 libdispatch.dylib`_dispatch_client_callout + 16
frame #7: 0x0000000108958c34 libdispatch.dylib`_dispatch_main_queue_callback_4CF + 1316
frame #8: 0x000000018a2545e4 CoreFoundation`__CFRUNLOOP_IS_SERVICING_THE_MAIN_DISPATCH_QUEUE__ + 12
frame #9: 0x000000018a24f5d8 CoreFoundation`__CFRunLoopRun + 2004
frame #10: 0x000000018a24eadc CoreFoundation`CFRunLoopRunSpecific + 464
frame #11: 0x00000001941ef328 GraphicsServices`GSEventRunModal + 104
frame #12: 0x000000018e35c63c UIKitCore`UIApplicationMain + 1936
* frame #13: 0x00000001024f1078 xApp`main at AppDelegate.swift:41:7
frame #14: 0x000000018a0d8360 libdyld.dylib`start + 4
(lldb)
第4帧断点处的代码(0x195914e80):
>WTFLogLevel,WTF::Logger::LogSiteIdentifier常量&,char常量(&)[7],无符号长常量&)(.cold.1)
0x195914e80:mov x28,x23
0x195914e84:ldr x0[x23,#0xba0]
0x195914e88:ldr x1[sp,#0x38]
0x195914e8c:mov x2,x25
0x195914e90:mov x3,x20
0x195914e94:bl 0x193904be4;符号存根
知道问题出在哪里吗?我不确定这是我的应用程序、iOS还是iZip的问题。多亏@koen的建议,我联系了iZip支持部门,得到了非常快速和有用的回复。它还与@WILL K.关于尝试不同目录的建议相联系 这个问题基本上似乎与目录权限有关。显然,像iZip这样的一些应用程序会在原位打开共享文件,因此需要权限才能这样做。从这里可以看到,文档/目录“可以通过文件共享提供给用户”,而tmp/目录受到更多限制 因此,我没有使用tmp/目录,而是尝试使用Documents/目录,问题就解决了。感谢iZip对他们快速响应的支持,并使用权限突出显示问题 出于兴趣,在使用/Documents文件夹时,出现了更多与其他应用程序共享的选项 这里还有一篇关于应用程序扩展如何工作(主机应用程序、应用程序扩展程序和容器应用程序)的有用文章:
多亏@koen的建议,我联系了iZip支持部门,得到了非常快速和有益的回复。它还与@WILL K.关于尝试不同目录的建议相联系 这个问题基本上似乎与目录权限有关。显然,像iZip这样的一些应用程序会在原位打开共享文件,因此需要权限才能这样做。从这里可以看到,文档/目录“可以通过文件共享提供给用户”,而tmp/目录受到更多限制 因此,我没有使用tmp/目录,而是尝试使用Documents/目录,问题就解决了。感谢iZip对他们快速响应的支持,并使用权限突出显示问题 出于兴趣,在使用/Documents文件夹时,出现了更多与其他应用程序共享的选项 这里还有一篇关于应用程序扩展如何工作(主机应用程序、应用程序扩展程序和容器应用程序)的有用文章:
看起来您正试图将
nil
的内容插入数组中。因此,根据您共享的代码,items
看起来像什么,可能是nil
?@koen,谢谢,但是items是一个包含文件URL的数组,不是nil。似乎有人试图稍后在iOS深处的某个地方将nil写入另一个数组,但这种情况仅在通过“Copy to iZip”共享文件时发生,而在共享到上述其他应用程序时不会发生。您能否发布包含违规行的代码?您可以在Xcode中添加一个异常断点,它将告诉您它在哪里崩溃。我已经添加了@koen建议的异常断点信息。给人的印象是WebKit功能崩溃了-你联系过iZip开发人员吗?看起来你想在数组中插入nil
。因此,根据您共享的代码,items
看起来像什么,可能是nil
?@koen,谢谢,但是items是一个包含文件URL的数组,不是nil。似乎有人试图稍后在iOS深处的某个地方将nil写入另一个数组,但这种情况仅在通过“Copy to iZip”共享文件时发生,而在共享到上述其他应用程序时不会发生。您能否发布包含违规行的代码?您可以在Xcode中添加一个异常断点,它将告诉您它在哪里崩溃。我已经添加了@koen建议的异常断点信息。给人的印象是WebKit功能崩溃了-你联系过iZip开发者吗?
> WTFLogLevel, WTF::Logger::LogSiteIdentifier const&, char const (&) [7], unsigned long const&) (.cold.1)
0x195914e80 <+1512>: mov x28, x23
0x195914e84 <+1516>: ldr x0, [x23, #0xba0]
0x195914e88 <+1520>: ldr x1, [sp, #0x38]
0x195914e8c <+1524>: mov x2, x25
0x195914e90 <+1528>: mov x3, x20
0x195914e94 <+1532>: bl 0x193904be4 ; symbol stub