Ограничения PWA и iOS
Урок честно перечисляет, чего PWA не умеет, с особым вниманием к ограничениям на iOS.
PWA мощны, но не всесильны: ряд возможностей платформ им недоступен, и сильнее всего ограничения проявляются на iOS.
Общие ограничения
PWA работают в песочнице браузера, поэтому у них нет полного доступа к устройству, как у нативных приложений. Типично недоступны или ограничены:
- глубокая интеграция с системой (некоторые датчики, контакты, SMS, фоновые длительные задачи);
- доступ к произвольным файлам вне выбранных пользователем;
- тяжёлая работа в фоне без событий — браузер усыпляет Service Worker.
Многое из этого постепенно закрывается новыми Web API, но «догоняющим» темпом и неравномерно по браузерам.
Ограничения именно на iOS
Apple исторически поддерживала PWA сдержанно. Ключевые болевые точки на iPhone/iPad:
| Возможность | iOS (Safari) |
| Установка на домашний экран | есть, но вручную (Поделиться → На экран Домой) |
beforeinstallprompt | нет — своей кнопки установки не сделать |
| Push-уведомления | появились поздно и только для установленных на домашний экран PWA |
| Background Sync | нет |
| Лимиты хранилища | жёстче; кеш может очищаться при нехватке места/долгом неиспользовании |
Отдельная тонкость: на iOS все браузеры обязаны использовать движок Safari (WebKit), поэтому установить «Chrome с его возможностями» на iPhone не получится — ограничения системные.
Как работает под капотом усыпление воркера
Даже там, где Service Worker поддержан, нельзя рассчитывать на «вечный фон». Браузер запускает Service Worker под событие и через несколько десятков секунд бездействия выгружает его, чтобы экономить батарею и память. Поэтому длительные операции в Service Worker оборачивают в event.waitUntil() (чтобы воркер не усыпили посреди дела), а долгие фоновые сценарии строят на специальных API (Push, Background Sync), а не на «бесконечном цикле».
Как с этим жить
- Прогрессивное улучшение. Стройте базовый функционал так, чтобы он работал везде, а платформенные бонусы добавляйте опционально.
- Проверяйте поддержку. Перед использованием API проверяйте его наличие и давайте запасной путь.
- Тестируйте на реальном iOS. Многие сюрпризы видны только на устройстве Apple.
Частые ошибки
- Считать, что на iOS всё как в Chrome. Часть возможностей там отсутствует или работает иначе.
- Делать ключевую функцию на API без фолбэка. На неподдерживающей платформе приложение сломается.
- Рассчитывать на бесконечный фон. Service Worker усыпляется; используйте событийные API.
Итоги
- PWA ограничены песочницей браузера: нет полного доступа к железу и длительного фона.
- На iOS жёстче всего: ручная установка, нет
beforeinstallpromptи Background Sync, лимиты хранилища. - Service Worker усыпляется — долгие задачи строят на Push/Sync, а не на цикле.
- Спасает прогрессивное улучшение, проверка поддержки и тесты на реальном iOS.