Chapter 18. Address Book

The user’s address book, which the user sees through the Contacts app, is effectively a database that your code can access programmatically through the Address Book framework. You’ll need to import AddressBook. This is, unfortunately, an archaic C API without memory management information, so you’re going to be intervening constantly to help manage memory.

A user interface for interacting with the address book is provided by the Address Book UI framework. You’ll need to import AddressBookUI.

Address Book Database

The address book is an ABAddressBook object obtained by calling ABAddressBookCreateWithOptions. There are in fact no options to pass. You’re probably going to need a single persistent reference to the address book, so it is tempting to assign this reference to a property as its default value:

var adbk : ABAddressBook =
    ABAddressBookCreateWithOptions(nil, nil).takeRetainedValue()

However, there’s a serious problem with that approach. Access to the address book database requires user authorization. If the authorization status is .NotDetermined, the preceding code does a very bad thing: it fails silently, yielding a non-nil result and not reporting an error. You thus end up with an ABAddressBook reference that is completely invalid and useless — and you have no way of finding out that this has happened. It is crucial, therefore, to verify authorization status independently, as I shall now describe.

Address Book Authorization

Address book authorization is ...

Get Programming iOS 8 now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.