Bu benim için mükemmel bir numara oldu!
Apple iOS6'da yeni gizlilik kontrolü sunar, kullanıcı her uygulama tarafından kişi ve takvim erişimini kontrol edebilir. Bu nedenle, kod tarafında, izin istemek için bir yol eklemeniz gerekir. İOS5 veya öncesinde her zaman arayabiliriz
ABAddressBookRef addressBook = ABAddressBookCreate();
adres defterini sorunsuz bir şekilde almak için, ancak iOS6'da, izniniz yoksa, bu çağrı yalnızca boş işaretçi döndürür. Bu yüzden ABAddressBookRef'i almak için yöntemi değiştirmemiz gerekiyor.
__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.
}
Kodda semafor yanıta kadar engelleme için kullanılırken, ABAddressBookRequestAccessWithCompletion uygulama daha önce sormadıysa izin ister. Aksi takdirde, sadece Ayarlar-Gizlilik-İletişim bölümündeki ayarları takip edecektir.
KAYNAK: http://programmerjoe.blogspot.com/2012/10/ios6-permissions-contacts.html