Agregar la opción “Abrir en …” a la aplicación de iOS

En los dispositivos iOS, la aplicación de correo ofrece la opción “Abrir en …” para los archivos adjuntos. Las aplicaciones enumeradas han registrado sus CFBundleDocumentTypes con el sistema operativo. Lo que me pregunto es cómo mi aplicación podría permitir a los usuarios abrir archivos generados por mi aplicación en otras aplicaciones. ¿Mail es la única aplicación que proporciona esta función?

Eche un vistazo a los temas de progtwigción de interacción de documentos para iOS: registrar los tipos de archivos que admite su aplicación .

Siempre que proporcione sus tipos de documentos en su Info.plist, otras aplicaciones que reconozcan ese tipo de documento mostrarán su aplicación en sus opciones de “abrir”. Por supuesto, eso supone que su aplicación crea documentos que otras aplicaciones pueden abrir.

Este es un gran tutorial, que me ayudó.

He agregado soporte para archivos *.xdxf en mi aplicación. En resumen, tienes que hacer dos cosas. Primero, agrega entradas como esta al archivo Plist tu aplicación:

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

Aquí, debe agregar UTExportedTypeDeclarations solo si su tipo de archivo es único. O por otras palabras no está aquí .

Segundo: manejar el método delegado en 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; } 

Para ser visible en la lista de “abrir en …” para todos los archivos, debe agregar esto a su lista

 CFBundleDocumentTypes   CFBundleTypeName Open All Files LSHandlerRank Owner CFBundleTypeRole Editor LSItemContentTypes  public.content public.data    

Una vez que su aplicación se muestre en “abrir en …”, debe cargar ese archivo. La mayoría de los sitios web muestran para implementar esta función:

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

Pero esta función que funcionaba bien en iOS 7 se bloquea en iOS 8. Tuve que implementar la siguiente función para que funcione.

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

Agregué mi aplicación en la lista “abrir en” con éxito de la siguiente manera,

Seleccione información en YourAppName.target Agregue un nuevo filtro de tipo de documento, cuyo nombre es lo que desee y el tipo se define en https://developer.apple.com/library/ios/documentation/Miscellaneous/Reference/UTIRef/Articles/System-DeclaredUniformTypeIdentifiers.html#/ / apple_ref / doc / uid / TP40009259-SW1

Espero que puedas ser exitoso tambien !!

Sin embargo, la función que quiero implementar es “Compartir” como Facebook o Slack do, no puedo hacerlo de forma fija … cualquiera puede darme una gran mano 🙁