关于将iPhone应用程序与文件类型关联的主题.

this个信息丰富的问题中,我了解到应用程序可以与自定义URL协议相关联.

那是将近一年前的事了,从那时起,苹果就推出了"文档支持",它更进一步,允许应用程序与文件类型相关联.在documentation人中有很多关于如何设置你的应用程序在遇到未知文件类型时启动其他合适的应用程序的讨论.这意味着关联不会像URL协议注册那样在任何应用程序中开箱即用.

这就引出了一个问题:是否像Safari或Mail这样的系统应用程序实现了这个系统来 Select 相关的应用程序,或者它们会像以前一样什么都不做吗?

推荐答案

文件类型处理是iPhone OS 3.2的新功能,与现有的自定义URL方案不同.您可以注册应用程序来处理特定的文档类型,任何使用文档控制器的应用程序都可以将这些文档的处理交给您自己的应用程序.

例如,我的应用程序Molecules(其源代码可用)处理.pdb和.pdb.gz文件类型,如果通过邮箱或其他受支持的应用程序接收.

要注册支持,您的Info.plist中需要包含类似以下内容:

<key>CFBundleDocumentTypes</key>
<array>
    <dict>
        <key>CFBundleTypeIconFiles</key>
        <array>
            <string>Document-molecules-320.png</string>
            <string>Document-molecules-64.png</string>
        </array>
        <key>CFBundleTypeName</key>
        <string>Molecules Structure File</string>
        <key>CFBundleTypeRole</key>
        <string>Viewer</string>
        <key>LSHandlerRank</key>
        <string>Owner</string>
        <key>LSItemContentTypes</key>
        <array>
            <string>com.sunsetlakesoftware.molecules.pdb</string>
            <string>org.gnu.gnu-zip-archive</string>
        </array>
    </dict>
</array>

提供了两个图像,它们将用作Mail和其他能够显示文档的应用程序中支持的类型的图标.LSItemContentTypes键允许您提供应用程序可以打开的统一类型标识符(UTI)array.有关系统定义的UTI的列表,请参阅苹果的Uniform Type Identifiers Reference.关于UTI的更多细节可以在苹果的Uniform Type Identifiers Overview中找到.这些指南驻留在Mac开发者中心,因为此功能已从Mac移植到另一边.

上例中使用的UTI之一是系统定义的,但另一个是特定于应用程序的UTI.需要导出特定于应用程序的UTI,以便系统上的其他应用程序可以识别它.为此,您需要向Info.plist中添加一个部分,如下所示:

<key>UTExportedTypeDeclarations</key>
<array>
    <dict>
        <key>UTTypeConformsTo</key>
        <array>
            <string>public.plain-text</string>
            <string>public.text</string>
        </array>
        <key>UTTypeDescription</key>
        <string>Molecules Structure File</string>
        <key>UTTypeIdentifier</key>
        <string>com.sunsetlakesoftware.molecules.pdb</string>
        <key>UTTypeTagSpecification</key>
        <dict>
            <key>public.filename-extension</key>
            <string>pdb</string>
            <key>public.mime-type</key>
            <string>chemical/x-pdb</string>
        </dict>
    </dict>
</array>

此特定示例将com.sunsetlakesoftware.molecules.pdb UTI导出为.pdb文件扩展名,对应于MIME类型chemical/x-pdb.

准备就绪后,您的应用程序将能够处理附加到邮箱或来自系统上其他应用程序的文档.在Mail中,您可以点击并按住以调出可以打开特定附件的应用程序列表.

当附件打开时,您的应用程序将启动,您将需要在您的-application:didFinishLaunchingWithOptions:应用程序委托方法中处理此文件.以这种方式从Mail加载的文件似乎被复制到应用程序的Documents目录中,该目录位于与它们到达的邮箱箱相对应的子目录下.您可以使用如下代码在应用程序委托方法中获取此文件的URL:

NSURL *url = (NSURL *)[launchOptions valueForKey:UIApplicationLaunchOptionsURLKey];

请注意,这与我们处理自定义URL方案时使用的方法相同.您可以使用如下代码将文件URL与其他URL分开:

if ([url isFileURL])
{
    // Handle file being passed in
}
else
{
    // Handle custom URL scheme
}

Ios相关问答推荐

如何调整包含extView的UICollectionViewListCell的大小?

(Flutter)获取图像从图像拾取器保存和加载问题

如何在SwiftUI中扩展 colored颜色 超出顶部边缘

一堆UIGraphics方法在iOS 17中被弃用,没有明确的替代方法?

GraphQL iOS Apollo客户端自动持久化查询导致崩溃

在 Android 和 iOS 应用程序上下文中阻止后台线程有哪些缺点?

如何更改 SwiftUI 弹出视图的大小?

如何避免任何绑定空错误并更好地获取代码

未找到签名证书​​iOS Distribution

ARKit vs. ARCore vs. Vuforia vs. D'Fusion Mobile vs. Layar SDK

如何关闭情节提要弹出框

如何在react 导航中获取当前路由名称?

从 NSUserDefaults 字典 iOS 中删除所有键

如何使用 Contacts Framework 获取 iOS 9 中的所有联系人记录

SwiftUI - 列表行中的多个按钮

是否可以将 Socket.io 与 AWS Lambda 一起使用?

如何删除UITableView中最后一个单元格的最后一个边框?

打开 XIB 文件后 Xcode 6.3 冻结/挂起

Xcode中的终端窗口?

Xcode 5 和 iOS 7:架构和有效架构