LoginSignup
5
3

More than 3 years have passed since last update.

iOS14でデフォルトブラウザ/メーラー変更時にcanOpenURLがfalseになる問題の整理と横展開調査結果

Last updated at Posted at 2020-09-26

前提環境

  • Xcode 11.3.1
  • Swift 5.1.3
  • iOS 14.0 / 14.0.1

問題事象

サンプルコード:

let url = URL(string: "https://qiita.com")!
guard UIApplication.shared.canOpenURL(url) else {
    return
}
UIApplication.shared.open(url, options: [:], completionHandler: nil)
  • iOS 14.0 / 14.0.1でデフォルトブラウザをSafari以外(Chromeなど)に設定し上のコードを実行すると、ブラウザが起動しない。
  • Xcode 11 (iOS 13 SDK) でビルドしてもiOS 14の端末では発生する。
  • 14.0から発生しているが14.0.1で解消していないということは、すなわちiOSのバグではなく仕様変更?

<デフォルトブラウザをChromeに変更する手順>
1. iOS 14の端末で、Chromeをインストールする。
2. 設定>Chromeを選択する。
3. ブラウザの一覧が表示されるので、Chromeを選択する

原因

iOS 14.0以降でデフォルトブラウザをSafari以外(Chromeなど)に設定すると、UIApplication.shared.canOpenURL()がfalseを返却するため。

回避策

Info.plistのLSApplicationQueriesSchemesに"https"および"http"を設定すると回避できます。

関連事象

iOS 14においてはデフォルトメーラーについても変更できるようになりました。
"mailto"についても同様に、LSApplicationQueriesSchemesに追加しないと、デフォルトメーラーが変更されている場合にはUIApplication.shared.canOpenURL()がfalseを返却します。

横展開調査

以上の事項は、文末の「参考リンク」の記事で得られた有益な情報です。
執筆者の方には深く感謝を申し上げたいです。

一方以下は、私が独自に追加調査をした結果になります。

電話アプリの"tel"および"telprompt"スキーム

"tel"はApple URL Schemesにてドキュメント化されているスキームです。
"telprompt"はドキュメント化されていないスキームです。

いずれも、LSApplicationQueriesSchemesに追加しなくても、iOS 14でも電話アプリが起動します。

ちなみに、「将来、電話アプリのデフォルトが変更できるようになったら?」という疑問があったので、LSApplicationQueriesSchemesに"tel"を追加してみたところ、追加してもちゃんと動作します(当たり前?)。

Walletアプリの"shoebox"スキーム

ドキュメント化されていないスキームです。
LSApplicationQueriesSchemesに追加しなくても、iOS 14でもWalletアプリが起動します。

設定アプリ

こちらのスキームは文字列ではなくUIApplication.openSettingsURLStringとなりますが、(当然ながら)LSApplicationQueriesSchemesに追加しなくても、iOS 14でも設定アプリが起動します。

検証結果の整理

  • iOS 14では、カスタムスキームに加えて、デフォルトを変更できるアプリのスキームもInfo.plistに定義しないとダメです。
  • ドキュメント化されているスキーム、ドキュメント化されていないけど動くスキーム、いずれも、現時点でブラウザとメーラー以外は影響を受けていない模様です。

参考リンク

【iOS14】デフォルトブラウザを変更した時にcanOpenURLがfalseになる問題
iOS 14対応で気をつけるべきこと

5
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
3