Inquiry regarding issues with the CXSetTranslatingCallAction action

We are currently verifying the functionality of CXSetTranslatingCallAction. We tested its implementation in a VoIP app—using Apple's Translate app by default—and confirmed that it works correctly in some instances. However, we have encountered an issue where, under certain conditions, the real-time translation feature becomes unavailable until the device is rebooted.

The issue manifests as follows:

  • When the real-time translation feature is enabled in CallKit, a beep sounds accompanied by the announcement "Starting translation," but the translation fails to proceed and terminates immediately. This behavior persists upon repeated attempts.
  • Restarting the app does not resolve the issue; once this occurs, the feature remains unusable until the device itself is rebooted.

Since the feature works normally after a device reboot, it does not appear to be a fundamental implementation error; I would like to investigate the root cause of this behavior. What information or steps are required to investigate this?

I conducted the test using an iPhone 16 Pro running OS version 26.5. It is the same for both CallKit and LCK.

However, we have encountered an issue where, under certain conditions, the real-time translation feature becomes unavailable until the device is rebooted.

A few questions:

  • Once it breaks, does the failure only affect your app or does translation fail in other apps, particularly Phone.app?

  • When you say you "restart your app", did you specifically force quit and relaunch your app?

Since the feature works normally after a device reboot, it does not appear to be a fundamental implementation error; I would like to investigate the root cause of this behavior. What information or steps are required to investigate this?

The basic process here is to:

  • Start with as minimally configured device as possible. Ideally, this is a dedicated test device that ONLY has your app installed, but at minimum, you should reboot the device and only interact with the specific app you're testing.

  • Install the "Phone (General)" profile. This will unredact most call-related logging, which makes it easier to follow exactly what's happening.

  • Reproduce the issue under as controlled conditions as possible. Ideally, that's simply slow, direct testing, but, if necessary, you can proceed with normal testing and simply wait for the problem to happen.

  • Once the problem starts, reproduce the problem a few times. Take notes about what you did and when you did it, as well as noting the time anything happened.

  • When you've finished testing, leave the device idle for a few minutes, then trigger and collect a sysdiagnose using the instructions in the profile installation guide.

  • File a bug, upload your sysdiagnose and testing notes to that bug, then post the bug number back here.

In terms of investigating this yourself, the basic process is to open up the console archive in the sysdiagnose, then see if you can determine what happened based on what we logged. There isn't really any easy way to summarize that process, but Quinn's "Using a Sysdiagnose Log to Debug a Hard-to-Reproduce Problem" is a decent starting point.

__
Kevin Elliott
DTS Engineer, CoreOS/Hardware

FB24725948 Please let me know the progress.

FB24725948 Please let me know the progress.

Looking over the system log, it looks like you're hitting a limit on the number of simultaneous translation connections, which leads to this error:

2026-09-10 15:50:50.768629+0900 callservicesd: [com.apple.calls.callservicesd:CallTranslation] Failed to start downlink translation <NSError:0x7f246d8f0(SFSpeechErrorDomain:16) - {
    NSLocalizedDescription = "Maximum number of simultaneous requests reached";
}>

Note that I think this is a limit on the connections a given process can make, NOT a device-wide limit, which means the limit is fairly low. I haven't tried this, but I think you might hit the limit if you:

  • Make a call
  • Enable translation
  • Hold the call
  • Repeat that cycle "a few" times

To be clear, I'm not saying your app is doing anything wrong, just describing my guess as to what the bug is.

In any case, my main concern here is actually this:

Once this occurs, the feature remains unusable until the device itself is rebooted.

How long have you waited before retrying? I'd expect this to self-correct after a few minutes, if not sooner.

In terms of your app’s involvement here, I have a few suggestions:

  • If you're handling multiple calls, you might try enabling/disabling translation based on which call is active.

  • If you're programmatically activating translation, you may want to delay that process briefly as you transition to allow other calls to do their own transitioning.

  • There's a good chance that artificial stress tests where you're rapidly cycling through calls will create this issue. Those tests may still have some value, but I think I'd just leave translation off for those kinds of tests.

Finally, if you do any more testing and can upload logs, there are two things I’d be interested in seeing:

  1. A log that captures both the last call where translation worked and the first call where it failed, as that’s most likely to show the actual failure.

  2. A log where the calls have been intentionally isolated (only one call happening at a time) with each action on the call spread out over time.

Expanding on that second point, every action you take with a call (Starting, accepting, reporting, etc.) generates a significant amount of logging over a relatively broad time window. That can make it harder to follow exactly what’s occurring in a call, as the logging from one action can easily overlap with the next, particularly with multiple calls involved. Intentional slowing down (by pausing for a second or two before you make any change) and only reporting a single call at a time can make it much easier to interpret the log data.

__
Kevin Elliott
DTS Engineer, CoreOS/Hardware

Inquiry regarding issues with the CXSetTranslatingCallAction action
 
 
Q