We need an official answer: wrong wiring, known bug on 26.5, or unsupported?
AlertConfiguration.AlertSound.default works. AlertConfiguration.AlertSound.named("lifeloop_alarm_silent") schedules successfully (Stop/Snooze UI, no API error) but playback is always system default — never our bundled CAF.
OFFICIAL API WE FOLLOW
Documentation: AlertConfiguration.AlertSound.named(:)
https://developer.apple.com/documentation/activitykit/alertconfiguration/alertsound/named(:)
"The name of the sound file to use for the alert. Choose a file that's in your app's main bundle or the Library/Sounds folder of your app's data container."
WWDC25 session 230 shows:
let sound = AlertConfiguration.AlertSound.named("Chime")
with the file in the main bundle. We use:
AlertConfiguration.AlertSound.named("lifeloop_alarm_silent")
Our Swift schedules with AlarmManager.AlarmConfiguration.alarm(..., sound: alertSound).
REFERENCES WE ALREADY READ
AlarmConfiguration overview: https://developer.apple.com/documentation/alarmkit/alarmmanager/alarmconfiguration
Albert Pascual DTS reply (Feb 2026) on this thread pointed at nested alertConfiguration with sound
AlarmKit FAQ: https://developer.apple.com/forums/thread/797158
Older forum reply (~2025): claimed .named("Glass Drum.caf") worked — not verified on 26.5 today
On iOS 26.5: Bundle.main finds our file with AND without ".caf" in the lookup string; playback still system default
OUR WIRING (please confirm correct or tell us what to change)
We schedule fixed-time dose alarms with:
AlarmManager.AlarmConfiguration.alarm(
schedule: .fixed(fireDate),
attributes: attributes,
stopIntent: stopIntent,
secondaryIntent: snoozeIntent,
sound: alertSound)
.default on this parameter works. .named("lifeloop_alarm_silent") does not — despite Bundle.main finding the file (proof below).
Question: Is sound: on .alarm(...) correct for custom AlertSound.named, or must sound go in nested AlertConfiguration(title:body:sound:) as in the overview example?
WHAT WE HEAR ON DEVICE
sound = .default → loud system alarm (works)
sound = .named("lifeloop_alarm_silent") → same loud system/default every time
No API error — silent fallback to default
PROOF 1 — FILE IN SHIPPED IPA
$ find Payload -name "lifeloop_alarm_*.caf"
Payload/LifeLoop.app/lifeloop_alarm_silent.caf
PROOF 2 — RUNTIME ON DEVICE (2026-06-30, iOS 26.5)
Bundle.main.url(forResource:withExtension:): FOUND
Bundle.main.url(full filename in name): FOUND
Path: .../LifeLoop.app/lifeloop_alarm_silent.caf
All .caf in main bundle: lifeloop_alarm_silent.caf
Library/Sounds: (none)
Widget .appex .caf: (none)
Native log at schedule:
[alarmkit] build_config · soundModeRaw=silent alertSound=named:lifeloop_alarm_silent silentCafInBundle=true
[alarmkit] schedule_ok · alarmID=FBDF2082-61F1-4C93-8B20-094A60EA8626
CAF: lifeloop_alarm_silent.caf — mono, 44100 Hz, 16-bit PCM, ~0.5 s
QUESTIONS FOR DTS
Main app bundle only, or must CAF also be in widget .appex?
Must named(_:) include ".caf" or base name only?
Bundle.main FOUND at schedule time but playback is default — known bug on 26.5?
Please answer: (A) wrong wiring + correct recipe, (B) known bug + fix version, or (C) not supported — please document.
Thank you.
Same problem as tonny00 — custom CAF never plays, always the loud system/default alarm.
App: LifeLoop (com.stujacks.lifeloop) on iOS 26.5 (physical device).
https://developer.apple.com/forums/thread/814732
Topic:
App & System Services
SubTopic:
General
1
0
205