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:
- Enable the Call Directory extension from a call-blocking app.
- Add and reload blocking numbers (a few thousand entries).
- Perform multiple reloads between additions.
- Check the Console, the corruption errors appear.
- 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.