You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Closed — notificationSchedule (interval + calendar) and notificationCancel ship on both Apple and Android.
TS surface: notificationSchedule({id, title, body, trigger}) with discriminated-union trigger ("interval" | "calendar" | "location") + notificationCancel(id). Codegen requires trigger.type to be a string literal at the call site so the right runtime fn is picked at compile time.
Apple (v0.5.244, commit 7ef745b): interval → UNTimeIntervalNotificationTrigger, calendar → NSDateComponents via NSCalendar wrapped in UNCalendarNotificationTrigger, location → CLCircularRegion in UNLocationNotificationTrigger (iOS only — macOS logs a no-op since the UN-side trigger is iOS-only). Cancel via removePendingNotificationRequestsWithIdentifiers: + removeDeliveredNotificationsWithIdentifiers:. Added -framework CoreLocation to the iOS link line.
Android (v0.5.260, commit 405363e): PerryScheduledNotificationReceiver BroadcastReceiver fires when AlarmManager hits and posts the notification with the same channel + tap-routing as sendNotification. scheduleInterval uses setRepeating (repeats=true, capped at 60s minimum) or setAndAllowWhileIdle (one-shot). scheduleCalendar uses setAndAllowWhileIdle — inexact but Doze-safe and permission-free. Cancel tears down both the AlarmManager registration and any displayed notification.
Inexact-alarm trade-off documented: apps needing exact wall-clock fire have to request SCHEDULE_EXACT_ALARM themselves and switch to setExactAndAllowWhileIdle.
Out of scope, deferred to follow-up issues if needed:
Android Geofencing (scheduleLocation is a logged no-op — needs FUSED_LOCATION_PROVIDER from Google Play Services + ACCESS_FINE_LOCATION runtime grant)
Windows ToastNotifier scheduling
Linux/Web best-effort
Android BOOT_COMPLETED receiver to re-arm scheduled alarms after device reboot
Activity
fix(ui): #96 scheduled + cancellable local notifications (Apple) (v0.…
proggeramlug commentedon Apr 25, 2026
Closed —
notificationSchedule(interval + calendar) andnotificationCancelship on both Apple and Android.notificationSchedule({id, title, body, trigger})with discriminated-union trigger ("interval" | "calendar" | "location") +notificationCancel(id). Codegen requirestrigger.typeto be a string literal at the call site so the right runtime fn is picked at compile time.UNTimeIntervalNotificationTrigger, calendar →NSDateComponentsviaNSCalendarwrapped inUNCalendarNotificationTrigger, location →CLCircularRegioninUNLocationNotificationTrigger(iOS only — macOS logs a no-op since the UN-side trigger is iOS-only). Cancel viaremovePendingNotificationRequestsWithIdentifiers:+removeDeliveredNotificationsWithIdentifiers:. Added-framework CoreLocationto the iOS link line.PerryScheduledNotificationReceiverBroadcastReceiver fires when AlarmManager hits and posts the notification with the same channel + tap-routing assendNotification.scheduleIntervalusessetRepeating(repeats=true, capped at 60s minimum) orsetAndAllowWhileIdle(one-shot).scheduleCalendarusessetAndAllowWhileIdle— inexact but Doze-safe and permission-free. Cancel tears down both the AlarmManager registration and any displayed notification.Inexact-alarm trade-off documented: apps needing exact wall-clock fire have to request
SCHEDULE_EXACT_ALARMthemselves and switch tosetExactAndAllowWhileIdle.Out of scope, deferred to follow-up issues if needed:
scheduleLocationis a logged no-op — needsFUSED_LOCATION_PROVIDERfrom Google Play Services +ACCESS_FINE_LOCATIONruntime grant)BOOT_COMPLETEDreceiver to re-arm scheduled alarms after device rebootfix(ui-android): #94 actually wire notificationSend on Android (v0.5.…
fix(ui-android): #97 notification tap callback (v0.5.258)
fix(ui-android): #96 schedule + cancel notifications (v0.5.260)
fix(android): implement notification bridge methods in template app (#…
test(gc): run both aarch64 stack-map walkers over a frame we chose
fix(gc): the aarch64 fast stack-map walker misread every SVE-shaped p…