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

检查iOS 9和iOS 10上已安装的应用程序,ios,swift,url,swift3,Ios,Swift,Url,Swift3,我正在检查一个用户是否安装了几个应用程序。我需要它在ios9和iOS10上工作。 我首先在ios9上进行测试,schemeAvailablefunc返回true,即使应用程序通过了测试 设备上未安装 func schemeAvailable(scheme: String) -> Bool { if let url = URL(string: scheme) { return UIApplication.shared.canOpenURL(url) } ret

我正在检查一个用户是否安装了几个应用程序。我需要它在ios9和iOS10上工作。 我首先在ios9上进行测试,
schemeAvailable
func返回true,即使应用程序通过了测试 设备上未安装

func schemeAvailable(scheme: String) -> Bool {
   if let url = URL(string: scheme) {
       return UIApplication.shared.canOpenURL(url)
   }
   return false
}
我已将以下内容添加到我的info.plist,即我将检查的应用程序已安装:

<key>LSApplicationQueriesSchemes</key>
<array>
<string>app1</string>
<string>app2</string>
</array>
LSApplicationQueriesSchemes
附件1
附件2

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

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

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

我复制了一个代码片段,其中的一部分代码用于通过自定义方案打开应用程序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并显示twitter网页

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

听起来你并不是所有的注册都是正确的。您的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.")
    }

@dmorrow的可能重复我正在解释ios9的一个问题
canOpenURL
不受欢迎您可以共享实际的url方案-不是
app1
app2
?@dmorrow com.companyname.app1,com.companyname.app2。它们尚未在商店中发布。它们是本地应用如果我在项目的“信息”选项卡中删除了两种url类型、标识符和url方案,则url“app1://”-error:“(null)”失败,url“app2://”-error:“(null)”失败,即使app2已安装到hi@user2363025。我添加了一个例子。这个答案令人困惑。方案必须在
LSApplicationQueriesSchemes
下列出。方案必须为您自己的应用程序(您自己的方案)列出。但是没有注册外部计划,比如twitter、facebook@rmaddy@Adolfo那是不对的。与
canOpenURL
一起使用的任何URL方案必须列在
LSApplicationQueriesSchemes
下。这是iOS 9以来的一项要求。