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.
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.
I created a custom extension point using:
AppExtensionPoint.DefinitionAppExtensionPoint.BindAppExtensionPoint.MonitorAppExtensionProcess
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.
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.
I would appreciate clarification on the following points:
-
Does AudioAccessoryKit support custom ExtensionFoundation extensions?
Specifically, are extensions created using
AppExtensionPoint.DefinitionandAppExtensionPoint.Bind, and launched throughAppExtensionPoint.MonitorandAppExtensionProcess, considered valid app extensions for AudioAccessoryKit? -
Does
AccessoryControlDevice.current(for:)require a specific system-defined extension point or extension type, rather than a custom extension point? -
Does AudioAccessoryKit require any additional entitlement, capability, extension configuration, or authorization for
current(for:)to succeed? -
Is the
ASAccessoryinstance required bycurrent(for:)expected to be obtained from the same ASK session used by the host app duringregister(), or can the extension obtain the accessory from its own ASK session? -
What does
AccessoryControlDevice.Error.invalidated/Request invalidatedspecifically indicate in this situation? Is there a way to obtain more diagnostic information about why the request was invalidated? -
Is there an official sample project demonstrating the complete integration of AccessorySetupKit, AudioAccessoryKit placement updates, and the required app extension?
- 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.