我正在开发一个关卡编辑器,它将把关卡文件发送到游戏应用程序。我在游戏中注册了一个自定义 UTI,以便它显示在UIDocumentInteractionController
选项菜单中。
但是,当我选择“在 MyApp 中打开”时,我收到控制台错误“Invalid LSOpenOperation request - No applications found to open document”。
我已经尝试过这里建议的解决方案,即为UTTypeConformsTo
. 然而,这并没有帮助。
我还在这里阅读了以下讨论,其中包括:
导出的 UTI 中设置的 mime 类型必须与电子邮件附件的 mime 类型匹配。我们的 plist 文件将 mime 类型设置为 application/octet-stream,但电子邮件被附加为 application/json mime 类型。如果这些不匹配,您的应用程序似乎将出现在“打开方式...”菜单中,但当您尝试打开电子邮件附件时它不会启动您的应用程序。我们将两者都切换到 application/json 并解决了问题。
我了解如何在电子邮件附件中设置 mime 类型。但我正在打开一个使用 NSFileManager 在本地创建的文件。有什么方法我必须为本地文件设置 mime-type 吗?或者这更有可能是其他一些问题?
不确定其中哪一个是重要的,但这是我的文档类型设置(在游戏中,而不是编辑器——我假设由于上述错误,游戏的 Info.plist 是问题):
<key>CFBundleDocumentTypes</key>
<array>
<dict>
<key>CFBundleDocumentTypes</key>
<array>
<dict>
<key>CFBundleTypeName</key>
<string>MyApp Level Pack</string>
<key>CFBundleTypeOSTypes</key>
<array>
<string>com.myapp.sslp</string>
</array>
<key>CFBundleTypeRole</key>
<string>Viewer</string>
<key>LSHandlerRank</key>
<string>Owner</string>
<key>LSItemContentTypes</key>
<array>
<string>public.json</string>
<string>com.myapp.sslp</string>
</array>
</dict>
</array>
<key>CFBundleTypeName</key>
<string>MyApp Level Pack</string>
<key>LSItemContentTypes</key>
<array>
<string>com.myapp.sslp</string>
<string>public.json</string>
</array>
</dict>
</array>
对于导出的类型声明:
<key>UTExportedTypeDeclarations</key>
<array>
<dict>
<key>UTExportedTypeDeclarations</key>
<array>
<dict>
<key>UTTypeConformsTo</key>
<array>
<string>public.data</string>
<string>public.json</string>
</array>
<key>UTTypeDescription</key>
<string>MyApp Level Pack</string>
<key>UTTypeIdentifier</key>
<string>com.myapp.sslp</string>
<key>UTTypeTagSpecification</key>
<dict>
<key>public.filename-extension</key>
<string>sslp</string>
<key>public.mime-type</key>
<string>application/json</string>
</dict>
</dict>
</array>
<key>UTTypeConformsTo</key>
<array>
<string>public.data</string>
<string>public.json</string>
</array>
<key>UTTypeDescription</key>
<string>MyApp Level Pack</string>
<key>UTTypeIdentifier</key>
<string>com.myapp.sslp</string>
</dict>
</array>