canOpenURL всегда возвращает false

Может ли такое быть, чтобы canOpenURL всегда возвращала false? После запуска monobudget я столкнулся с интересным кейсом. Основным сценарием в приложении является авторизация пользователя в монобанке во время первого запуска. Этот шаг можно, конечно же, пропустить, но в силу специфики приложения я его отношу к основному сценарию.

Сначала мне написал один пользователь и сказал, что, нажимая на кнопку авторизации, ничего не происходит. Я подумал «очень странно» и «что бы это могло быть?»

Позже второй пользователь влепил единицу в отзыве в App Store по той же самой причине. Дальше пользователей становилось больше и в логах я стал замечать, что проблема серьёзная.

Гуглить пришлось долго, но в результате причина причина был найдена.

Не знаю как на iOS 13, но на iOS 14 конструкция

if UIApplication.shared.canOpenURL(url) {
  UIApplication.shared.open(url, options: , completionHandler: nil)
}

не работает, т.е. canOpenURL всегда возвращает false если браузер по-умолчанию был изменен с Safari на Chrome, например.

Причем, если не делать проверку canOpenURL, UIApplication.shared.open успешно откроет переданный url.

Решением того, что canOpenURL всегда возвращает false стало добавление https & http в LSApplicationQueriesSchemes в Info.plist файл.

<key>LSApplicationQueriesSchemes</key>
<array>
<string>http</string>
<string>https</string>
</array>

canOpenURL в документации Apple

Без рубрики