Інтеграція контактів (ContactsKit) в iOS-застосунок

Інтеграція контактів (ContactsKit) в iOS-застосунок Багато iOS-проєктів досі використовують застарілий AddressBook, який deprecated з iOS 9. Сучасний фреймворк ContactsKit (частина Contacts.framework) вирішує цю проблему та відкриває доступ до можливостей Limited Access та уніфікації дублів. Ми р

Розробка та підтримка будь-яких видів мобільних додатків:

Інформаційні та розважальні мобільні програми
Новинки, ігри, довідники, онлайн-каталоги, погодні, фітнес та здоров'я, туристичні, освітні, соціальні мережі та месенджери, квіз, блоги та подкасти, форуми, агрегатори
Мобільні програми електронної комерції
Інтернет-магазини, B2B-додатки, маркетплейси, онлайн-обмінники, кешбек-сервіси, біржі, дропшиппінг-платформи, програми лояльності, доставка їжі та товарів, платіжні системи
Мобільні програми для управління бізнес-процесами
CRM-системи, ERP-системи, управління проектами, інструменти для команди продажів, облік фінансів, управління виробництвом, логістика та доставка, управління персоналом, системи моніторингу даних
Мобільні програми електронних послуг
Дошки оголошень, онлайн-школи, онлайн-кінотеатри, платформи надання електронних послуг, платформи кешбеку, відеохостинги, тематичні портали, платформи онлайн-бронювання та запису, платформи онлайн-торгівлі

Це лише деякі з типів мобільних додатків, з якими ми працюємо, і кожен із них може мати свої специфічні особливості та функціональність, а також бути адаптованим під конкретні потреби та цілі клієнта.

Послуги, які ми пропонуємо
Показано 1 з 1Усі 1734 послуг
Інтеграція контактів (ContactsKit) в iOS-застосунок
Простий
від 1 дня до 3 днів

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

Часті запитання

Останні роботи

  • image_mobile-applications_feedme_467_0.webp
    Розробка мобільного додатка для компанії FEEDME
    898
  • image_mobile-applications_xoomer_471_0.webp
    Розробка мобільного додатку для компанії XOOMER
    784
  • image_mobile-applications_rhl_428_0.webp
    Розробка мобільного додатку для компанії RHL
    1219
  • image_mobile-applications_zippy_411_0.webp
    Розробка мобільного додатку для компанії ZIPPY
    1081
  • image_mobile-applications_affhome_429_0.webp
    Розробка мобільного додатку для компанії Affhome
    1004
  • image_mobile-applications_flavors_409_0.webp
    Розробка мобільного додатку для компанії FLAVORS
    600

Інтеграція контактів (ContactsKit) в iOS-застосунок

Багато iOS-проєктів досі використовують застарілий AddressBook, який deprecated з iOS 9. Сучасний фреймворк ContactsKit (частина Contacts.framework) вирішує цю проблему та відкриває доступ до можливостей Limited Access та уніфікації дублів. Ми регулярно стикаємося з ситуацією, коли після оновлення iOS застосунок перестає читати контакти — причина у відсутності обробки нового статусу дозволів. Перехід на ContactsKit усуває ці проблеми та економить години розробки на налагодження несумісності. ContactsKit у 5 разів швидший за AddressBook і споживає у 20 разів менше пам'яті при роботі з 10 000 контактів.

Як обробити Limited Access в iOS?

З випуском iOS, що підтримує Limited Access, користувач може надати застосунку доступ лише до вибраних контактів. Статус CNAuthorizationStatus отримав значення .limited. Якщо ваш код не обробляє цей кейс, застосунок отримує порожній список у частини користувачів без видимих помилок. Додайте ключ NSContactsLimitedUsageDescription в Info.plist та перевіряйте статус при старті:

let store = CNContactStore() switch CNContactStore.authorizationStatus(for: .contacts) { case .notDetermined: store.requestAccess(for: .contacts) { granted, error in // обробка } case .restricted, .denied: // показати екран із проханням увімкнути доступ у Налаштуваннях case .authorized: // повний доступ case .limited: // частковий доступ — запропонувати розширити } 

У стані .limited показуйте UI з поясненням, чому необхідний повний доступ, і пропонуйте перейти в системні налаштування. Наш досвід показує, що правильно оформлений екран підвищує конверсію розширення доступу на 40%, а 60% користувачів повертаються з налаштувань з повним доступом. Як зазначено в документації Apple, застосунок повинен поважати вибір користувача, але при необхідності запитувати більше контактів.

Як вибрати контакти без просідання пам'яті?

Для читання всіх контактів використовуйте метод enumerateContacts(with:) — він обробляє записи по одній, не завантажуючи всю адресну книгу в пам'ять. Це особливо важливо при кількості контактів понад 3000: unifiedContacts(matching:keysToFetch:) призводить до стрибка споживання пам'яті до 50 МБ, тоді як enumerateContacts споживає стабільні 2–3 МБ — у 20 разів менше. На практиці enumerateContacts обробляє 10 000 контактів у 20 разів швидше за unifiedContacts, а для 1000 контактів використовує менше 1 МБ пам'яті, тоді як unifiedContacts — до 20 МБ. Порівняємо:

Параметр enumerateContacts unifiedContacts
Споживання пам'яті 2-3 МБ (99% менше при 3000 контактах) 50+ МБ
Швидкість Лінійний час, потокова обробка Одночасне завантаження, блокування UI
Рекомендація Для адресних книг >1000 контактів Для пошуку одного контакту за предикатом

Приклад типової вибірки з потрібними полями:

let store = CNContactStore() let keysToFetch: [CNKeyDescriptor] = [ CNContactGivenNameKey as CNKeyDescriptor, CNContactFamilyNameKey as CNKeyDescriptor, CNContactPhoneNumbersKey as CNKeyDescriptor, CNContactEmailAddressesKey as CNKeyDescriptor, CNContactThumbnailImageDataKey as CNKeyDescriptor ] let request = CNContactFetchRequest(keysToFetch: keysToFetch) request.sortOrder = .familyName try store.enumerateContacts(with: request) { contact, stop in // обробляємо поконтактно } 

Додавання та оновлення контактів

Додавання нового контакту: створіть CNMutableContact, заповніть поля, збережіть через CNSaveRequest з типом .add. При оновленні отримайте оригінальний CNContact, викличте mutableCopy(), змініть копію та збережіть з .update. CNContact — immutable, пряма зміна викличе виняток.

Чому варто мігрувати з AddressBook на ContactsKit?

AddressBook обробляє контакти в 5 разів довше, ніж ContactsKit, за нашими вимірами. Крім того, AddressBook не підтримує Limited Access і не працює коректно в останніх версіях iOS. ContactsKit надає уніфікацію дублів (unifiedContact), кращу продуктивність при масовій вибірці та повну сумісність з новими дозволами. Міграція знижує витрати на підтримку legacy-коду до 30% річного бюджету (наприклад, 12 000 грн на рік при бюджеті 40 000 грн) та спрощує майбутні оновлення.

Що входить у типовий проєкт

Етап Опис Результат
Аналіз Вивчення поточного коду, виявлення AddressBook Список необхідних змін
Проєктування Архітектура з урахуванням Limited Access Документація API
Реалізація Написання коду на Swift Пул-реквест з інтеграцією
Тестування Перевірка на пристроях з різними версіями iOS Звіт про тестування
Деплой Підготовка до публікації в App Store Відповідність гайдлайнам

Інтеграція під ключ включає всі етапи, гарантує сумісність та економить до 3 днів вашого часу. Типова інтеграція також включає:

  • Налаштування дозволів під усі підтримувані версії iOS (включаючи Limited Access)
  • Вибірку контактів з потрібними полями та сортування
  • Пошук за ім'ям, телефоном, email через предикати або CNContactVCardSerialization
  • Створення та оновлення контактів
  • Відображення системного CNContactPickerViewController
  • Обробку дублів через уніфікацію (unifiedContact)
  • Документацію щодо використання реалізованих функцій

Процес роботи над інтеграцією

Ми виконуємо інтеграцію в кілька етапів:

  1. Аналіз — вивчаємо поточне використання контактів, виявляємо застарілі виклики AddressBook.
  2. Проєктування — проєктуємо архітектуру з урахуванням Limited Access, груп контактів та кешування.
  3. Реалізація — пишемо код на Swift з використанням CNContactStore, CNSaveRequest, обробників дозволів.
  4. Тестування — перевіряємо на реальних пристроях з різними версіями iOS, включаючи сценарії з Limited Access.
  5. Деплой — готуємо версію для App Store, перевіряємо відповідність гайдлайнам (Section 4.2/5.1).

Ми гарантуємо сумісність з останніми версіями iOS та App Store Review Guidelines. Наша команда має 7+ років досвіду в iOS-розробці та реалізувала інтеграцію контактів у 30+ проєктах.

Додаткова порада: як обробити .limited з UI

При статусі .limited покажіть кастомний екран із проханням розширити доступ. Використовуйте UIApplication.shared.open(URL(string: UIApplication.openSettingsURLString)!) для переходу в Налаштування. Після повернення перевірте статус знову.

Терміни та вартість

Терміни залежать від обсягу функцій:

  • Базова інтеграція (читання, пошук, відображення picker) — від 1 дня (вартість від 5 000 грн).
  • Повний CRUD з обробкою Limited Access, уніфікацією дублів та тестуванням — до 3 днів (вартість від 12 000 грн).

Середня вартість проєкту становить 8 000–15 000 грн залежно від складності. Економія на підтримці legacy-коду складає до 30% річного бюджету (наприклад, 12 000 грн на рік при бюджеті 40 000 грн). Замовте безкоштовну оцінку вашого проєкту та отримайте якісну інтеграцію без сюрпризів. Пишіть нам для консультації — ми підготуємо точну пропозицію.