Skip to content

parity: extend PWA==Android parity standard to include native iOS (PWA==Android==iOS) #107

Description

@dmz006

Context

dmz006/datawatch-app is now building a native SwiftUI iOS client (see docs/plans/2026-05-27-ios-client.md).

The parity standard needs to be extended from PWA == Android to PWA == Android == iOS.

Requested changes in this repo (dmz006/datawatch)

1. Parity tracking docs

Update any docs/parity-status.md or equivalent to add an iOS column alongside Android. Every feature row should have: PWA | Android | iOS.

2. Push notifications — APNs support

iOS uses APNs (Apple Push Notification service), not FCM. The server needs to be able to send push to both FCM (Android) and APNs (iOS) device tokens.

Required server-side work:

  • Accept platform=apns on POST /api/device/register (currently only platform=fcm is handled)
  • Send to APNs when platform=apns token is registered alongside any FCM send
  • APNs payload schema (matching existing FCM schema):
    {
      "aps": {
        "alert": { "title": "Session waiting", "body": "<session name>" },
        "content-available": 1,
        "badge": <unread_alert_count>
      },
      "sessionId": "...",
      "type": "wait"
    }

3. No iOS-only API paths

All API endpoints the iOS client calls must already exist (iOS consumes the same REST + WebSocket API as Android and the PWA). Filing this issue as a checkpoint — please flag if any endpoint is Android-specific or needs adjustment.

4. Parity rule update

If there is a documented parity rule or contract between the PWA and mobile clients, please extend it to include: "Native iOS patterns (APNs, Keychain, Face ID, WKWebView, SwiftUI navigation) are the iOS-idiomatic equivalents of their Android counterparts. Capability parity is required; implementation parity is not."

Tracking

  • Mobile plan: dmz006/datawatch-app docs/plans/2026-05-27-ios-client.md
  • Story 12 (Push/APNs) in mobile plan is blocked on the server-side APNs work above
  • ETA for iOS client needing APNs: ~10 weeks from 2026-05-27

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions