Update: Custom ExtensionFoundation extension launches successfully, but AudioAccessoryKit requests are still invalidated

Hi Apple Developer Support,

I have performed additional experiments to investigate whether AccessoryControlDevice.current(for:) and update(_:) can be used from a custom ExtensionFoundation extension.

The results have helped narrow down the issue.

1. Host app registration succeeds

The host app successfully obtains the accessory from its AccessorySetupKit session and registers the placement capability:

try await AccessoryControlDevice.register(
    accessory,
    capabilities: [.placement]
)

Log:

[ASK] AAK 步骤0 ASK配件
id=22E9E2E0-46B4-9435-C0C2-4F16FB6A0568
name=Buds Pro 2
inSession=true
sessionCount=1
placement=inEar
state=authorized
source=session.accessories
sessionActivated=true
caps=placement

[ASK] AAK 步骤1(主App) register 成功
placement=inEar
id=22E9E2E0-46B4-9435-C0C2-4F16FB6A0568

The registration call completes successfully.

2. Custom ExtensionFoundation extension launches successfully

I created a custom extension point using:

  • AppExtensionPoint.Definition
  • AppExtensionPoint.Bind
  • AppExtensionPoint.Monitor
  • AppExtensionProcess

The host app successfully discovers the extension and launches it.

Logs:

[ASK][PLC] 扩展点构造成功
id=com.nothing.smartcenter.placement

[ASK][PLC] Monitor 结果
identities=1
stateIdentities=1
unapproved=0
disabled=0

[ASK][PLC] 发现扩展
bundle=com.nothing.smartcenter.placement
point=com.nothing.smartcenter.placement

[ASK][PLC] AppExtensionProcess 创建成功

[ASK][PLC] XPCSession 创建成功
[ASK][PLC] XPCSession activate 成功

[ASK][PLC] sendSync 成功
—— 扩展已响应,进程确实起来了

Therefore, the custom extension is installed, discovered, launched, and able to communicate with the host app through XPC.

3. AccessoryControlDevice.current(for:) still fails inside the extension

Inside the running extension, I obtain the accessory from its AccessorySetupKit session. The session contains one accessory.

However, calling:

let device = try await AccessoryControlDevice.current(
    for: accessory
)

consistently fails with:

AccessoryControlDevice.Error.invalidated
Request invalidated

Logs:

[ASK][PLC] 实验3-current 请求已送达
op=probe worn=false

[ASK][PLC] e3 扩展回传:
ask-session 复用 count=1

[ASK][PLC] e3 扩展回传:
current FAIL
AccessoryControlDevice.Error.invalidated
desc=Request invalidated

The same result occurs when attempting the placement update experiment:

[ASK][PLC] 实验4-offHead 请求已送达

[ASK][PLC] e4off 扩展回传:
ask-session 复用 count=1

[ASK][PLC] e4off 扩展回传:
current FAIL
AccessoryControlDevice.Error.invalidated
desc=Request invalidated

Because current(for:) fails, I have not yet been able to verify whether update(_:) itself works.

4. Questions for Apple

I would appreciate clarification on the following points:

  1. Does AudioAccessoryKit support custom ExtensionFoundation extensions?

    Specifically, are extensions created using AppExtensionPoint.Definition and AppExtensionPoint.Bind, and launched through AppExtensionPoint.Monitor and AppExtensionProcess, considered valid app extensions for AudioAccessoryKit?

  2. Does AccessoryControlDevice.current(for:) require a specific system-defined extension point or extension type, rather than a custom extension point?

  3. Does AudioAccessoryKit require any additional entitlement, capability, extension configuration, or authorization for current(for:) to succeed?

  4. Is the ASAccessory instance required by current(for:) expected to be obtained from the same ASK session used by the host app during register(), or can the extension obtain the accessory from its own ASK session?

  5. What does AccessoryControlDevice.Error.invalidated / Request invalidated specifically indicate in this situation? Is there a way to obtain more diagnostic information about why the request was invalidated?

  6. Is there an official sample project demonstrating the complete integration of AccessorySetupKit, AudioAccessoryKit placement updates, and the required app extension?

Environment
  • iOS: 26.4
  • Accessory: Nothing Ear / Buds Pro 2 (internal model B172)
  • Frameworks: AccessorySetupKit, AudioAccessoryKit, ExtensionFoundation, CoreBluetooth
  • Host app bundle ID: com.nothing.smartcenter
  • Custom extension point: com.nothing.smartcenter.placement

At this point, BLE communication, AccessorySetupKit pairing, host-side AudioAccessoryKit registration, extension discovery, extension process launch, and XPC communication are all working.

The remaining blocker is that AccessoryControlDevice.current(for:) returns Request invalidated even when called inside the successfully running custom extension.

Could you please clarify whether this custom ExtensionFoundation architecture is supported by AudioAccessoryKit, or whether a specific Apple-defined extension type is required?

Thank you for your help.