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.

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.

I don’t have any info to share about the main issue; someone else in DTS is taking lead on that. However, I want to address this:

the forum only seems to archive posts from 2021 onwards.

That’s not quite right, but there are definitely issues seeing older posts. Rather than hijack this thread, I’ve started a new thread for this forums platform issue

Share and Enjoy

Quinn “The Eskimo!” @ Developer Technical Support @ Apple
let myEmail = "eskimo" + "1" + "@" + "apple.com"

I am following up on this thread and my feedback report FB20986470. I have not received any response on either platform.

If anyone has information about the status of this CallKit issue, I would appreciate an update.

I am following up on this thread and my feedback report FB20986470. I have not received any response on either platform.

If anyone has information about the status of this CallKit issue, I would appreciate an update.

I don't have a lot that I can share, but I will share what I can. The basic issue is basically what you'd expect— there's a database that's used to collect all call directory entries, and that database has become corrupt and cannot be opened.

How/why it's becoming corrupt is unknown, as the engineering team has never been able to identify any specific cause. There were significant reports of this happening several years ago, and those were addressed by the addition of several different data recovery mechanisms. That's also why the file wasn’t simply deleted and the entire directory system “reset”, as those recovery mechanisms were expected to be sufficient.

At this point, the issue is under active investigation, but I can't comment on if/when a fix might ship.

__
Kevin Elliott
DTS Engineer, CoreOS/Hardware

Thank you for the update. I appreciate knowing this is under active investigation and I hope for a possible fix to be released.

CallKit Call Directory database corruption (sqlite Code 11)
 
 
Q