¿Es posible lanzar otra aplicación en iOS 8 usando Swift?

¿Es posible iniciar cualquier aplicación desde otra aplicación?

Por ejemplo, en mi aplicación, quiero que el usuario presione un button e inicie otra aplicación (no cierre la aplicación actual, simplemente abra otra aplicación y cambie a ella).

¿Cómo puedo hacerlo en iOS 8 usando Swift?

La única forma de hacerlo es utilizar un enlace profundo , que debe haber creado el desarrollador de una aplicación.

El iOS SDK no permite que su aplicación interactúe con otras aplicaciones a less que utilice el nuevo marco de Extensiones introducido con iOS 8. Sin embargo, esta extensión solo le permite proporcionar contenido y capacidades de su propia aplicación dentro de otra: no puede obligar a otra aplicación a abierto.

Lo que ha descrito solo es posible con enlaces profundos que son bastante poco comunes y deben ser definidos por el desarrollador de la aplicación que está intentando abrir.

Así, por ejemplo, un enlace en su aplicación podría abrir la aplicación Pocket, que le permite save artículos para lectura posterior, con un enlace pocket:// (en lugar de http:// o https:// ) y, de forma similar , la aplicación Pebble Smartwatch se puede abrir con un enlace pebble:// . Sin embargo, estos son enlaces que están definidos por los desarrolladores de esas aplicaciones y esta técnica no se aplica a todas las aplicaciones.

Creo que estás buscando esquemas de URL de Apple. Si la aplicación de terceros tiene definidos Esquemas de URL, puede usar el siguiente código para abrirlo:

 var url = NSURL(string: "http://stackoverflow.com/questions/24728854/is-it-possible-to-launch-another-app-in-ios-8-using-swift/"); // Change the URL with your URL Scheme if UIApplication.shanetworkingApplication().canOpenURL(url!) == true { UIApplication.shanetworkingApplication().openURL(url!) } 

No importa el idioma que esté usando (Obj-C / Swift), siempre puede usar openURL para abrir un esquema de URL para iniciar una aplicación (si se proporciona la URL).

Otros ya han descrito la idea correcta aquí, pero con algunos problemas relacionados con el event handling la URL y la function para llamar. UIApplication.shanetworking.open(_ url:) está en desuso y se reemplaza por una nueva versión con un manejador de finalización.

Como otros han mencionado, necesita que la aplicación del destinatario haya definido un esquema de URL. Siempre que lo hayan hecho, puedes hacer algo como esto:

 func launchTwitterApp() { guard let url = URL(string: "twitter://user?id=12345") else { preconditionFailure("There was something wrong with our url, this shouldn't happen") } UIApplication.shanetworking.open(url, completion: { success in if success { print("We opened the Twitter app.") } else { print("Something went wrong. We might not have the necessary app or the right url.") } }) } 

Podemos hacer esto creando una URL personalizada de esa aplicación y luego podemos abrir una URL personalizada en el evento de clic de un button.

 let kCustomURLScheme = "DemoDriver://Daffomac.DemoDriver" func openCustomApp() { let Url = NSURL(string: kCustomURLScheme) if UIApplication.shanetworking.canOpenURL(Url! as URL) { UIApplication.shanetworking.openURL(Url! as URL) } else { //networkingirect to safari because the user doesn't have Instagram UIApplication.shanetworking.openURL(NSURL(string: kCustomURLScheme)! as URL) } }