Contacts

RSS for tag

Access the user's contacts and format and localize contact information using Contacts.

Posts under Contacts tag

195 Posts

Post

Replies

Boosts

Views

Activity

X-ADDRESSING-GRAMMAR and Pronouns
I'm building a tool that works with contact cards (iCloud CardDAV as source). I need to obtain the pronouns set for a user to know if they are to be addressed as a he, she, etc. Pronouns set on a contact in Apple Contacts sync to iCloud and appear on the CardDAV vCard as itemN.X-ADDRESSING-GRAMMAR, but the value is opaque after base64 decode (not plaintext, XML plist, or binary plist). Third-party CardDAV clients authenticated as the account owner therefore cannot read pronouns, even though other contact fields (name, phones, emails, related names, etc.) are readable. RFC 9554 PRONOUNS is not present on these cards. How do I get these from contact cards?
1
1
271
1w
Contacts: remove member from group not working on macOS
Hi, In my app, I have an option to remove a contact from a contact group (using the Contacts framework), and it's been working fine till recently users of the macOS version reported that it's not working. I have been using the CNSaveRequest removeMember(contact, from: group) API. The same API works fine on iOS. I'm not sure when it started but it seems to be affecting macOS14.6 as well as 15.1. I was able to reproduce it in a small test project as well, and have the same experience (the API works on iOS but not on macOS), so it definitely seems like a problem with the framework. Can someone confirm this, and/or suggest a workaround? Here's the code I run to test it out ...a simple SwiftUI view that has 4 buttons: Create contact and group Add contact to group Remove contact from group (optional) cleanup by deleting contact and group It's the 3rd step that seems to fail on macOS, but works fine on iOS. Here's the code to test it out: struct ContentView: View { let contactsModel = ContactsStoreModel() var body: some View { VStack (alignment: .center, spacing: 15){ Button ("1. Add Contact And Group") { print("add contact button pressed") contactsModel.addTestContact() if let _ = contactsModel.createdContact { print("created contact success") } } Button ("2. Add Contact To Group") { print("add to group button pressed") contactsModel.addContactToGroup() } Button ("3. Remove Contact From Group") { print("remove from group button pressed") contactsModel.removeContactFromGroup() } Button ("4. Delete Contact and Group") { print("remove from group button pressed") contactsModel.deleteContactAndGroup() } } .padding() } } #Preview { ContentView() } @available(iOS 13.0, *) @objc final class ContactsStoreModel: NSObject, ObservableObject { let contactStore = CNContactStore() var createdContact : CNContact? var createdGroup : CNGroup? public func addTestContact() { let storeContainer = contactStore.defaultContainerIdentifier() let contact = CNMutableContact() contact.givenName = "Testing" contact.familyName = "User" contact.phoneNumbers = [CNLabeledValue(label: "Cell", value: CNPhoneNumber(stringValue: "1234567890"))] let group = CNMutableGroup() group.name = "Testing Group" print("create contact id = \(contact.identifier)") print("create group id = \(group.identifier)") do { let saveRequest = CNSaveRequest() saveRequest.transactionAuthor = "TestApp" saveRequest.add(contact, toContainerWithIdentifier: storeContainer) saveRequest.add(group, toContainerWithIdentifier: storeContainer) try contactStore.execute(saveRequest) createdContact = contact createdGroup = group } catch { print("error in store execute = \(error)") } } public func addContactToGroup() { if let contact = createdContact, let group = createdGroup { do { let saveRequest = CNSaveRequest() saveRequest.transactionAuthor = "TestApp" saveRequest.addMember(contact, to: group) try contactStore.execute(saveRequest) } catch { print("error in store execute = \(error)") } } } public func removeContactFromGroup() { if let contact = createdContact, let group = createdGroup { do { let saveRequest = CNSaveRequest() saveRequest.transactionAuthor = "TestApp" saveRequest.removeMember(contact, from: group) try contactStore.execute(saveRequest) } catch { print("error in store execute = \(error)") } } } public func addGroupAndContact() { let storeContainer = contactStore.defaultContainerIdentifier() let group = CNMutableGroup() group.name = "Test Group" print("create group id = \(group.identifier)") if let contact = createdContact { do { let saveRequest = CNSaveRequest() saveRequest.transactionAuthor = "TestApp" saveRequest.add(group, toContainerWithIdentifier: storeContainer) saveRequest.addMember(contact, to: group) try contactStore.execute(saveRequest) createdGroup = group } catch { print("error in store execute = \(error)") } } } public func deleteContactAndGroup() { if let contact = createdContact, let group = createdGroup { do { let mutableGroup = group.mutableCopy() as! CNMutableGroup let mutableContact = contact.mutableCopy() as! CNMutableContact let saveRequest = CNSaveRequest() saveRequest.transactionAuthor = "TestApp" saveRequest.delete(mutableContact) saveRequest.delete(mutableGroup) try contactStore.execute(saveRequest) } catch { print("error in deleting store execute = \(error)") } } } }
4
1
1k
2w
Account Billing Block / Enrollment Unavailable in India Loop
To Apple Developer Support, I am attempting to enroll in the Apple Developer Program from India using this specific Apple Account email address. My account region is correctly configured to India, and my device region matches. However, I am trapped in a server-side account loop: The Apple Developer App displays the error: "Enrollment is unavailable in your country. Connect to iTunes Support." The web browser portal displays the error: "Your Apple Account isn't enabled for iTunes Connect." Because of these errors, the option to request a phone callback has also disappeared from my contact page. This appears to be a backend payment processing/enrollment state conflict tied to my Apple Account ID. Please manually clear or reset the pending enrollment state flag on this account so that I can complete identity verification and purchase the program via the Developer app using a valid international credit card. Thank you, Noaman Raees Khan.
1
0
178
3w
Developer Tools & Services
To Apple Developer Support, I am attempting to enroll in the Apple Developer Program from India using this specific Apple Account email address. My account region is correctly configured to India, and my device region matches. However, I am trapped in a server-side account loop: The Apple Developer App displays the error: "Enrollment is unavailable in your country. Connect to iTunes Support." The web browser portal displays the error: "Your Apple Account isn't enabled for iTunes Connect." Because of these errors, the option to request a phone callback has also disappeared from my contact page. This appears to be a backend payment processing/enrollment state conflict tied to my Apple Account ID. Please manually clear or reset the pending enrollment state flag on this account so that I can complete identity verification and purchase the program via the Developer app using a valid international credit card. Thank you, Noaman Raees Khan
1
0
177
3w
Enrollment stuck for weeks despite payment — Case 102924068161, Enrollment ID C4F9MQY752
My priority is activation, not the refund. I understand a refund for an earlier duplicate charge is also in progress, but that is not urgent for me — what I need most is for my membership to be activated so I can access App Store Connect and TestFlight. My app is fully built and ready; this enrollment delay is the only thing blocking me from launching. If anyone from the Apple Developer Support or Enrollment team could look into this case and help move it forward, I would be extremely grateful. I’m also glad to provide any additional documentation needed to complete the review. Thank you very much for your time.
1
0
182
3w
Paid Apps agreement stuck on "Pending User Information" - legal entity address not updating
Hi, I am setting up my first Paid Apps agreement as an individual developer based in Germany, and a few things appear to be stuck. Current status in Agreements, Tax, and Banking: Paid Apps agreement: Pending User Information Bank account (German bank, EUR payout in USD): Processing U.S. Form W-8BEN: Tax information missing My main question is about the address. My Membership Details and the legal entity address still show an old "c/o" mail forwarding address. I submitted an update through "Update Information" more than a week ago, but the displayed address has not changed. How do I actually update the legal entity / membership address? Is there a self-service option, or does this require contacting Developer Support and selecting Legal Entity Information? Is the displayed address simply not refreshing after an update, or did my change not go through? Does a "c/o" mail forwarding address as the account address cause any problem for the Paid Apps agreement or the banking verification? I understand the W-8BEN is still outstanding and I plan to complete it next, with my actual residence address on line 3. I just want to confirm the address on the account is not a separate blocker before I submit. Thank you in advance for any guidance. best regards!
0
0
82
Jun ’26
Is there an API to fetch "Other Known Contacts" added via Call Logs / Recents?
When a user uses the "Add Name" feature on an unknown number in their Call Logs, the name appears under "Other Known Contacts" in the native iOS Contacts app. The Problem: CNContactStore completely ignores these contacts during a standard fetch/enumeration. When user gives limited permission they can search for that contact and select it, but it won't be visible in my App as it's not technically a contact. Is CNContactStore intentionally blocked from reading "Other Known Contacts" for privacy reasons or are there any future plans to expose API so that third party apps can access it?
0
2
351
Jun ’26
unifiedContacts identifier vs contactRelations identifier
The documentation specifies that when Contacts framework returns unified contacts that each fetched unified contact object (CNContact) has its own unique identifier that’s different from any individual contact’s identifier in the set of linked contacts and that when refetching a unified contact, that this identifier should be used. There is also an analogous identifier within the list of contactRelations, but each of these don't seem to corespondent to the unified contacts. For example, is a new contact (Sheryl Zakroff) is created in the simulator Contacts and their spouse is set to Hank Zakroff. However, the GUID created for the contactRelations identifier does not correlate to the original Hank Zakroff GUID and cannot be searched. Is this a bug or what is the indent of the contactRelations identifier? Here's a debug output of walking the unifiedContacts: Name: Hank Zakroff 2E73EE73-C03F-4D5F-B1E8-44E85A70F170 - Other : (555) 766-4823 - Other : (707) 555-1854 Name: David Taylor E94CD15C-7964-4A9B-8AC4-10D7CFB791FD - Other : 555-610-6679 Name: Sheryl Zakroff DE783BC8-7917-4138-93F6-3AF0FD4CE083 - Other : (707) 555-1854 - Spouse: <CNContactRelation: 0x60000000dd60: name=Hank M. Zakroff> - 534B467D-CA00-46D3-897C-16EEA782C9CF - Looking for ["534B467D-CA00-46D3-897C-16EEA782C9CF"] []
11
0
1.1k
Jun ’26
Contacts "Prefer Nicknames" / "Short Name" setting not respected in the Share Sheet suggestions row
I've filed this as a feedback report (FB22305448) and wanted to raise it here in case anyone else is seeing the same behaviour or can confirm. The Share Sheet's suggested-people row appears to ignore the system Contacts name-display settings. When a contact has a Nickname set, that Nickname is shown in the sharing suggestions even when nicknames are explicitly turned off. Settings state Under Settings › Contacts › Short Name, both toggles are off: Short Name — Off Prefer Nicknames — Off With these off, the rest of the system (Contacts app, Messages conversation list, Mail, etc.) correctly shows the contact's full/short name rather than the Nickname. Steps to reproduce Open a contact and add a Nickname (e.g. contact "John Smith" with Nickname "JJ"). Go to Settings › Contacts › Short Name and ensure both Short Name and Prefer Nicknames are off. Open Photos, select a photo, and tap Share. Look at the suggested-people row at the top of the Share Sheet (the iMessage/AirDrop suggestions). Expected behaviour With Prefer Nicknames off, the suggestion should display the contact's full name (or short name if Short Name were enabled) — i.e. "John Smith", consistent with every other part of the system. Actual behaviour The Share Sheet suggestion shows the Nickname ("JJ") regardless of the Contacts setting. The setting is not honoured in this surface. Notes Reproducible every time. The Nickname is shown only in the Share Sheet suggestions row; other system surfaces respect the setting correctly, which points to the Share Sheet / suggestions component reading the contact's display name without applying the user's nickname preference. Feedback ID: FB22305448 Has anyone else run into this, or found a workaround short of removing the Nickname from the contact?
0
0
95
Jun ’26
.contactAccessPicker shows blank sheet on iOS 26.2.1 on device
Calling contactAccessPicker results in a blank sheet and a jetsam error, rather than the expected contact picker, using Apple’s sample code, only on device with iOS 26.2.1. This is happening on a iPhone 17 Pro Max running 26.2.1, and not on a simulator. I’m running Apple's sample project Accessing a person’s contact data using Contacts and ContactsUI Steps: Run the sample app on device running iOS 26.2.1. Use the flow to authorize .limited access with 1 contact: Tap request access, Continue, Select Contacts. Select a contact, Continue, Allow Selected Contact. This all works as expected. Tap the add contact button in the toolbar to add a second contact. Expected: This should show the Contact Access Picker UI. Actual: Sheet is shown with no contents. See screenshot of actual results on iOS device running 26.2.1. Reported as FB21812568 I see a similar (same?) error reported for 26.1. It seems strange that the feature is completely broken for multiple point releases. Is anyone else seeing this or are the two of us running into the same rare edge case? Expected Outcome, seen on simulator running 26.2 Actual outcome, seen on device running 26.2.1
8
3
726
Jun ’26
How can users dismiss the iOS 18 second-stage Contacts permission prompt?
In iOS 18, requesting Contacts access via CNContactStore.requestAccess(for:) triggers a two-stage authorization flow: First stage: the standard "Allow / Don't Allow" alert Second stage: a sheet titled "How do you want to share contacts?" with two options — "Select Contacts" and "Share All [N] Contacts" My question is about the second-stage sheet specifically. It does not appear to have a Cancel or Close button, and swipe-down to dismiss does not work on the devices I've tested (iOS 18.x). If a user reaches this second prompt and decides they don't want to choose either option, how are they expected to dismiss it? Is this intentional behavior?
1
0
390
May ’26
Contacts permission not requested on production build (iPhone 16/17 Pro Max)
I’m encountering an issue where my app does not show the Contacts permission prompt in the production environment. This has been observed on iPhone 16 Pro Max and iPhone 17 Pro Max devices, while other iPhone models appear to behave correctly. The behavior is consistent across Xcode builds, TestFlight, and the App Store version when using the production bundle identifier. Instead of returning .notDetermined, the app receives the device’s previous Contacts authorization status, so the system permission prompt is never shown. Expected behavior On first launch after install, the app should prompt the user for Contacts access. Actual behavior (Production build) The app does not prompt for Contacts permission and instead appears to reuse the previous permission state: If the user previously had no access → after uninstall/reinstall, still no access (no prompt shown) If the user previously had limited access → after reinstall, access becomes empty (0 contacts), still no prompt If the user previously had full access → after reinstall, still has full access without being prompted Additional observations This issue only occurs in Production Staging and Dev builds (TestFlight + Xcode) behave correctly and prompt for permission If I set my Dev build to use the same bundle identifier as Production, the issue reproduces (no permission prompt) Current workaround The only way for users to change Contacts access is via the Settings app. The permission prompt is never shown in-app. Has anyone encountered this behavior before, or is there something specific to production builds (or bundle identifiers) that could cause the system to skip the permission prompt?
8
0
966
Apr ’26
vCard (.vcf) import on iOS not preserving PHOTO and X-SOCIALPROFILE — expected behavior?
I’m running an experiment around generating and importing .vcf files on iOS and wanted to sanity check expected behavior with others who may have explored this deeper. Goal Programmatically generate a vCard (v3.0) that, when imported into iOS Contacts, includes: Standard fields (name, phone, email, organization, etc.) Contact photo (PHOTO) Social profile (e.g., LinkedIn via X-SOCIALPROFILE) What I tested I tried to eliminate formatting issues by using iOS itself as the source of truth. Steps: Created a new contact directly in iOS Contacts Added name, phone, email Added a contact photo Added a social profile (LinkedIn) Exported that contact as a .vcf Deleted the contact from the device Re-imported the exported .vcf Result Core fields (name, phone, email, etc.) are restored correctly Contact photo is NOT restored Social profile is NOT restored as a native social entry This happens even though: The exported .vcf clearly contains a PHOTO field The exported .vcf includes X-SOCIALPROFILE;type=linkedin:... Additional testing I also generated my own .vcf files that closely mirror the structure produced by iOS (field order, encoding, etc.), and observed the same behavior: Photo does not reliably import Social profiles do not appear as native social entries in Contacts Question Is this expected behavior on iOS? More specifically: Are PHOTO fields intentionally ignored (or restricted) during .vcf import? Is X-SOCIALPROFILE supported for import, or only used internally/exported by Contacts? Is there any supported way to programmatically create a contact with: a photo social profile entries via .vcf import? Current understanding Based on testing, it appears that: iOS may export more data than it will accept on import Some fields (like social profiles and possibly photos) may only be fully supported when created via native APIs (e.g., Contacts framework) rather than .vcf Would appreciate confirmation or any documentation pointers if this is known behavior or if there are recommended alternatives. Closing thought If this is by design, it would be helpful to know which vCard fields are officially supported for import vs. export on iOS, since the current behavior is not entirely symmetric.
0
0
254
Apr ’26
.contactAccessPicker shows blank sheet on iOS 26.1
I’m running into an issue using .contactAccessPicker on a device running iOS 26.1 - a blank sheet appears instead of the expected Contact Access Picker. It works on: Simulator (iOS 26.0) Device + Simulator (iOS 18.6) The issue appears specific to real devices on iOS 26.0+. Environment: Device: iPhone 16 Pro iOS Versions Tested: 26.0 and 26.1 Xcode 26.0.1 SwiftUI app, deployment target: iOS 17+ @available(iOS 18.0, *) private var contactPicker: some View { contactsSettingsButton("Title") { showContactPicker = true } .contactAccessPicker(isPresented: $showContactPicker) { _ in Task { await contactManager.fetchContacts() showSelectContacts = true } } } Filed a Feedback: FB20929400 Is there a known workaround?
6
3
493
Mar ’26
iOS26+ CNContactViewController will duplicate phone numbers and email addresses if an Avatar image is attached when creating the contact
Using the ContactUI framework CNContactViewController(forNewContact contact: CNContact?) to add a new contact to the ContactStore. If the new contact does not have an attached image then the contact is saved correctly. If the new contact DOES have an attached image then all entries in the phoneNumbers or emailAddresses array are doubled when written to the contactStore. Viewing the contact via the Contacts app shows the duplications. This is only happening on iOS26+. Earlier versions of the operating system do not show duplicates. Has anyone else seen this issue? Feedback reference: FB20910502
4
1
571
Feb ’26
Determining the number of missed calls.
In iOS 18, when a contact with multiple phone numbers called, the system clearly indicated which specific number was used—often by highlighting it in red for missed calls or tagging it as 'recent.' However, in iOS 26, this distinction is missing, and there is no way to determine which of the contact's numbers the call originated from.
0
0
503
Feb ’26
Contacts Provider Extension not removed from Contacts list after app uninstall on iOS 26
Hi, I’ve built an app that includes a Contacts Provider Extension (CPE). On iOS 18, I observed the expected behavior — when the main app is uninstalled, the corresponding CPE entry is also removed from the Contacts list. However, on iOS 26, this no longer happens. After uninstalling the app, the CPE remains visible and active in the Contacts list, even though the app is gone.
7
3
810
Jan ’26
Does Contact Provider supports Localize when ask Permission
When I call https://developer.apple.com/documentation/contactprovider/contactprovidermanager/enable() to request to use Contact Provider, I received a dialog with message like this "App Name would like to add its contacts as its own list. Contacts added this way can be removed from settings". I would like to support this message in Japanese or other languages. Is it possible?
3
1
485
Nov ’25
Is ContactAccessButton broken?
Simple question - on iOS 26 ContactAccessButton does not appear to show any UI when attempting to search for a contact in either the contact access picker on the ContactAccessButton. This behavior occurs in the Apple provided sample code , as well as a basic example: struct ContentView: View { @State var searchText : String = "" var body: some View { VStack { TextField("Search", text: $searchText) ContactAccessButton( queryString: searchText, ignoredEmails: nil, ignoredPhoneNumbers: nil, approvalCallback: { identifiers in print(identifiers) }) } .padding() } } Am I doing something wrong or is this just not working?
1
0
577
Oct ’25
iOS 26 Public Beta Duplicate Contacts
I'm not sure at which beta it happened, but somewhere during the iOS 26 Public Beta releases, my iCloud Contacts have duplicated close to 100 times each. When I scroll to the bottom of the list to try and manage duplicates, it indicates I only have 2 duplicates. I should be sitting around 350 contacts and instead, I now have over 10k. Anyone else with this issue? I have filed Feedback in the app. I'm not certain if it was related to iOS 26 or iPadOS 26 as I have both, but noticed it first on my iPhone. I confirmed that the issue has affected my iCloud Contacts and therefore all of my Apple devices included older iOS and MacOS versions. Short of manually deleting all the duplicates, I'm at a loss as to how I can correct his.
0
0
402
Sep ’25
X-ADDRESSING-GRAMMAR and Pronouns
I'm building a tool that works with contact cards (iCloud CardDAV as source). I need to obtain the pronouns set for a user to know if they are to be addressed as a he, she, etc. Pronouns set on a contact in Apple Contacts sync to iCloud and appear on the CardDAV vCard as itemN.X-ADDRESSING-GRAMMAR, but the value is opaque after base64 decode (not plaintext, XML plist, or binary plist). Third-party CardDAV clients authenticated as the account owner therefore cannot read pronouns, even though other contact fields (name, phones, emails, related names, etc.) are readable. RFC 9554 PRONOUNS is not present on these cards. How do I get these from contact cards?
Replies
1
Boosts
1
Views
271
Activity
1w
Contacts: remove member from group not working on macOS
Hi, In my app, I have an option to remove a contact from a contact group (using the Contacts framework), and it's been working fine till recently users of the macOS version reported that it's not working. I have been using the CNSaveRequest removeMember(contact, from: group) API. The same API works fine on iOS. I'm not sure when it started but it seems to be affecting macOS14.6 as well as 15.1. I was able to reproduce it in a small test project as well, and have the same experience (the API works on iOS but not on macOS), so it definitely seems like a problem with the framework. Can someone confirm this, and/or suggest a workaround? Here's the code I run to test it out ...a simple SwiftUI view that has 4 buttons: Create contact and group Add contact to group Remove contact from group (optional) cleanup by deleting contact and group It's the 3rd step that seems to fail on macOS, but works fine on iOS. Here's the code to test it out: struct ContentView: View { let contactsModel = ContactsStoreModel() var body: some View { VStack (alignment: .center, spacing: 15){ Button ("1. Add Contact And Group") { print("add contact button pressed") contactsModel.addTestContact() if let _ = contactsModel.createdContact { print("created contact success") } } Button ("2. Add Contact To Group") { print("add to group button pressed") contactsModel.addContactToGroup() } Button ("3. Remove Contact From Group") { print("remove from group button pressed") contactsModel.removeContactFromGroup() } Button ("4. Delete Contact and Group") { print("remove from group button pressed") contactsModel.deleteContactAndGroup() } } .padding() } } #Preview { ContentView() } @available(iOS 13.0, *) @objc final class ContactsStoreModel: NSObject, ObservableObject { let contactStore = CNContactStore() var createdContact : CNContact? var createdGroup : CNGroup? public func addTestContact() { let storeContainer = contactStore.defaultContainerIdentifier() let contact = CNMutableContact() contact.givenName = "Testing" contact.familyName = "User" contact.phoneNumbers = [CNLabeledValue(label: "Cell", value: CNPhoneNumber(stringValue: "1234567890"))] let group = CNMutableGroup() group.name = "Testing Group" print("create contact id = \(contact.identifier)") print("create group id = \(group.identifier)") do { let saveRequest = CNSaveRequest() saveRequest.transactionAuthor = "TestApp" saveRequest.add(contact, toContainerWithIdentifier: storeContainer) saveRequest.add(group, toContainerWithIdentifier: storeContainer) try contactStore.execute(saveRequest) createdContact = contact createdGroup = group } catch { print("error in store execute = \(error)") } } public func addContactToGroup() { if let contact = createdContact, let group = createdGroup { do { let saveRequest = CNSaveRequest() saveRequest.transactionAuthor = "TestApp" saveRequest.addMember(contact, to: group) try contactStore.execute(saveRequest) } catch { print("error in store execute = \(error)") } } } public func removeContactFromGroup() { if let contact = createdContact, let group = createdGroup { do { let saveRequest = CNSaveRequest() saveRequest.transactionAuthor = "TestApp" saveRequest.removeMember(contact, from: group) try contactStore.execute(saveRequest) } catch { print("error in store execute = \(error)") } } } public func addGroupAndContact() { let storeContainer = contactStore.defaultContainerIdentifier() let group = CNMutableGroup() group.name = "Test Group" print("create group id = \(group.identifier)") if let contact = createdContact { do { let saveRequest = CNSaveRequest() saveRequest.transactionAuthor = "TestApp" saveRequest.add(group, toContainerWithIdentifier: storeContainer) saveRequest.addMember(contact, to: group) try contactStore.execute(saveRequest) createdGroup = group } catch { print("error in store execute = \(error)") } } } public func deleteContactAndGroup() { if let contact = createdContact, let group = createdGroup { do { let mutableGroup = group.mutableCopy() as! CNMutableGroup let mutableContact = contact.mutableCopy() as! CNMutableContact let saveRequest = CNSaveRequest() saveRequest.transactionAuthor = "TestApp" saveRequest.delete(mutableContact) saveRequest.delete(mutableGroup) try contactStore.execute(saveRequest) } catch { print("error in deleting store execute = \(error)") } } } }
Replies
4
Boosts
1
Views
1k
Activity
2w
Account Billing Block / Enrollment Unavailable in India Loop
To Apple Developer Support, I am attempting to enroll in the Apple Developer Program from India using this specific Apple Account email address. My account region is correctly configured to India, and my device region matches. However, I am trapped in a server-side account loop: The Apple Developer App displays the error: "Enrollment is unavailable in your country. Connect to iTunes Support." The web browser portal displays the error: "Your Apple Account isn't enabled for iTunes Connect." Because of these errors, the option to request a phone callback has also disappeared from my contact page. This appears to be a backend payment processing/enrollment state conflict tied to my Apple Account ID. Please manually clear or reset the pending enrollment state flag on this account so that I can complete identity verification and purchase the program via the Developer app using a valid international credit card. Thank you, Noaman Raees Khan.
Replies
1
Boosts
0
Views
178
Activity
3w
Developer Tools & Services
To Apple Developer Support, I am attempting to enroll in the Apple Developer Program from India using this specific Apple Account email address. My account region is correctly configured to India, and my device region matches. However, I am trapped in a server-side account loop: The Apple Developer App displays the error: "Enrollment is unavailable in your country. Connect to iTunes Support." The web browser portal displays the error: "Your Apple Account isn't enabled for iTunes Connect." Because of these errors, the option to request a phone callback has also disappeared from my contact page. This appears to be a backend payment processing/enrollment state conflict tied to my Apple Account ID. Please manually clear or reset the pending enrollment state flag on this account so that I can complete identity verification and purchase the program via the Developer app using a valid international credit card. Thank you, Noaman Raees Khan
Replies
1
Boosts
0
Views
177
Activity
3w
Enrollment stuck for weeks despite payment — Case 102924068161, Enrollment ID C4F9MQY752
My priority is activation, not the refund. I understand a refund for an earlier duplicate charge is also in progress, but that is not urgent for me — what I need most is for my membership to be activated so I can access App Store Connect and TestFlight. My app is fully built and ready; this enrollment delay is the only thing blocking me from launching. If anyone from the Apple Developer Support or Enrollment team could look into this case and help move it forward, I would be extremely grateful. I’m also glad to provide any additional documentation needed to complete the review. Thank you very much for your time.
Replies
1
Boosts
0
Views
182
Activity
3w
Paid Apps agreement stuck on "Pending User Information" - legal entity address not updating
Hi, I am setting up my first Paid Apps agreement as an individual developer based in Germany, and a few things appear to be stuck. Current status in Agreements, Tax, and Banking: Paid Apps agreement: Pending User Information Bank account (German bank, EUR payout in USD): Processing U.S. Form W-8BEN: Tax information missing My main question is about the address. My Membership Details and the legal entity address still show an old "c/o" mail forwarding address. I submitted an update through "Update Information" more than a week ago, but the displayed address has not changed. How do I actually update the legal entity / membership address? Is there a self-service option, or does this require contacting Developer Support and selecting Legal Entity Information? Is the displayed address simply not refreshing after an update, or did my change not go through? Does a "c/o" mail forwarding address as the account address cause any problem for the Paid Apps agreement or the banking verification? I understand the W-8BEN is still outstanding and I plan to complete it next, with my actual residence address on line 3. I just want to confirm the address on the account is not a separate blocker before I submit. Thank you in advance for any guidance. best regards!
Replies
0
Boosts
0
Views
82
Activity
Jun ’26
Is there an API to fetch "Other Known Contacts" added via Call Logs / Recents?
When a user uses the "Add Name" feature on an unknown number in their Call Logs, the name appears under "Other Known Contacts" in the native iOS Contacts app. The Problem: CNContactStore completely ignores these contacts during a standard fetch/enumeration. When user gives limited permission they can search for that contact and select it, but it won't be visible in my App as it's not technically a contact. Is CNContactStore intentionally blocked from reading "Other Known Contacts" for privacy reasons or are there any future plans to expose API so that third party apps can access it?
Replies
0
Boosts
2
Views
351
Activity
Jun ’26
unifiedContacts identifier vs contactRelations identifier
The documentation specifies that when Contacts framework returns unified contacts that each fetched unified contact object (CNContact) has its own unique identifier that’s different from any individual contact’s identifier in the set of linked contacts and that when refetching a unified contact, that this identifier should be used. There is also an analogous identifier within the list of contactRelations, but each of these don't seem to corespondent to the unified contacts. For example, is a new contact (Sheryl Zakroff) is created in the simulator Contacts and their spouse is set to Hank Zakroff. However, the GUID created for the contactRelations identifier does not correlate to the original Hank Zakroff GUID and cannot be searched. Is this a bug or what is the indent of the contactRelations identifier? Here's a debug output of walking the unifiedContacts: Name: Hank Zakroff 2E73EE73-C03F-4D5F-B1E8-44E85A70F170 - Other : (555) 766-4823 - Other : (707) 555-1854 Name: David Taylor E94CD15C-7964-4A9B-8AC4-10D7CFB791FD - Other : 555-610-6679 Name: Sheryl Zakroff DE783BC8-7917-4138-93F6-3AF0FD4CE083 - Other : (707) 555-1854 - Spouse: <CNContactRelation: 0x60000000dd60: name=Hank M. Zakroff> - 534B467D-CA00-46D3-897C-16EEA782C9CF - Looking for ["534B467D-CA00-46D3-897C-16EEA782C9CF"] []
Replies
11
Boosts
0
Views
1.1k
Activity
Jun ’26
Contacts "Prefer Nicknames" / "Short Name" setting not respected in the Share Sheet suggestions row
I've filed this as a feedback report (FB22305448) and wanted to raise it here in case anyone else is seeing the same behaviour or can confirm. The Share Sheet's suggested-people row appears to ignore the system Contacts name-display settings. When a contact has a Nickname set, that Nickname is shown in the sharing suggestions even when nicknames are explicitly turned off. Settings state Under Settings › Contacts › Short Name, both toggles are off: Short Name — Off Prefer Nicknames — Off With these off, the rest of the system (Contacts app, Messages conversation list, Mail, etc.) correctly shows the contact's full/short name rather than the Nickname. Steps to reproduce Open a contact and add a Nickname (e.g. contact "John Smith" with Nickname "JJ"). Go to Settings › Contacts › Short Name and ensure both Short Name and Prefer Nicknames are off. Open Photos, select a photo, and tap Share. Look at the suggested-people row at the top of the Share Sheet (the iMessage/AirDrop suggestions). Expected behaviour With Prefer Nicknames off, the suggestion should display the contact's full name (or short name if Short Name were enabled) — i.e. "John Smith", consistent with every other part of the system. Actual behaviour The Share Sheet suggestion shows the Nickname ("JJ") regardless of the Contacts setting. The setting is not honoured in this surface. Notes Reproducible every time. The Nickname is shown only in the Share Sheet suggestions row; other system surfaces respect the setting correctly, which points to the Share Sheet / suggestions component reading the contact's display name without applying the user's nickname preference. Feedback ID: FB22305448 Has anyone else run into this, or found a workaround short of removing the Nickname from the contact?
Replies
0
Boosts
0
Views
95
Activity
Jun ’26
.contactAccessPicker shows blank sheet on iOS 26.2.1 on device
Calling contactAccessPicker results in a blank sheet and a jetsam error, rather than the expected contact picker, using Apple’s sample code, only on device with iOS 26.2.1. This is happening on a iPhone 17 Pro Max running 26.2.1, and not on a simulator. I’m running Apple's sample project Accessing a person’s contact data using Contacts and ContactsUI Steps: Run the sample app on device running iOS 26.2.1. Use the flow to authorize .limited access with 1 contact: Tap request access, Continue, Select Contacts. Select a contact, Continue, Allow Selected Contact. This all works as expected. Tap the add contact button in the toolbar to add a second contact. Expected: This should show the Contact Access Picker UI. Actual: Sheet is shown with no contents. See screenshot of actual results on iOS device running 26.2.1. Reported as FB21812568 I see a similar (same?) error reported for 26.1. It seems strange that the feature is completely broken for multiple point releases. Is anyone else seeing this or are the two of us running into the same rare edge case? Expected Outcome, seen on simulator running 26.2 Actual outcome, seen on device running 26.2.1
Replies
8
Boosts
3
Views
726
Activity
Jun ’26
How can users dismiss the iOS 18 second-stage Contacts permission prompt?
In iOS 18, requesting Contacts access via CNContactStore.requestAccess(for:) triggers a two-stage authorization flow: First stage: the standard "Allow / Don't Allow" alert Second stage: a sheet titled "How do you want to share contacts?" with two options — "Select Contacts" and "Share All [N] Contacts" My question is about the second-stage sheet specifically. It does not appear to have a Cancel or Close button, and swipe-down to dismiss does not work on the devices I've tested (iOS 18.x). If a user reaches this second prompt and decides they don't want to choose either option, how are they expected to dismiss it? Is this intentional behavior?
Replies
1
Boosts
0
Views
390
Activity
May ’26
Contacts permission not requested on production build (iPhone 16/17 Pro Max)
I’m encountering an issue where my app does not show the Contacts permission prompt in the production environment. This has been observed on iPhone 16 Pro Max and iPhone 17 Pro Max devices, while other iPhone models appear to behave correctly. The behavior is consistent across Xcode builds, TestFlight, and the App Store version when using the production bundle identifier. Instead of returning .notDetermined, the app receives the device’s previous Contacts authorization status, so the system permission prompt is never shown. Expected behavior On first launch after install, the app should prompt the user for Contacts access. Actual behavior (Production build) The app does not prompt for Contacts permission and instead appears to reuse the previous permission state: If the user previously had no access → after uninstall/reinstall, still no access (no prompt shown) If the user previously had limited access → after reinstall, access becomes empty (0 contacts), still no prompt If the user previously had full access → after reinstall, still has full access without being prompted Additional observations This issue only occurs in Production Staging and Dev builds (TestFlight + Xcode) behave correctly and prompt for permission If I set my Dev build to use the same bundle identifier as Production, the issue reproduces (no permission prompt) Current workaround The only way for users to change Contacts access is via the Settings app. The permission prompt is never shown in-app. Has anyone encountered this behavior before, or is there something specific to production builds (or bundle identifiers) that could cause the system to skip the permission prompt?
Replies
8
Boosts
0
Views
966
Activity
Apr ’26
vCard (.vcf) import on iOS not preserving PHOTO and X-SOCIALPROFILE — expected behavior?
I’m running an experiment around generating and importing .vcf files on iOS and wanted to sanity check expected behavior with others who may have explored this deeper. Goal Programmatically generate a vCard (v3.0) that, when imported into iOS Contacts, includes: Standard fields (name, phone, email, organization, etc.) Contact photo (PHOTO) Social profile (e.g., LinkedIn via X-SOCIALPROFILE) What I tested I tried to eliminate formatting issues by using iOS itself as the source of truth. Steps: Created a new contact directly in iOS Contacts Added name, phone, email Added a contact photo Added a social profile (LinkedIn) Exported that contact as a .vcf Deleted the contact from the device Re-imported the exported .vcf Result Core fields (name, phone, email, etc.) are restored correctly Contact photo is NOT restored Social profile is NOT restored as a native social entry This happens even though: The exported .vcf clearly contains a PHOTO field The exported .vcf includes X-SOCIALPROFILE;type=linkedin:... Additional testing I also generated my own .vcf files that closely mirror the structure produced by iOS (field order, encoding, etc.), and observed the same behavior: Photo does not reliably import Social profiles do not appear as native social entries in Contacts Question Is this expected behavior on iOS? More specifically: Are PHOTO fields intentionally ignored (or restricted) during .vcf import? Is X-SOCIALPROFILE supported for import, or only used internally/exported by Contacts? Is there any supported way to programmatically create a contact with: a photo social profile entries via .vcf import? Current understanding Based on testing, it appears that: iOS may export more data than it will accept on import Some fields (like social profiles and possibly photos) may only be fully supported when created via native APIs (e.g., Contacts framework) rather than .vcf Would appreciate confirmation or any documentation pointers if this is known behavior or if there are recommended alternatives. Closing thought If this is by design, it would be helpful to know which vCard fields are officially supported for import vs. export on iOS, since the current behavior is not entirely symmetric.
Replies
0
Boosts
0
Views
254
Activity
Apr ’26
.contactAccessPicker shows blank sheet on iOS 26.1
I’m running into an issue using .contactAccessPicker on a device running iOS 26.1 - a blank sheet appears instead of the expected Contact Access Picker. It works on: Simulator (iOS 26.0) Device + Simulator (iOS 18.6) The issue appears specific to real devices on iOS 26.0+. Environment: Device: iPhone 16 Pro iOS Versions Tested: 26.0 and 26.1 Xcode 26.0.1 SwiftUI app, deployment target: iOS 17+ @available(iOS 18.0, *) private var contactPicker: some View { contactsSettingsButton("Title") { showContactPicker = true } .contactAccessPicker(isPresented: $showContactPicker) { _ in Task { await contactManager.fetchContacts() showSelectContacts = true } } } Filed a Feedback: FB20929400 Is there a known workaround?
Replies
6
Boosts
3
Views
493
Activity
Mar ’26
iOS26+ CNContactViewController will duplicate phone numbers and email addresses if an Avatar image is attached when creating the contact
Using the ContactUI framework CNContactViewController(forNewContact contact: CNContact?) to add a new contact to the ContactStore. If the new contact does not have an attached image then the contact is saved correctly. If the new contact DOES have an attached image then all entries in the phoneNumbers or emailAddresses array are doubled when written to the contactStore. Viewing the contact via the Contacts app shows the duplications. This is only happening on iOS26+. Earlier versions of the operating system do not show duplicates. Has anyone else seen this issue? Feedback reference: FB20910502
Replies
4
Boosts
1
Views
571
Activity
Feb ’26
Determining the number of missed calls.
In iOS 18, when a contact with multiple phone numbers called, the system clearly indicated which specific number was used—often by highlighting it in red for missed calls or tagging it as 'recent.' However, in iOS 26, this distinction is missing, and there is no way to determine which of the contact's numbers the call originated from.
Replies
0
Boosts
0
Views
503
Activity
Feb ’26
Contacts Provider Extension not removed from Contacts list after app uninstall on iOS 26
Hi, I’ve built an app that includes a Contacts Provider Extension (CPE). On iOS 18, I observed the expected behavior — when the main app is uninstalled, the corresponding CPE entry is also removed from the Contacts list. However, on iOS 26, this no longer happens. After uninstalling the app, the CPE remains visible and active in the Contacts list, even though the app is gone.
Replies
7
Boosts
3
Views
810
Activity
Jan ’26
Does Contact Provider supports Localize when ask Permission
When I call https://developer.apple.com/documentation/contactprovider/contactprovidermanager/enable() to request to use Contact Provider, I received a dialog with message like this "App Name would like to add its contacts as its own list. Contacts added this way can be removed from settings". I would like to support this message in Japanese or other languages. Is it possible?
Replies
3
Boosts
1
Views
485
Activity
Nov ’25
Is ContactAccessButton broken?
Simple question - on iOS 26 ContactAccessButton does not appear to show any UI when attempting to search for a contact in either the contact access picker on the ContactAccessButton. This behavior occurs in the Apple provided sample code , as well as a basic example: struct ContentView: View { @State var searchText : String = "" var body: some View { VStack { TextField("Search", text: $searchText) ContactAccessButton( queryString: searchText, ignoredEmails: nil, ignoredPhoneNumbers: nil, approvalCallback: { identifiers in print(identifiers) }) } .padding() } } Am I doing something wrong or is this just not working?
Replies
1
Boosts
0
Views
577
Activity
Oct ’25
iOS 26 Public Beta Duplicate Contacts
I'm not sure at which beta it happened, but somewhere during the iOS 26 Public Beta releases, my iCloud Contacts have duplicated close to 100 times each. When I scroll to the bottom of the list to try and manage duplicates, it indicates I only have 2 duplicates. I should be sitting around 350 contacts and instead, I now have over 10k. Anyone else with this issue? I have filed Feedback in the app. I'm not certain if it was related to iOS 26 or iPadOS 26 as I have both, but noticed it first on my iPhone. I confirmed that the issue has affected my iCloud Contacts and therefore all of my Apple devices included older iOS and MacOS versions. Short of manually deleting all the duplicates, I'm at a loss as to how I can correct his.
Replies
0
Boosts
0
Views
402
Activity
Sep ’25