将“打开在…”选项添加到iOS应用程序

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

查看iOS文档交互编程主题:注册您的应用程序支持的文件types 。

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

这是一个很好的教程,帮助了我。

我在应用程序中添加了对*.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> 

在这里,只有在文件types是唯一的UTExportedTypeDeclarations才应该添加UTExportedTypeDeclarations 。 或者换句话说不在这里 。

第二 – 在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; } 

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

一旦您的应用程序显示在“打开…”中,您需要加载该文件。 大多数网站显示执行此function:

 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!) } 

我在“打开”列表中添加我的应用程序如下,

在YourAppName.target中选择信息 添加一个新的文档typesfilter,该名称是任何你想要的和types定义在https://developer.apple.com/library/ios/documentation/Miscellaneous/Reference/UTIRef/Articles/System-DeclaredUniformTypeIdentifiers.html#/ / apple_ref / DOC / UID / TP40009259-SW1

希望你也能成功!

然而,我想实现的function是像Facebook或Slack的“共享”,我不能让它仍然…任何人都可以给我一个大手:(