WEBサイト制作・アプリ開発・システム開発・ブランディングデザイン制作に関するご相談はお気軽にご連絡ください。
          構想段階からじっくりとヒアリングし、お客様の課題にあわせたアプローチ手法でお客様の“欲しかった”をカタチにしてご提案いたします。
        
        Blog スタッフブログ
                              Swift
                              システム開発
                          
          [Swift]iOS15でカスタムURLスキームを利用する

こんにちは、株式会社MIXシステム開発担当のBloomです。
早速本題のiOS15でカスタムURLスキームを利用してアプリをURLから起動する手順について、
お仕事の中で得た知見を共有させていただきたいと思います。
カスタムURLスキームの設定
カスタムURLスキームの設定は[Targets] -> [Info] -> [URL types]から行います。

Identifierにはアプリを特定するユニークな文字列を、URL SchemesにはURLでいうプロトコル名に相当する利用したい名称を、Roleにはアプリの種別をEditor、Viewer、Noneから選択してください。
実行結果

これだけでURLからのアプリ起動ができるようになりました。
カスタムURLスキームのパラメータを受け取る
このままURLスキームのパラメータも受け取りましょう。iOS13からは、SceneDelegateによってURLスキームから開かれた場合の動作をキャッチできます。下記コードをSceneDelegateへ追記してください。
    @available(iOS 13.0, *)
    func scene(_ scene: UIScene, openURLContexts URLContexts: Set<UIOpenURLContext>) {
        guard let url = URLContexts.first?.url,
              let urlComponents = URLComponents(url: url, resolvingAgainstBaseURL: true),
              let text = urlComponents.queryItems?.first(where: { $0.name == "text" })?.value else { return }
        if let vc = self.window?.rootViewController as? ViewController {
            vc.welcomeText = text
        }
    }
    
    @available(iOS 13.0, *)
    func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) {
        guard let _ = (scene as? UIWindowScene) else { return }
        
        guard let url = connectionOptions.urlContexts.first?.url,
              let urlComponents = URLComponents(url: url, resolvingAgainstBaseURL: true),
              let text = urlComponents.queryItems?.first(where: { $0.name == "text" })?.value else { return }
        if let vc = self.window?.rootViewController as? ViewController {
            vc.welcomeText = text
        }
    }ここでは簡単にRootViewControllerに下記記述を行うことで直接値を受け渡していますが、基本的にはNotificationCenterを利用した実装が適切でしょう。
    @IBOutlet weak var welcomeLabel: UILabel?
    var welcomeText: String? {
        didSet {
            welcomeLabel?.text = welcomeText
        }
    }
    
    override func viewDidLoad() {
        super.viewDidLoad()
        welcomeLabel?.text = welcomeText
    }実行結果

これでURLスキームに含まれるパラメータの取得も簡単にできました。良かったですね。
参考文献
Defining a Custom URL Scheme for Your App – Apple Developer Documentation
 
           
           
          