Реализация Handoff между iPhone и Mac

TRUETECH занимается разработкой, поддержкой и обслуживанием мобильных приложений iOS, Android, PWA. Имеем большой опыт и экспертизу для публикации мобильных приложений в популярные маркеты Google Play, App Store, Amazon, AppGallery и другие.

Разработка и поддержка любых видов мобильных приложений:

Информационные и развлекательные мобильные приложения
Новостные приложения, игры, справочники, онлайн-каталоги, погодные, фитнес и здоровье, туристические, образовательные, социальные сети и мессенджеры, квиз, блоги и подкасты, форумы, агрегаторы
Мобильные приложения электронной коммерции
Интернет-магазины, B2B-приложения, маркетплейсы, онлайн-обменники, кэшбэк-сервисы, биржи, дропшиппинг-платформы, программы лояльности, доставка еды и товаров, платежные системы
Мобильные приложения для управления бизнес-процессами
CRM-системы, ERP-системы, управление проектами, инструменты для команды продаж, учет финансов, управление производством, логистика и доставка, управление персоналом, системы мониторинга данных
Мобильные приложения электронных услуг
Доски объявлений, онлайн-школы, онлайн-кинотеатры, платформы предоставления электронных услуг, платформы кешбека, видеохостинги, тематические порталы, платформы онлайн-бронирования и записи, платформы онлайн-торговли

Это лишь некоторые из типы мобильных приложений, с которыми мы работаем, и каждый из них может иметь свои специфические особенности и функциональность, а также быть адаптированным под конкретные потребности и цели клиента.

Услуги, которые мы предлагаем
Показано 1 из 1Все 1735 услуг
Реализация Handoff между iPhone и Mac
Средний
~3-5 дней
Часто задаваемые вопросы

Наши компетенции:

Этапы разработки

Последние работы

  • image_mobile-applications_feedme_467_0.webp
    Разработка мобильного приложения для компании FEEDME
    792
  • image_mobile-applications_xoomer_471_0.webp
    Разработка мобильного приложения для компании XOOMER
    671
  • image_mobile-applications_rhl_428_0.webp
    Разработка мобильного приложения для компании RHL
    1097
  • image_mobile-applications_zippy_411_0.webp
    Разработка мобильного приложения для компании ZIPPY
    969
  • image_mobile-applications_affhome_429_0.webp
    Разработка мобильного приложения для компании Affhome
    914
  • image_mobile-applications_flavors_409_0.webp
    Разработка мобильного приложения для компании FLAVORS
    495

Реализация Handoff между iPhone и Mac

Handoff между iPhone и Mac строится на той же основе NSUserActivity, что и Handoff между iOS-устройствами. Но есть существенная разница: на Mac приложение должно быть нативным (AppKit или Catalyst) или PWA через Safari. Веб-версия сайта с тем же доменом через Universal Links может продолжить активность с iPhone через Safari на Mac — это отдельный сценарий.

Особенности Mac-стороны

Если приложение поддерживает Mac через Mac Catalyst, большая часть кода общая — iOS-реализация NSUserActivity работает и там. Точка обработки — AppDelegate.application(_:continue:restorationHandler:), которая присутствует в Catalyst без изменений.

Для нативного Mac-приложения (AppKit) принимаем активность в applicationWillContinueUserActivity(_:) и application(_:continue:restorationHandler:) делегата NSApplication:

// NSApplicationDelegate
func application(_ application: NSApplication,
                 continue userActivity: NSUserActivity,
                 restorationHandler: @escaping ([NSUserActivityRestoring]) -> Void) -> Bool {
  guard userActivity.activityType == "com.myapp.editing-document",
        let docId = userActivity.userInfo?["documentId"] as? String else {
    return false
  }

  DocumentManager.shared.openDocument(id: docId)
  return true
}

Handoff через браузер: Universal Links + Web Credentials

Если Mac-версия приложения — это веб-сайт, а не нативное приложение, Handoff работает через Safari. iPhone-приложение создаёт NSUserActivity с webpageURL:

let activity = NSUserActivity(activityType: NSUserActivityTypeBrowsingWeb)
activity.webpageURL = URL(string: "https://myapp.com/documents/\(documentId)")
activity.isEligibleForHandoff = true
self.userActivity = activity
activity.becomeCurrent()

На Mac Safari откроет этот URL. Для обратного — открыть iPhone-приложение с Mac Safari — нужны Universal Links с apple-app-site-association. Это отдельный процесс настройки, не связанный напрямую с NSUserActivity.

Continuity Camera и AirDrop не то же самое

Частое заблуждение на этапе проектирования: клиент называет «Handoff» любую синхронизацию между iPhone и Mac. Технически:

  • Handoff — продолжение текущей активности (открытый документ, позиция в списке)
  • Continuity Camera — использование iPhone как веб-камеры или сканера для Mac
  • AirDrop — одноразовая передача файлов
  • iCloud sync — фоновая синхронизация данных

Это разные фреймворки с разными API. На этапе проектирования важно зафиксировать, что именно нужно клиенту.

Тестирование

Handoff требует двух физических устройств с одним Apple ID, Wi-Fi в одной сети, Bluetooth включён. Симулятор — только для проверки логики обработки NSUserActivity, не для самого Handoff. Характерная ошибка: активность не появляется на Mac, потому что Bundle ID в Capabilities не совпадает между iOS и Mac-таргетами.

Что входит в работу

  • NSUserActivity на iOS с правильными userInfo и needsSave
  • Обработка на Mac (Catalyst или AppKit)
  • Опционально: webpageURL для сценария Safari → Safari
  • Настройка Capabilities и entitlements на обеих таргетах
  • Тестирование на физических устройствах

Сроки

3–5 дней в зависимости от сложности состояния, которое нужно передать, и наличия Mac-таргета в проекте. Стоимость рассчитывается индивидуально.