Может ли такое быть, чтобы 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>