Background temporal events never fire on Epix 2 Pro (47mm) — registerForTemporalEvent silently ignored
Device: Epix 2 Pro 47mm SDK: connectiq-sdk-mac-8.3.0 minApiLevel: 3.4.0 App type: watch-app (sideloaded via USB for development, not yet published)
Summary
Background.registerForTemporalEvent() is called successfully (no exceptions, confirmed via on-device debug log written to Storage), but ServiceDelegate.onTemporalEvent() is never invoked by the system — confirmed across two separate real-device test windows of 53 minutes and >7 hours, with zero invocations in either.
Manifest (relevant excerpt)
<iq:application id="159a32c1-1d84-496e-ad00-1a3557457abb" type="watch-app"
entry="BodyCharge.MainApp" minApiLevel="3.4.0">
<iq:permissions>
<iq:uses-permission id="Background"/>
<iq:uses-permission id="SensorHistory"/>
</iq:permissions>
</iq:application>
(No <iq:background> element — confirmed this is not a valid child in this manifest schema version; build fails with a schema validation error if added.)
Code (relevant excerpt)
(:background)
class BgService extends Sys.ServiceDelegate {
function initialize() { Sys.ServiceDelegate.initialize(); }
function onTemporalEvent() {
// This log line is written to Storage as the VERY FIRST statement.
// It never appears in 7+ hours of real-device testing.
try { dbgLog("BG-ENTER"); } catch(eLog) {}
registerBgSoon(); // re-arms next event
try {
performCheck("BG");
} catch (ex) {}
BG.exit({ "ts" => nowSec() });
}
}
function registerBgSoon() {
try {
BG.registerForTemporalEvent(Time.now().add(new Time.Duration(60)));
} catch(e) { /* not hit */ }
}
getServiceDelegate() is implemented on AppBase and returns [new BgService()]. Build succeeds with the compiler explicitly confirming background wiring:
WARNING: epix2pro47mm: The entry point '$.xxx.MainApp' was implicitly
added to the background process since the app contains declarations
annotated with (:background).
What I've verified/ruled out
registerForTemporalEvent()call itself does not throw (wrapped in try/catch, confirmed via persistent debug log).- Manifest permissions
BackgroundandSensorHistoryare present. - App works perfectly when kept in the foreground — the alarm logic itself (threshold crossing, debounce, vibration+tone) fires correctly and has been confirmed working live on-device.
- Tested with request interval as low as 60 seconds.
- No Do Not Disturb / Sleep mode active during test windows.
- Simulator: manually triggering "Simulate Temporal Event" invokes
onTemporalEvent()correctly and the alarm logic runs as expected. The issue is specific to the real device.
Question
Is there a known issue with registerForTemporalEvent on Epix 2 Pro (or this firmware version), or an additional device-side permission/setting (e.g. via Garmin Connect Mobile) required for a sideloaded app to actually receive background wake-ups, beyond the manifest Background permission?
Any pointers appreciated — happy to provide the full watch firmware version or additional logs on request.