# idp.global Swift App Multiplatform SwiftUI companion app for `idp.global` across iPhone, iPad, and Mac. The current build is a polished preview backed by a mock service layer. It already walks through the core product flow: - bind a device to an account with a QR payload - review and approve identity or access requests - track recent security and system events - manage notification permissions and send a local test alert ## Current Product Surface After pairing, the app opens into a passport-style dashboard with four sections: - `Passport`: digital identity summary, trust context, and quick actions - `Requests`: approval queue with elevated-risk guidance and inline review - `Activity`: timeline of pairing, approval, and system events - `Account`: member profile, trusted-device context, and recovery summary The layout adapts by platform: - iPhone uses a compact tab-based container - iPad and Mac use a split-view workspace with richer side-by-side review ## Pairing Flow The sign-in flow supports: - live QR scanning through the camera - manual payload paste for testing - a seeded preview payload while the real backend is still being wired up Seeded payload on first launch: `idp.global://pair?token=swiftapp-demo-berlin&origin=code.foss.global&device=Safari%20on%20Berlin%20MBP` ## Mocked Preview Behavior The app currently runs against `MockIDPService`, which seeds: - a paired member profile - pending and handled approval requests - recent notifications and security events - simulated incoming requests from the toolbar This keeps the UI realistic while preserving a clean integration seam for the live backend later. ## Open And Run 1. Open `IDPGlobal.xcodeproj` in Xcode. 2. Build and run the `IDPGlobal` scheme on: - `My Mac` - an iPhone simulator - an iPad simulator You can also build from the command line: ```bash xcodebuild -project IDPGlobal.xcodeproj -scheme IDPGlobal -configuration Debug -destination 'platform=macOS' build ``` ## Useful Preview Launch Arguments These launch arguments are already supported by the app model: - `--mock-auto-pair`: automatically pair with the seeded preview payload on launch - `--mock-section=overview` - `--mock-section=requests` - `--mock-section=activity` - `--mock-section=account` - `--mock-section=notifications`: opens the activity timeline using a notification-friendly alias Example: ```text --mock-auto-pair --mock-section=requests ``` ## Project Structure - `Sources/App`: app entry point and shared state in `AppViewModel` - `Sources/Features/Auth`: first-run pairing flow and QR scanner UI - `Sources/Features/Home`: passport dashboard, requests, activity, notifications, and account surfaces - `Sources/Core/Models`: app-facing domain models - `Sources/Core/Services`: mock backend boundary and local notification coordination ## Next Integration Step Replace `MockIDPService` with a live implementation that: - exchanges the QR payload for a real session - loads profile, request, and activity data from the backend - posts approval decisions back to `idp.global` - syncs notification state with server-side events