Реализация App Groups для обмена данными между iOS-приложениями

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

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

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

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

Услуги, которые мы предлагаем
Показано 1 из 1Все 1735 услуг
Реализация App Groups для обмена данными между iOS-приложениями
Простой
~1 день
Часто задаваемые вопросы

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

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

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

  • 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

Реализация App Groups для обмена данными между iOS-приложениями

App Groups — механизм iOS, позволяющий нескольким приложениям одного разработчика (и их расширениям: виджетам, Siri Intents, Share Extensions) читать и писать в общий container. Без App Groups каждый таргет живёт в изолированном sandbox: виджет не видит данные основного приложения, Today Extension не может передать файл.

Настройка

Включить App Groups в Capabilities для каждого таргета, который будет участвовать в обмене (основное приложение + все extensions). Идентификатор группы: group.com.yourcompany.yourapp. Один и тот же идентификатор в каждом таргете.

Shared UserDefaults

let sharedDefaults = UserDefaults(suiteName: "group.com.yourcompany.yourapp")
sharedDefaults?.set("active", forKey: "userStatus")
sharedDefaults?.synchronize() // Явный flush — важно перед выходом extension

Читается в виджете точно так же. Без suiteName — стандартный UserDefaults читает только из своего sandbox.

Shared Container для файлов

let containerURL = FileManager.default.containerURL(
    forSecurityApplicationGroupIdentifier: "group.com.yourcompany.yourapp"
)!
let fileURL = containerURL.appendingPathComponent("shared_data.json")

// Запись
try data.write(to: fileURL)

// Чтение в extension
let sharedData = try Data(contentsOf: fileURL)

Для CoreData с общим store: NSPersistentContainer инициализируется с URL из containerURL(forSecurityApplicationGroupIdentifier:).

WidgetKit: получение данных из App Group

WidgetKit Timeline Provider работает в отдельном процессе. Получить актуальные данные для виджета:

struct Provider: TimelineProvider {
    func getTimeline(in context: Context, completion: @escaping (Timeline<Entry>) -> Void) {
        let defaults = UserDefaults(suiteName: "group.com.yourcompany.yourapp")!
        let count = defaults.integer(forKey: "pendingTasksCount")
        let entry = TaskEntry(date: Date(), count: count)
        let timeline = Timeline(entries: [entry], policy: .atEnd)
        completion(timeline)
    }
}

Из основного приложения при обновлении данных: WidgetCenter.shared.reloadAllTimelines() — сигнал виджету пересчитать timeline.

Ориентиры по срокам

Настройка App Groups + реализация общего UserDefaults и файлового container для двух таргетов — 1 рабочий день, включая тестирование обмена данными между основным приложением и расширением.