无法在 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/文件类型