Contacts Swift: Komplette Anleitung mit Beispielen
1. Was ist das und wozu braucht man es?
Die Bibliothek Contacts (das Framework Contacts.framework) ist die offizielle Apple-API für die Arbeit mit dem Adressbuch (Kontakten) auf Geräten mit iOS, macOS, watchOS und tvOS. Sie hat das veraltete AddressBook abgelöst und bietet eine moderne, objektorientierte Schnittstelle für den Zugriff auf die Kontakte des Benutzers. Die Hauptaufgabe der Bibliothek ist es, das Lesen, Erstellen, Aktualisieren und Löschen von Kontakten sowie die Verwaltung von Kontaktgruppen zu vereinheitlichen.
Wozu braucht man das? Jede App, die mit dem Telefonbuch interagieren muss (Messenger, CRM-Systeme, Telefon-Apps, soziale Netzwerke), sollte Contacts verwenden. Die Bibliothek ermöglicht es, sicher Berechtigungen vom Benutzer anzufordern, große Datenmengen effizient zu laden (durch seitenweise Abfragen und Prädikate) und mit vereinheitlichten Kontakten zu arbeiten (wenn eine Person aus mehreren Einträgen zusammengeführt wurde, z. B. aus iCloud und Google).
Im Gegensatz zu älteren Lösungen unterstützt Contacts Swift vollständig (einschließlich async/await), arbeitet mit CNContactStore als zentralem Einstiegspunkt und bietet unveränderliche (immutable) Objekte zum Lesen und veränderliche (mutable) Objekte zum Schreiben, was den Code sicherer und vorhersagbarer macht.
2. Installation
Die Bibliothek Contacts ist Teil der systemeigenen Apple-Frameworks. Sie müssen sie nicht über Paketmanager (CocoaPods, SPM oder Carthage) installieren – sie ist bereits auf dem Gerät verfügbar. Für die Nutzung reicht es aus, das Modul im Code zu importieren.
Wichtig: Für die Arbeit mit Kontakten müssen Sie den Schlüssel NSContactsUsageDescription in die Info.plist-Datei Ihres Projekts einfügen. Ohne diesen Schlüssel stürzt die App ab, wenn sie versucht, auf den Kontaktspeicher zuzugreifen.
Befehl (nicht erforderlich, aber zur Klarheit):
Da es sich um ein systemeigenes Framework handelt, gibt es keine pip-, npm- oder cargo-Befehle. Fügen Sie einfach den Import in Ihre Swift-Datei ein:
import Contacts
3. Schnellstart – Minimales Arbeitsbeispiel
Dieses Beispiel fordert die Berechtigung zum Zugriff auf die Kontakte an und gibt die Namen aller Kontakte aus dem Adressbuch in der Konsole aus.
import Contacts
import UIKit
// 1. Instanz des Kontaktspeichers erstellen
let store = CNContactStore()
// 2. Berechtigung anfordern
store.requestAccess(for: .contacts) { granted, error in
guard granted else {
print("Zugriff verweigert: \(error?.localizedDescription ?? "Unbekannter Fehler")")
return
}
// 3. Abfrage erstellen
let keysToFetch = [CNContactGivenNameKey, CNContactFamilyNameKey]
let request = CNContactFetchRequest(keysToFetch: keysToFetch)
// 4. Abfrage ausführen
do {
try store.enumerateContacts(with: request) { contact, stopPointer in
print("Kontakt gefunden: \(contact.givenName) \(contact.familyName)")
}
} catch {
print("Fehler beim Abrufen der Kontakte: \(error.localizedDescription)")
}
}
4. Wichtige Methoden/Funktionen/Klassen
4.1. CNContactStore
Signatur: class CNContactStore : NSObject
Funktion: Die zentrale Klasse für den Zugriff auf die Kontaktdatenbank. Über sie werden alle Operationen ausgeführt: Abfragen, Speichern, Löschen.
Beispiel:
let store = CNContactStore()
// Anschließend wird store für alle Operationen verwendet
4.2. requestAccess(for:completionHandler:)
Signatur: func requestAccess(for entityType: CNEntityType, completionHandler: @escaping (Bool, Error?) -> Void)
Funktion: