【问题标题】:Adding "Open In..." option to iOS app向 iOS 应用程序添加“打开方式...”选项
【发布时间】:2011-04-28 05:28:43
【问题描述】:

在 iOS 设备上,邮件应用为附件提供“打开方式...”选项。列出的应用程序已向操作系统注册其 CFBundleDocumentTypes。我想知道的是我的应用程序如何允许用户在其他应用程序中打开我的应用程序生成的文件。 Mail 是唯一提供此功能的应用吗?

【问题讨论】:

标签: iphone ipad ios


【解决方案1】:

看看Document Interaction Programming Topics for iOS: Registering the File Types Your App Supports

只要您在 Info.plist 中提供您的文档类型,识别该文档类型的其他应用就会在其“打开方式”选项中列出您的应用。当然,这假设您的应用创建了其他应用可以打开的文档。

【讨论】:

  • 谢谢!这看起来正是我正在寻找的。而且,是的,我的应用会创建 .csv 和 .zip 文件。
  • 您可能需要编辑您的答案以引用新链接(Apple 显然已经重新组织了 iOS 参考库)。
  • 我在我的应用程序中添加了文档类型。例如,我添加了 PDF 类型。但是当我运行文档交互时,它只需要快速查看应用程序。
  • 有什么方法可以让我的应用首先出现?当工作表出现时,它首先建议一堆应用程序,如 AirDrop、Kindle、Messages、Slack 等——它们甚至无法打开我的自定义文件类型——然后使用我的应用程序打开的选项一直在列表的底部。
【解决方案2】:

This 是一个很棒的教程,对我很有帮助。

我在我的应用程序中添加了对*.xdxf 文件的支持。简而言之,你必须做两件事。首先 - 将这样的条目添加到您应用的 Plist 文件中:

<key>CFBundleDocumentTypes</key>
<array>
    <dict>
        <key>CFBundleTypeName</key>
        <string>XDXF Document</string>
        <key>LSHandlerRank</key>
        <string>Owner</string>
        <key>CFBundleTypeRole</key>
        <string>Editor</string>
        <key>LSItemContentTypes</key>
        <array>
            <string>com.alwawee.xdxf</string>
        </array>
    </dict>
</array>
<key>UTExportedTypeDeclarations</key>
<array>
    <dict>
        <key>UTTypeDescription</key>
        <string>XDXF - XML Dictionary eXchange Format</string>
        <key>UTTypeConformsTo</key>
        <array>
            <string>public.text</string>
        </array>
        <key>UTTypeIdentifier</key>
        <string>com.alwawee.xdxf</string>
        <key>UTTypeTagSpecification</key>
        <dict>
            <key>public.filename-extension</key>
            <string>xdxf</string>
            <key>public.mime-type</key>
            <string>text/xml</string>
        </dict>
    </dict>
</array>

在这里,只有当您的文件类型是唯一的时,您才应该添加UTExportedTypeDeclarations。或者换句话说不是here

第二个——处理AppDelegate中的委托方法:

- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation
{

    if (url != nil && [url isFileURL]) {

        //  xdxf file type handling

        if ([[url pathExtension] isEqualToString:@"xdxf"]) {

            NSLog(@"URL:%@", [url absoluteString]);

        }

    }

    return YES;
}

【讨论】:

    【解决方案3】:

    为了在所有文件的“打开方式...”列表中可见,您需要将其添加到您的 plist 中

    <key>CFBundleDocumentTypes</key>
    <array>
        <dict>
            <key>CFBundleTypeName</key>
            <string>Open All Files</string>
            <key>LSHandlerRank</key>
            <string>Owner</string>
            <key>CFBundleTypeRole</key>
            <string>Editor</string>
            <key>LSItemContentTypes</key>
            <array>
               <string>public.content</string>
               <string>public.data</string>
            </array>
        </dict>
    </array>
    

    一旦您的应用显示在“打开方式...”中,您需要加载该文件。大多数网站都实现了这个功能:

    func application(application: UIApplication, openURL url: NSURL, sourceApplication: String, annotation: AnyObject?) -> Bool
    {
       println("Open URL "+url.path!)
    }
    

    但是这个在 IOS 7 中运行良好的函数在 IOS 8 中崩溃了。我必须实现以下函数才能让它运行。

    func application(application: UIApplication, handleOpenURL url: NSURL) -> Bool 
    {
       println("Open URL "+url.path!)
    }
    

    【讨论】:

      【解决方案4】:

      我成功地将我的应用添加到“打开方式”列表中,如下所示,

      添加一个新的文档类型过滤器,名称是你想要的任何东西,类型在https://developer.apple.com/library/ios/documentation/Miscellaneous/Reference/UTIRef/Articles/System-DeclaredUniformTypeIdentifiers.html#//apple_ref/doc/uid/TP40009259-SW1中定义

      希望你也能成功!!

      但是,我想实现的功能是像 Facebook 或 Slack 那样的“分享”,我不能让它静止......任何人都可以帮我一把:(

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-10-04
        • 1970-01-01
        • 2016-03-06
        • 2012-07-30
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多