Itu trik yang sempurna untuk saya!
Di iOS6, apple memperkenalkan kontrol privasi baru, pengguna dapat mengontrol akses kontak dan kalender oleh setiap aplikasi. Jadi, di sisi kode, Anda perlu menambahkan beberapa cara untuk meminta izin. Di iOS5 atau sebelumnya, kami selalu dapat menelepon
ABAddressBookRef addressBook = ABAddressBookCreate();
untuk mendapatkan buku alamat tanpa masalah, tetapi di iOS6, jika Anda tidak memiliki izin, panggilan ini hanya akan mengembalikan penunjuk kosong. Itulah mengapa kita perlu mengubah metode untuk mendapatkan ABAddressBookRef.
__block BOOL accessGranted = NO;
if (ABAddressBookRequestAccessWithCompletion != NULL) { // we're on iOS 6
dispatch_semaphore_t sema = dispatch_semaphore_create(0);
ABAddressBookRequestAccessWithCompletion(addressBook, ^(bool granted, CFErrorRef error) {
accessGranted = granted;
dispatch_semaphore_signal(sema);
});
dispatch_semaphore_wait(sema, DISPATCH_TIME_FOREVER);
dispatch_release(sema);
}
else { // we're on iOS 5 or older
accessGranted = YES;
}
if (accessGranted) {
// Do whatever you want here.
}
Dalam kode, semaphore digunakan untuk memblokir hingga respons, sementara ABAddressBookRequestAccessWithCompletion akan meminta izin jika aplikasi tidak meminta sebelumnya. Jika tidak, itu hanya akan mengikuti pengaturan di Pengaturan-Privasi-Kontak.
SUMBER: http://programmerjoe.blogspot.com/2012/10/ios6-permissions-contacts.html