无法在 IOS 13 上导入具有自定义 UTI 扩展名的文件

Posted

技术标签:

【中文标题】无法在 IOS 13 上导入具有自定义 UTI 扩展名的文件【英文标题】:Unable to import files with custom UTI extension on IOS 13 【发布时间】:2019-11-02 10:10:37 【问题描述】:

由于 ios 13 的更新无法导入自定义 UTI 文件(在 12.4 的设备上完美运行)

我已经从这个页面下载了简单的工作项目:https://www.raywenderlich.com/813044-uiactivityviewcontroller-tutorial-sharing-data,我也将它用作我的应用程序共享系统的基础。

在 IOS 13(12.4 工作)上,当获取示例文件(从电子邮件或数据文件夹)并单击复制到应用程序时,IOS 返回主屏幕,几秒钟后我收到 Safari 崩溃错误。

这是用于导出文件的项目 info.plist 部分:

<key>UTExportedTypeDeclarations</key>
    <array>
        <dict>
            <key>UTTypeConformsTo</key>
            <array>
                <string>public.data</string>
            </array>
            <key>UTTypeDescription</key>
            <string>Book Tracker Document</string>
            <key>UTTypeIconFiles</key>
            <array>
                <string>book_320.png</string>
                <string>book_64.png</string>
                <string>book_44.png</string>
                <string>book_22.png</string>
            </array>
            <key>UTTypeIdentifier</key>
            <string>com.raywenderlich.BookTracker.btkr</string>
            <key>UTTypeTagSpecification</key>
            <dict>
                <key>public.filename-extension</key>
                <string>btkr</string>
                <key>public.mime-type</key>
                <string>application/booktracker</string>
            </dict>
        </dict>
    </array>
</key>

我尝试过的事情:

添加一个 UTImportedTypeDeclarations,其细节与 UTExportedTypeDeclarations 相同,因为项目中没有 ---- STILL CRASH

在这个 post 的结尾处,建议从 info.plist 中删除该部分(不修改文档类型部分)并从界面重新创建它 ---- STILL CRASH(它在为 public.filneame-extension 或 mime-type 添加数组项时也会导致 xcode 中的无限循环)

上述解决方案的各种组合

这是我经常遇到的主要错误:

*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '*** -[__NSArrayM insertObject:atIndex:]: object cannot be nil'
terminating with uncaught exception of type NSException

完整日志在这里:log

我有点想不通!请帮忙!

【问题讨论】:

您能在此处添加崩溃详细信息吗? 这是指向错误的链接:drive.google.com/file/d/1sfW6-sfC2uj4jlFEKY1BpzLWyL5YKFe7/… ``` 应​​用程序特定信息:*** 由于未捕获的异常 'NSInvalidArgumentException' 导致应用程序终止,原因:'*** -[__NSArrayM insertObject: atIndex:]: 对象不能为 nil' ``` 【参考方案1】:

我没有你的问题的答案,但我对 Ray Wenderlich 的同一个示例应用程序也有类似的问题。不幸的是,本教程的评论部分已关闭。

我正在使用已设置所有 UTI 信息的“完成”版本。

就我而言,我想将“.btkr”文档保存到文件应用程序中。这工作正常,但是如果我点击保存在 Files 中的 .btkr 文档,它会打开 BookTracker 应用程序,但在 Book.swift importData(from url: URL) 方法中悄然失败。

我将保护语句分解为 do/try/catch 块,我看到的是“文件“New Book.btkr”无法打开,因为您无权查看它。”这是从“let data = try Data(contentsOf: url)”语句中抛出的。

奇怪的是,如果我通过电子邮件共享同一个文档,点击 .btkr 附件成功打开应用程序并导入 .btkr 就好了。通过 AirDrop 共享也可以。

我不知道这是否只是 iOS 13 的错误,因为我不再拥有任何装有旧版 iOS 的设备。由于 Wenderlich 的教程总体上都非常好(这是 2019 年 2 月的,iOS 13 之前的)我怀疑你的问题和我的问题是 iOS 13 的错误。

【讨论】:

【参考方案2】:

我在我的应用上看到了完全相同的内容。在 startAccessingSecurityScopedResource 和 stopAccessingSecurityScopedResource 之间包装 readFromURL 和 writeToURL 有助于我运行 iOS 13.2.3 的 iPad,但我仍然看到 Safari 崩溃并且无法在运行 13.2.2 的 iPhone 上打开文档。

【讨论】:

以上是关于无法在 IOS 13 上导入具有自定义 UTI 扩展名的文件的主要内容,如果未能解决你的问题,请参考以下文章

UIDocumentPickerViewController initWithDocumentTypes 中的 iOS 自定义 UTI

带有 UIDocumentPickerViewController 的 iOS 自定义 UTI/文件类型

无法将 .ppt 文件导入我的 iOS 应用程序

在 UIDocumentPickerViewController 中显示自定义 UTI 的图标

ios13通知内容自定义高度

在 iOS 中为 mime 类型或 UTI 类型使用内置图标