Мы настраиваем App Clips для iOS — мини-версии приложений до 15 МБ, которые запускаются без установки через QR-код, NFC-метку, Safari Banner или ссылку в Картах. Представьте: пользователь сканирует QR на парковке, оплачивает через Apple Pay за 5 секунд и уходит. Без сценария «сначала установи приложение» конверсия таких действий вырастает в 2–3 раза. Разберём, как это реализовать. Оценим ваш проект и предложим оптимальное решение.
Проблемы, которые решаем: низкая конверсия при установке
Большинство пользователей покидают сайт, если им предлагают скачать приложение ради одноразового действия. App Clip решает это: пользователь получает доступ к функции мгновенно. Мы уже внедряли Clips для сетей парковок, кафе быстрого питания и регистрации на мероприятия — конверсия в целевое действие выросла на 150–200%.
Почему App Clips увеличивают конверсию?
App Clip — не просто урезанная версия, а целенаправленный интерфейс для одного действия. Он загружается за секунду, запрашивает минимум разрешений и умеет принимать платежи через Apple Pay. После завершения пользователю показывается SKOverlay с предложением установить полное приложение. Это мягкий воронка, а не барьер.
Архитектура: таргет и shared код
App Clip — отдельный таргет в Xcode (AppClip), который делит код с основным приложением через shared frameworks или прямое включение файлов. Принципиальное ограничение: App Clip не может обращаться к данным основного приложения (разные sandbox), но может передавать данные при последующей установке через NSUserActivity. Структура проекта:
MyApp (основной таргет) ├── Sources/ │ ├── SharedFeatures/ ← компилируется в оба таргета │ └── MainAppOnly/ MyAppClip (App Clip таргет) └── Sources/ └── ClipEntry.swift Добавить файл в оба таргета: Build Phases → Compile Sources → добавить общие файлы в MyAppClip. Info.plist App Clip требует NSAppClip словарь с NSAppClipRequestEphemeralUserNotification и NSAppClipRequestLocationConfirmation — если нужны уведомления и геолокация. Без явного указания Clip не сможет запрашивать эти разрешения.
Как обработать URL в App Clip?
Каждый App Clip запускается по URL, который регистрируется в App Store Connect → App Clips → Add New App Clip Experience. Формат: https://example.com/clips/parking?lot=A1. В коде URL обрабатывается через NSUserActivityTypes:
@main struct AppClipEntry: App { var body: some Scene { WindowGroup { ContentView() .onContinueUserActivity(NSUserActivityTypeBrowsingWeb) { activity in guard let url = activity.webpageURL else { return } handleClipURL(url) } } } func handleClipURL(_ url: URL) { let components = URLComponents(url: url, resolvingAgainstBaseURL: false) let lot = components?.queryItems?.first(where: { $0.name == "lot" })?.value // Открываем нужный экран } } URL-ассоциация настраивается через apple-app-site-association файл на сервере:
{ "appclips": { "apps": ["TEAMID.com.example.myapp.Clip"] } } Файл должен быть доступен по https://example.com/.well-known/apple-app-site-association с Content-Type application/json.
Платежи и авторизация
Apple Pay работает в App Clip без ограничений — именно поэтому платёжные сценарии — основное применение Clips. PKPaymentAuthorizationViewController подключается стандартно. Sign in with Apple также работает, но пользователь получает эфемерный идентификатор, отличный от основного приложения. При установке полного приложения нужно обработать миграцию через SKOverlay:
let config = SKOverlay.AppClipConfiguration(position: .bottom) let overlay = SKOverlay(configuration: config) overlay.present(in: windowScene) Ephemeral notifications запрашиваются через NSAppClipRequestEphemeralUserNotification — действуют до 8 часов.
Сравнение: App Clip vs полное приложение
| Возможность | App Clip | Полное приложение |
|---|---|---|
| Размер | до 15 МБ (после компрессии) | любой |
| Установка | не требуется | требуется |
| Apple Pay | да | да |
| Push-уведомления | временные (8 ч) | постоянные |
| Фоновые задачи | нет | есть |
| HealthKit | нет | да |
| CloudKit | только чтение публичных записей | полный доступ |
| Передача данных в основное приложение | через NSUserActivity | — |
Как передать данные в основное приложение?
После того как пользователь выполнил действие в Clip и решил установить полное приложение, данные можно передать через NSUserActivity. При первом запуске основного приложения оно проверяет входящий activity от Clip и забирает необходимые параметры. Альтернативно — используйте серверную передачу, сохранив информацию в облаке с временным токеном.
Тестирование
Локальное тестирование: выберите схему MyAppClip и задайте переменную окружения _XCAppClipURL с тестовым URL. Xcode запускает Clip в симуляции без регистрации в App Store Connect. Для полного опыта с реальным QR/NFC требуется TestFlight или продакшн. Симулятор не поддерживает NFC.
Ограничения
- Нет доступа к HealthKit, HomeKit, CallKit
- Нет фоновых задач (Background Tasks)
- CloudKit — только чтение публичных записей
- Размер 15 МБ — после компрессии App Store
Ориентиры по срокам и что входит
Настройка App Clip таргета, URL association, базовый флоу с Apple Pay — занимает 2–3 дня. Полноценный сценарий с передачей данных в основное приложение, SKOverlay, тестированием через TestFlight — 4–5 дней. В работу входит: создание таргета, настройка shared кода, регистрация URL, интеграция Apple Pay и SKOverlay, тестирование на устройстве, консультация по публикации. Свяжитесь с нами, чтобы оценить ваш проект — мы подберём оптимальное решение.







