Реализация Universal Clipboard между Apple-устройствами
Universal Clipboard — часть Continuity. Пользователь копирует текст, ссылку или изображение на iPhone, вставляет на Mac или iPad без каких-либо дополнительных действий. С точки зрения разработчика это работает через UIPasteboard.general на iOS и NSPasteboard.general на macOS — система сама синхронизирует содержимое через Handoff-инфраструктуру.
Что нужно сделать в приложении
Большинство задач, связанных с Universal Clipboard, — это правильная работа с системным буфером обмена, а не специальная интеграция с Continuity. Если приложение корректно пишет и читает UIPasteboard.general, Universal Clipboard работает автоматически.
Запись в буфер:
// Текст
UIPasteboard.general.string = "https://myapp.com/item/123"
// Несколько типов одновременно — предпочтительно
UIPasteboard.general.setItems([
[UTType.plainText.identifier: "Заголовок статьи"],
[UTType.url.identifier: URL(string: "https://myapp.com/article/123")!]
])
// Изображение
UIPasteboard.general.image = UIImage(named: "screenshot")
Чтение с проверкой типа:
if UIPasteboard.general.hasStrings {
let text = UIPasteboard.general.string
}
if UIPasteboard.general.hasURLs {
let url = UIPasteboard.general.url
}
Ограничения, о которых нужно знать
Privacy change в iOS 16+. При чтении UIPasteboard.general из фона или без явного действия пользователя система показывает системный баннер «[App] pasted from [Device]». Это не баг — это намеренное поведение Apple для конфиденциальности. Отключить нельзя.
Размер данных. Буфер обмена не предназначен для больших файлов. Изображения размером больше нескольких МБ замедляют синхронизацию между устройствами. Для передачи файлов используйте AirDrop или iCloud.
Чувствительные данные. UIPasteboard.general — публичный буфер, его читает любое приложение. Для паролей и токенов лучше показывать кнопку «Скопировать» с явным действием пользователя, а не копировать автоматически.
Приватный pasteboard. Для внутренних операций внутри приложения (drag and drop между компонентами) используйте UIPasteboard(name:create:) с уникальным именем — такой буфер недоступен другим приложениям и не синхронизируется через Continuity.
Когда это не Universal Clipboard, а что-то другое
Если задача — синхронизировать данные между устройствами в фоне, без участия пользователя — это не Clipboard, это CloudKit или iCloud Documents. Clipboard — только явное копирование/вставка.
Если нужно передать данные одним движением без буфера — AirDrop через UIActivityViewController.
Что входит в работу
- Правильное API записи в
UIPasteboardс поддержкой нескольких UTType - Чтение с проверкой доступных типов
- Обработка privacy banner (iOS 16+) — информирование пользователей
- При необходимости: приватный pasteboard для внутренних операций
- Тестирование на двух устройствах с одним Apple ID
Сроки
2–3 дня с учётом тестирования на физических устройствах. Если задача ограничивается работой с буфером обмена внутри одного приложения — 1 день. Стоимость рассчитывается индивидуально.







