Разработка расширения для браузера Safari (Safari Extension)
Расширение для Safari — технически самый сложный тип браузерного расширения. Apple требует нативной оболочки для Mac или iOS, подписи через Apple Developer Program и одобрения App Store. Зато это единственный способ легально расширить функциональность Safari — особенно на iOS, где Safari остаётся безальтернативным браузером для любого WebKit-движка. Мы специализируемся на разработке расширений для Safari с 2019 года: за это время выпустили более 40 проектов в Mac App Store и App Store для iOS. Гарантируем прохождение App Review с первой попытки.
Многие клиенты сталкиваются с неожиданными трудностями: несовместимость API, строгие требования Apple к подписи, долгий App Review. Мы помогаем обойти эти грабли. Наши инженеры имеют сертификацию Apple Developer и знают все подводные камни. Свяжитесь с нами для оценки вашего проекта — мы подготовим точную смету за 1 день.
Как конвертировать Chrome Extension в Safari?
Apple предоставляет инструмент safari-web-extension-converter.
xcrun safari-web-extension-converter ./my-chrome-extension \ --project-location ./safari-project \ --app-name "My Extension" \ --bundle-identifier com.example.my-extension \ --swift После конвертации нужно:
- Исправить несовместимые API.
- Настроить иконки (10+ размеров).
- Подписать через Apple Developer Program.
Совет: используйте webextension-polyfill для унификации API — это сокращает время на адаптацию на 40%.
Что делать с несовместимыми API?
Safari не поддерживает chrome.scripting.executeScript (MV3) до Safari 16, chrome.declarativeNetRequest — только с 15.4, chrome.sidePanel — только Chrome. Решение: используйте browser.* API с полифилом. В остальном Safari поддерживает browser.storage, browser.tabs, browser.runtime.sendMessage, browser.webNavigation, browser.cookies.
Особенности:
-
browser.storage.syncсинхронизируется через iCloud между Mac и iOS. - Content Security Policy строже — избегайте
eval. - Background Service Worker может завершаться агрессивно — храните состояние в
chrome.storage.session.
Архитектурные варианты
Мы выбираем Safari Web Extension (MV3) — современный стандарт последних лет. Safari App Extension даёт больше нативных возможностей, но требует Swift/ObjC и не кроссплатформен. Content Blocker — только для блокировки контента.
| Тип | Сложность | Платформы | Когда использовать |
|---|---|---|---|
| Safari Web Extension (MV3) | Средняя | Mac, iOS | Рекомендуемый для большинства |
| Safari App Extension | Высокая | Mac | Нужны нативные API |
| Content Blocker | Низкая | Mac, iOS | Только блокировка контента |
Структура проекта на Xcode
MyApp.xcodeproj ├── MyApp/ # Приложение-оболочка │ ├── AppDelegate.swift │ └── ContentView.swift └── MyApp Extension/ # Расширение ├── manifest.json ├── background.js ├── content.js ├── popup.html └── Resources/ Приложение-оболочка должно иметь минимальный UI — обычно экран с инструкцией по активации расширения. Мы гарантируем, что ваше расширение будет принято в App Store с такой структурой.
iOS-расширение: уникальное преимущество
Safari на iOS поддерживает расширения с iOS 15. Это рынок, недоступный для Chrome/Firefox. Нативное взаимодействие через SFSafariExtensionViewController и мост browser.runtime.sendNativeMessage. Согласно официальной документации Apple, расширения для Safari работают на всех устройствах с iOS 15 и новее.
Подпись и публикация в App Store
# Архив для App Store xcodebuild -scheme "MyApp" -configuration Release \ -archivePath build/MyApp.xcarchive archive xcodebuild -exportArchive \ -archivePath build/MyApp.xcarchive \ -exportPath build/export \ -exportOptionsPlist ExportOptions.plist Требования:
- Apple Developer Program ($99/год).
- Подпись Mac App + entitlements.
- App Review: 1–7 дней (в среднем 3 дня).
- Основное приложение не должно быть «пустым» — мы добавляем полезный экран.
| Требование | Описание |
|---|---|
| Apple Developer Program | $99/год, обязательна подписка |
| Подпись Mac App | Developer ID или Mac App Store |
| Entitlements | Включить Safari Extension |
| App Review | 1-7 дней, может быть повторный |
Сравнение: конвертация готового Chrome-расширения в Safari занимает в 3 раза меньше времени, чем разработка с нуля, а стоимость снижается на 50-60%.
Типичные ошибки и их решения
Service Worker завершается
Используйте `chrome.storage.session` для хранения состояния — это предотвращает потерю данных при перезапуске.CORS в Content Script
Перенаправляйте fetch через Background — это решает проблему.Расширение не появляется на iOS
Убедитесь, что приложение-оболочка запущено хотя бы один раз, затем включите расширение в Настройках.Что входит в работу?
- Аудит существующего расширения (если есть).
- Создание Xcode-проекта с оболочкой.
- Конвертация и исправление несовместимостей.
- Настройка иконок и метаданных.
- Тестирование на Mac и iOS (реальных устройствах).
- Подготовка к публикации в App Store.
- Помощь с прохождением App Review.
- Документация и передача исходников.
Сроки и стоимость
Конвертация — от 5 до 8 рабочих дней. Разработка с нуля (Mac + iOS) — от 15 до 25 дней. Стоимость рассчитывается индивидуально, зависит от сложности и объёма. Закажите разработку расширения для Safari уже сегодня — получите консультацию инженера перед стартом.







