Cra sh при экспорте файла через UIActivityViewController - PullRequest
1 голос
/ 06 марта 2020

Следующий код экспортирует файл из папки tmp моего приложения в другие приложения, используя UIActivityViewController.

private func exportFile(_ fileURL: URL) {
    let items: [Any] = [fileURL]

    let activityViewController = UIActivityViewController(activityItems: items, applicationActivities: nil)

    present(activityViewController, animated: true, completion: nil)
}

Этот код работал нормально, и я мог экспортировать в iCloud, Google Drive , Mail, Outlook и iZip (последний использует 'Copy to iZip').

Однако мое приложение недавно начало падать после выбора 'Copy to iZip' при экспорте, хотя экспортирует в другой приложения работает нормально. Между этим, работающим и сбойным, были обновления iOS, iZip и моего приложения.

Crashlytics сообщает следующее, но это выглядит глубоко в iOS, и трудно понять, что такое root причина проблемы:

Неустранимое исключение: NSInvalidArgumentException *** - [__ NSArrayM insertObject: atIndex:]: объект не может быть нулевым

ShareSheet __79- [UIActivityViewController willPerformInServiceActivityWithquReReRe: ] _block_invoke_3

Это происходит на iPhone работающем iOS 13.3.1

Отчете отладчика о взломе 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 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 

Есть идеи, в чем может быть проблема? Я не уверен, что это проблема с моим приложением, iOS или iZip.

1 Ответ

0 голосов
/ 14 марта 2020

Благодаря предложению @koen я связался со службой поддержки iZip и получил очень быстрый и полезный ответ. Это также связано с предложением @WILL K. попробовать другой каталог.

Проблема, по-видимому, связана с разрешениями на каталог. Очевидно, что некоторые приложения, такие как iZip, открывают общий файл на месте, и для этого требуется разрешение. Как можно увидеть здесь https://developer.apple.com/library/archive/documentation/FileManagement/Conceptual/FileSystemProgrammingGuide/FileSystemOverview/FileSystemOverview.html, каталог Documents / «может быть доступен пользователю через общий доступ к файлам», тогда как каталог tmp / более ограничен.

Поэтому вместо использования каталог tmp / я попытался использовать каталог Documents /, и проблема была решена. Благодаря поддержке iZip для быстрого реагирования и выделения проблемы с разрешениями.

Для интереса при использовании папки / Documents появилось больше возможностей для обмена с другими приложениями.

Также есть полезная статья о том, как работают расширения приложений (хост-приложения, расширения приложений и контейнерные приложения) здесь: https://developer.apple.com/library/archive/documentation/General/Conceptual/ExtensibilityPG/ExtensionOverview.html

...