Xcode: показываем экран загрузки во время рендеринга в wkwebview

К сожалению при использовании wkwebview на IOS, инициализация webkit довольно медлительна. И занимает при первом старте порядка 5-10 секунд. Потому для того чтобы «развлечь» пользователя во время ожидания можно показать например какую-то анимацию.

Загрузку можно организовать как-то так:

Результатом будет показ «фона» и анимации до показа страницы. Далее нам нужно отловить что рендеринг состоялся и убрать анимацию:

Запуск Cocoapods на Apple Silicon (M1)

При запуске в проекте xcode команды pod install, вываливается сообщение об отсутствии пакета с поддержкой данной архитектуры.

Решение: будем запускать pod install из консоли запущенной под эмулятором Rozetta. Для этого в свойствах консоли отметим соответствующую галочку.

xcode: Вывод уведомления пользователю IOS

Задача: вывести уведомление о событии пользователю. Решение: 1. Сначала попросим у пользователя разрешить получать уведомления:

2. Оформим вывод уведомления через функцию:

3. Нужно помнить, что уведомление в IOS<10 выводится только в том случае, если приложение «свернуто». Поэтому реализуем вывод уведомления, даже если приложение открыто:

wkwebview краш при выборе файла для upload

Собственно суть возникновения ошибки: приложение с wkwebview падает при попытке выбора файла для загрузки на сервер через стандартную вебформу с ошибкой:

Source type must be UIImagePickerControllerSourceTypeCamera

Решение: как оказалось, это происходит из-за не верно по мнению webview заполнения тэга input. Правильно:

xcode: проверка наличия интернет на устройстве и вывод локального html в wkwebview

Задача: при обнаружении отсутствия интернет на устройстве вывести в виджет wkwebview уведомление о его отсутствии оформленное в виде HTML страницы

Решение:

1) Создадим файл Reachability.swift с классом,отдающим доступность:

В основной код добавим слушатель изменения состояния сети и отдающий html страницу при отсутствии интернет:

Вставляем в проект локальную папку с файлом html и файлом картинки:

И изменим код следующим образом:

1 2