Problem adding Call Directory capability

I added a extension called Call Directory to an IOS app as we want to call blocking and caller id. I was able to add App Groups to both runner and CallDirectory. I cannot see of add Call Directory capability. Am I missing something. I added the extension through the Call Directory Target template. If I try to add this to CallDirectory.enitlements manually <key>com.apple.developer.callkit.call-directory</key> <array> <string>call-blocking</string> <string>caller-identification</string> </array> i recieve this signing error. Provisioning profile "iOS Team Provisioning Profile: "" doesn't include the com.apple.developer.callkit.call-directory entitlement. I cannot add Call Directory to an identifier in Apple Developer either.

Answered by DTS Engineer in 854609022

So, let me start by going back to here:

(1)

If I try to add this to CallDirectory.entitlements manually <key>com.apple.developer.callkit.call-directory</key>

That entitlement does not exist and never has.

(2)

<array> <string>call-blocking</string> <string>caller-identification</string> </array>

More broadly, the vast majority of our entitlements use simple boolean values, not arrays or other complex data structures. The two exceptions I'm aware of are DriverKit and the Network Extensions, both of which require specialized support on the portal. If we did have this entitlement (which we don't), it wouldn't work like this.

On our paid Apple Developer Program account (role: Account Holder/Admin), the Call Directory capability toggle does not appear on any iOS App Extension Identifier we create.

Yes. You're looking for something that does not exist.

As Quinn said:

My best guess is that these entitlements are being ‘hallucinated’ by an LLM.

This isn't really a guess. We've been seeing more examples of this happening.

Similarly:

My specific advice is that you not add entries to your .entitlements file by hand, but instead use Xcode’s Signing & Capabilities editor for that work.

Xcode's entitlement support is sufficiently complete that, in practical terms, it's "aware" of all entitlements. If an entitlement is not showing up in Xcode, that's because either:

  1. It's a managed entitlement which you would need to apply for and be granted (NOT what's happening).

  2. You're trying to apply it to the wrong "kind" of target, for example, trying to apply a DriverKit entitlement to an app (NOT what's happening here).

  3. The entitlement does exist at all (what's happening here).

Which leads to here:

Calling the API at runtime fails with com.apple.CallKit.error.calldirectorymanager error 1.

That error is CXErrorCodeCallDirectoryManagerError.Code.noExtensionFound, which is only returned when CXCallDirectory is unable to find a call directory extension inside your app bundle. I suspect that the real issue here is that your call directory extensions is either misconfigured (so the system doesn't recognize it's a call directory extension) or isn't being embedded in your app at all (due to project configuration or the signing issue created by trying to force this entitlement).

__
Kevin Elliott
DTS Engineer, CoreOS/Hardware

What makes you think you need the com.apple.developer.callkit.call-directory entitlement? AFAIK that’s not a ‘real’ entitlement, which is why you’re having such problems.

I see a lot of questions like this, where folks add an entitlement to their .entitlements file but Xcode rejects it because, although it looks plausible, it’s not a real entitlement. My best guess is that these entitlements are being ‘hallucinated’ by an LLM. My specific advice is that you not add entries to your .entitlements file by hand, but instead use Xcode’s Signing & Capabilities editor for that work. That UI is aware of what entitlements are necessary for any given capability, and will apply any necessary changes to your .entitlements file.

Share and Enjoy

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

On our paid Apple Developer Program account (role: Account Holder/Admin), the Call Directory capability toggle does not appear on any iOS App Extension Identifier we create. Because of that, provisioning profiles for those extension IDs never include the Call Directory entitlement and the extension cannot be enabled on device. That is the only reason we tried to add manually which does not work.

Environment

Membership: Apple Developer Program (paid, active)

Xcode: [16.x]

iOS devices tested: iOS 18.4.1, 18.5 and 18.6.1

App type: iOS app + Call Directory extension

App Groups: enabled and working

What I am not seeing In Certificates, Identifiers & Profiles → Identifiers → (iOS App ID, type App Extension), I expect to see a Call Directory capability toggle I can enable but it is not there

What actually happens

The Call Directory toggle is missing from the extension Identifier details page.

Profiles created for the extension ID don’t contain the Call Directory entitlement.

The extension never appears under Settings → Phone → Call Blocking & Identification.

Calling the API at runtime fails with com.apple.CallKit.error.calldirectorymanager error 1.

Evidence (redacted)

Signed entitlements of the built .appex do not contain a Call Directory key:

codesign -d --entitlements :- /path/to/YourExt.appex

Output only shows team/app-groups (no Call Directory entry).

The embedded mobileprovision lacks it as well:

security cms -D -i /path/to/YourExt.appex/embedded.mobileprovision >/tmp/ext.plist /usr/libexec/PlistBuddy -c 'Print :Entitlements:com.apple.developer.callkit.call-directory' /tmp/ext.plist

→ key not found

So, let me start by going back to here:

(1)

If I try to add this to CallDirectory.entitlements manually <key>com.apple.developer.callkit.call-directory</key>

That entitlement does not exist and never has.

(2)

<array> <string>call-blocking</string> <string>caller-identification</string> </array>

More broadly, the vast majority of our entitlements use simple boolean values, not arrays or other complex data structures. The two exceptions I'm aware of are DriverKit and the Network Extensions, both of which require specialized support on the portal. If we did have this entitlement (which we don't), it wouldn't work like this.

On our paid Apple Developer Program account (role: Account Holder/Admin), the Call Directory capability toggle does not appear on any iOS App Extension Identifier we create.

Yes. You're looking for something that does not exist.

As Quinn said:

My best guess is that these entitlements are being ‘hallucinated’ by an LLM.

This isn't really a guess. We've been seeing more examples of this happening.

Similarly:

My specific advice is that you not add entries to your .entitlements file by hand, but instead use Xcode’s Signing & Capabilities editor for that work.

Xcode's entitlement support is sufficiently complete that, in practical terms, it's "aware" of all entitlements. If an entitlement is not showing up in Xcode, that's because either:

  1. It's a managed entitlement which you would need to apply for and be granted (NOT what's happening).

  2. You're trying to apply it to the wrong "kind" of target, for example, trying to apply a DriverKit entitlement to an app (NOT what's happening here).

  3. The entitlement does exist at all (what's happening here).

Which leads to here:

Calling the API at runtime fails with com.apple.CallKit.error.calldirectorymanager error 1.

That error is CXErrorCodeCallDirectoryManagerError.Code.noExtensionFound, which is only returned when CXCallDirectory is unable to find a call directory extension inside your app bundle. I suspect that the real issue here is that your call directory extensions is either misconfigured (so the system doesn't recognize it's a call directory extension) or isn't being embedded in your app at all (due to project configuration or the signing issue created by trying to force this entitlement).

__
Kevin Elliott
DTS Engineer, CoreOS/Hardware

Problem adding Call Directory capability
 
 
Q