在iOS应用中添加“Open In ...”选项

时间:2010-10-20 18:44:41

标签: iphone ipad ios

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

4 个答案:

答案 0 :(得分:37)

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

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

答案 1 :(得分:19)

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;
}

答案 2 :(得分:4)

为了在所有文件的“打开...”列表中可见,您需要将其添加到您的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!)
}

答案 3 :(得分:2)

我将我的应用添加到&#34;打开&#34;列表成功如下,

Select info in YourAppName.target 添加一个新的文档类型过滤器,其名称是您想要的任何名称,类型在https://developer.apple.com/library/ios/documentation/Miscellaneous/Reference/UTIRef/Articles/System-DeclaredUniformTypeIdentifiers.html#//apple_ref/doc/uid/TP40009259-SW1

中定义

希望你也能成功!!

但是,我要实现的功能是&#34;分享&#34;像Facebook或Slack那样,我无法让它变得更好......任何人都可以给我一个大手:(