检查iOS 9和10上安装的应用程序

我试图检查用户是否安装了几个应用程序。 我需要它在ios9和ios 10上工作。我首先在schemeAvailable上进行测试,即使设备上没有安装传递的app, schemeAvailable func也会返回true。

 func schemeAvailable(scheme: String) -> Bool { if let url = URL(string: scheme) { return UIApplication.shared.canOpenURL(url) } return false } 

我已将以下内容添加到我的info.plist中,即我要检查的应用程序已安装:

 LSApplicationQueriesSchemes  app1 app2  

在我的项目的信息选项卡中,我添加了2个url类型,并为每个类型插入了标识符和url方案。

听起来你没有正确的所有注册。 您的App1和App2都需要URL标识符和方案,而您“想要启动App1和App2”的应用必须定义LSApplicationQueriesSchemes

例如

这是在“App1”

在此处输入图像描述

这是在“App2”

在此处输入图像描述

这是在“LauncherApp”中

在此处输入图像描述

然后,在“LauncherApp”中,我可以这样做:

  let s = "DMCApp1://TestMe" let customURL: URL = URL(string: s)! if UIApplication.shared.canOpenURL(customURL) { print("YES - I can open App1 !!!") UIApplication.shared.open(customURL, options: [:], completionHandler: nil) } else { print("NO - App1 is not available.") } 

您不必在应用程序plist上添加其他应用程序的方案。 如果你这样做,你的应用程序将成为该方案的URL响应者,并始终为真。

canOpenURL方法未在文档上标记为已弃用

我使用自定义方案打开app url的部分代码复制一个片段…

 /** Abre los perfiles de la app en las distintas redes sociales. - Parameters: - url: Esquema personalizado de la app - secondaryURL: Si la app no está presente en el dispositivo abrimos su version web (twitter, facebook, etc...) */ func open(_ url: String, secondaryURL: String? = nil) -> Void { if let url = URL(string: url), UIApplication.shared.canOpenURL(url) { UIApplication.shared.open(url, completionHandler: nil) } else if let secondaryURL = secondaryURL, let url = URL(string: secondaryURL), UIApplication.shared.canOpenURL(url) { UIApplication.shared.open(url, completionHandler: nil) } else { print("No se puede hacer nada de nada.\r\napp_url: \(url)") } } 

这是一个例子。 我尝试打开Twitter应用程序,如果没有呈现,打开Safari并显示推特网页。

 @IBAction private func handleTwitterButtonTap(sender: UIButton) -> Void { let twitter_app_url: String = "twitter://user?screen_name=GetPomodoroApp" let twitter_web_url: String = "https://twitter.com/GetPomodoroApp" self.open(twitter_app_url, secondaryURL: twitter_web_url) }