CallKit Call Directory database corruption (sqlite Code 11)

Hi everyone,

I’ve filed a Feedback report (FB20986470) for a serious issue affecting the Call Directory database when add phone numbers for call blocking.

When adding blocking numbers to a Call Directory extension, the system’s CallKit database (/private/var/mobile/Library/CallDirectory/CallDirectory.db) becomes corrupted.

The reload call (reloadExtensionWithIdentifier) fails with error code 11 when the system tries to insert blocking entries, and the Console app on macOS shows the following errors:

database corruption page 2265525 of /private/var/mobile/Library/CallDirectory/CallDirectory.db at line 81343 of [f0ca7bba1c]
database corruption at line 79387 of [f0ca7bba1c]
Error Domain=com.apple.callkit.database.sqlite Code=11 "sqlite3_step for query 'INSERT INTO PhoneNumberBlockingEntry (extension_id, phone_number_id) VALUES (?, (SELECT id FROM PhoneNumber WHERE (number = ?))), (?, (SELECT id FROM PhoneNumber WHERE (number = ?))),...)'"

After this happens, CallKit becomes fully corrupted on the device and no further numbers can be added, even after:

  • Disabling and re-enabling the extension
  • Restarting the device (either force or soft restart)
  • Reinstalling the app
  • Waiting for a couple of minutes after this issue happens (that CallKit could possibly self-recovered)

I also tested other call-blocking apps, and they all fail with the same error. The only thing that recovers the system is a full “Reset All Settings.”

This issue has been reported by many users of my app, across multiple iOS versions and devices.

Similar related issue reported by another developer: https://developer.apple.com/forums/thread/806129

Steps to Reproduce:

  1. Enable the Call Directory extension from a call-blocking app.
  2. Add and reload blocking numbers (a few thousand entries).
  3. Perform multiple reloads between additions.
  4. Check the Console, the corruption errors appear.
  5. From this point, all insert attempts fail system-wide.

Expected Result:

Entries should be inserted successfully, or the system should self-recover without persistent corruption.

Actual Result:

sqlite3_step fails with Code=11, and the Call Directory database remains corrupted until the user resets all settings.

Additional Notes:

  • All numbers are sorted and deduplicated before insertion.
  • Happens intermittently after multiple reloads.
  • The system log always shows internal database failure.

Environment:

  • Device: iPhone 16 Plus
  • iOS 18.2 Beta (23C5027f)
  • Xcode 16.1 (17B55)

Attachments (included in Feedback FB20986470):

  • sysdiagnose captured immediately after the failure (with Phone app General Profile)

It seems like a system-level corruption affecting all Call Directory extensions once it occurs.

The issue persists with iOS 26.2 (23C5033h) Developer Beta. I'm attaching a new sysdiagnose for the issue in FeedbackAssistant.

As this CallKit bug/issue is really critical and we constantly have reports from our users, I would appreciate to have a response from an Apple representative for this. Thank you.

+1 I’m surprised that such a critical bug hasn’t been fixed after so many years. We also get a lot of complaints from users.

I first encountered this issue many years ago, and yes, like you say, once it has occurred its not possible to recover, the user has no option but to hard reset their phone if they want to be able to use the app. I tried to find my post(s) about it but the forum only seems to archive posts from 2021 onwards.

CallKit Call Directory database corruption (sqlite Code 11)
 
 
Q