是否有可能使用Swift在iOS 8中启动另一个应用程序?

是否有可能从另一个应用程序内启动任何应用程序?

例如,在我的应用程序中,我希望用户按下button并启动另一个应用程序(不要closures当前的应用程序,只需打开另一个应用程序并切换到该应用程序)。

我如何使用Swift在iOS 8中执行此操作?

唯一的方法是使用应用程序开发人员必须创build的深层链接 。

iOS SDK不允许您的应用程序与其他应用程序进行交互,除非它使用iOS 8中引入的新扩展框架 。但是,此扩展只允许您在另一个应用程序中提供自己的应用程序的内容和function:不能强制另一个应用程序打开。

你所描述的只有深层次的链接才是可能的,这些链接是非常不寻常的,必须由你试图打开的应用程序的开发者来定义。

因此,例如,您的应用程序中的链接可以打开Pocket应用程序,该应用程序允许您使用pocket://链接(而不是http://https:// )保存文章供以后阅读,Pebble Smartwatch应用程序可以用pebble://链接打开。 但是,这些链接是由这些应用程序的开发人员定义的,并且这种技术并不适用于所有应用程序。

我认为你正在寻找Apple URL Schemes。 如果第三方应用程序具有任何已定义的URL Schemes,则可以使用以下代码打开它:

 if let url = URL(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.shared.canOpenURL(url) { UIApplication.shared.openURL(url) } } 

无论您使用什么语言(Obj-C / Swift),您都可以使用openURL打开URLscheme来启动应用程序(如果提供了URL)。

其他人已经描述了正确的想法已经在这里,但有一些与处理URL和调用函数有关的问题。 UIApplication.shared.open(_ url:)已被弃用,并用一个完成处理程序的新版本replace。

正如其他人所提到的,您需要收件人应用程序已经定义了一个URLscheme。 只要他们有,你可以做这样的事情:

 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.shared.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.") } }) } 

我们可以通过创build该应用程序的自定义URL来做到这一点,之后,我们可以打开一个button的点击事件的自定义URL。

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