provide notifications in the UI of the iPhone App #64

Closed
opened 2026-08-09 14:01:20 +00:00 by hugo · 3 comments
Owner

when the gitea/forgejo server provides notifications, those should show up in the iPHone app. Have that as a separate icon in the little icon bar on the home screen and clickinmg on it shows all notifications (make it possible to switch between open and closed notifications) and clicking one goes to the item that created that notification.

Also make the app listen on the server for notifications (a per-minute check or something slower even is fine) and turn them into standard iOs notificatgions that can be managed and configured with the standard iOs settings and behave like native notifications are meant to (so for example tapping them goes to the element that created that notification).

when the gitea/forgejo server provides notifications, those should show up in the iPHone app. Have that as a separate icon in the little icon bar on the home screen and clickinmg on it shows all notifications (make it possible to switch between open and closed notifications) and clicking one goes to the item that created that notification. Also make the app listen on the server for notifications (a per-minute check or something slower even is fine) and turn them into standard iOs notificatgions that can be managed and configured with the standard iOs settings and behave like native notifications are meant to (so for example tapping them goes to the element that created that notification).
hugo added the enhancementcritical labels 2026-08-09 14:01:20 +00:00
hugo added this to the first public update release milestone 2026-08-09 14:01:32 +00:00
Author
Owner

Implemented in 8ba7f5a.

  • Added typed Gitea/Forgejo notification listing, incremental polling, pagination, read transitions, target resolution, per-server cursors, and resilient polling across multiple configured servers.
  • Added view-ready Rust notification records and persisted notification preferences so Swift remains a native presentation/platform-integration layer.
  • Added the separate accessible Home bell, native Open/Closed notification lists, pull-to-refresh and pagination, and direct repository/issue/pull-request/commit navigation.
  • Added contextual notification authorization, the app-specific iOS Settings link, privacy-safe local notification content, deterministic per-thread replacement, foreground-silent refresh, and BGAppRefreshTask scheduling controlled by iOS.
  • Updated generated UniFFI bindings, Xcode project/plist background-task declarations, and the notification scenarios in TESTING.md.

Verification:

  • cargo fmt --all -- --check
  • RUSTFLAGS="-D warnings" cargo check --workspace --all-targets
  • cargo clippy --workspace --all-targets -- -D warnings
  • cargo test --workspace (55 tests passed)
  • arm64 Debug build succeeded for the iPhone 17 Pro iOS 26.5 simulator, then installed and launched in that simulator only.
  • Exercised the Home bell, live Open and Closed lists, empty/paginated states, native Settings layout, issue deep-link navigation, Back navigation, and an unread thread moving from Open to Closed after the server-side read transition.
  • Confirmed the final simulator launch has no notification or background-task registration error. No development build was installed on a physical iPhone.
Implemented in `8ba7f5a`. - Added typed Gitea/Forgejo notification listing, incremental polling, pagination, read transitions, target resolution, per-server cursors, and resilient polling across multiple configured servers. - Added view-ready Rust notification records and persisted notification preferences so Swift remains a native presentation/platform-integration layer. - Added the separate accessible Home bell, native Open/Closed notification lists, pull-to-refresh and pagination, and direct repository/issue/pull-request/commit navigation. - Added contextual notification authorization, the app-specific iOS Settings link, privacy-safe local notification content, deterministic per-thread replacement, foreground-silent refresh, and `BGAppRefreshTask` scheduling controlled by iOS. - Updated generated UniFFI bindings, Xcode project/plist background-task declarations, and the notification scenarios in `TESTING.md`. Verification: - `cargo fmt --all -- --check` - `RUSTFLAGS="-D warnings" cargo check --workspace --all-targets` - `cargo clippy --workspace --all-targets -- -D warnings` - `cargo test --workspace` (55 tests passed) - arm64 Debug build succeeded for the iPhone 17 Pro iOS 26.5 simulator, then installed and launched in that simulator only. - Exercised the Home bell, live Open and Closed lists, empty/paginated states, native Settings layout, issue deep-link navigation, Back navigation, and an unread thread moving from Open to Closed after the server-side read transition. - Confirmed the final simulator launch has no notification or background-task registration error. No development build was installed on a physical iPhone.
hugo closed this issue 2026-08-15 10:57:19 +00:00
hugo reopened this issue 2026-08-15 11:07:20 +00:00
Author
Owner

@hugo Notification delivery verification for issue #64: this mention is intentionally generated to validate Gotcha's real background polling, native local notification delivery, and tap routing in the iPhone 17 Pro simulator.

@hugo Notification delivery verification for issue #64: this mention is intentionally generated to validate Gotcha's real background polling, native local notification delivery, and tap routing in the iPhone 17 Pro simulator.
Author
Owner

Completed in ced28ba.

  • Added native Open/Closed notification lists behind the Home bell, paginated server loading, read transitions, and routing to repository, issue, pull-request, and commit destinations.
  • Added incremental multi-server polling, persisted per-server cursors, BGAppRefreshTask scheduling, privacy-safe native local alerts, native authorization state, and Settings integration.
  • Corrected the notification delegate's actor isolation so tapping a delivered alert routes through UIKit on the main actor instead of crashing during state restoration.
  • Corrected the notification Settings switch freeze by updating the visible cell in place instead of reloading a section containing the active UISwitch accessory.
  • Added an explicit Debug-only simulator validation mode and updated TESTING.md; production builds continue to use the system background scheduler.

Verification:

  • cargo fmt --all -- --check
  • RUSTFLAGS="-D warnings" cargo check --workspace --all-targets
  • cargo clippy --workspace --all-targets -- -D warnings
  • cargo test --workspace (all tests passed; the unchanged gate was run with loopback access for its mock-server tests)
  • iPhone 17 Pro / iOS 26.5 simulator Debug build succeeded.
  • Settings remained responsive through authorization and switch updates.
  • A real unread Gitea thread (actions-bot/action-failures#34) was polled in the background, delivered as a privacy-safe native notification, tapped into the correct issue, and confirmed read on Gitea. No new crash report was produced.

The separate iOS Settings deep-link behavior is tracked as #71 and is not folded into this issue.

Completed in `ced28ba`. - Added native Open/Closed notification lists behind the Home bell, paginated server loading, read transitions, and routing to repository, issue, pull-request, and commit destinations. - Added incremental multi-server polling, persisted per-server cursors, `BGAppRefreshTask` scheduling, privacy-safe native local alerts, native authorization state, and Settings integration. - Corrected the notification delegate's actor isolation so tapping a delivered alert routes through UIKit on the main actor instead of crashing during state restoration. - Corrected the notification Settings switch freeze by updating the visible cell in place instead of reloading a section containing the active `UISwitch` accessory. - Added an explicit Debug-only simulator validation mode and updated `TESTING.md`; production builds continue to use the system background scheduler. Verification: - `cargo fmt --all -- --check` - `RUSTFLAGS="-D warnings" cargo check --workspace --all-targets` - `cargo clippy --workspace --all-targets -- -D warnings` - `cargo test --workspace` (all tests passed; the unchanged gate was run with loopback access for its mock-server tests) - iPhone 17 Pro / iOS 26.5 simulator Debug build succeeded. - Settings remained responsive through authorization and switch updates. - A real unread Gitea thread (`actions-bot/action-failures#34`) was polled in the background, delivered as a privacy-safe native notification, tapped into the correct issue, and confirmed read on Gitea. No new crash report was produced. The separate iOS Settings deep-link behavior is tracked as #71 and is not folded into this issue.
hugo closed this issue 2026-08-15 12:21:46 +00:00
Sign in to join this conversation.