- Add Apple Sign-In backend (JWKS verification, account linking, session management) - Implement push notification deep linking with NotificationDeepLinkRouter - Add jailbreak detection, runtime integrity monitoring, secure enclave service - Implement OAuth social login, token refresh, and secure logout flows - Add image caching (memory/disk), optimizer, upload queue, async semaphore - Implement notification analytics, type preferences, and category setup - Expand UI test suite with UITestBase, accessibility, auth flow, performance tests - Add CI pipeline for iOS UI tests (3 device sizes) and performance benchmarks - Restructure Xcode project to manual groups with KordantWidgets target - Add SwiftLint, Swift Collections/Algorithms/GoogleSignIn dependencies - Update project.yml for XcodeGen with new targets and configurations
6.4 KiB
6.4 KiB
App Store Review Notes
For Apple App Review Team — Kordant v1.0.0
Demo Account
Use the following credentials to test the app:
| Field | Value |
|---|---|
reviewer@kordant.ai |
|
| Password | Review2026! |
| Account type | Basic (free tier) |
This account has:
- Completed onboarding
- 3 sample alerts (exposure, breach, voice match)
- 2 watchlist items (email + phone)
- Active subscription status
- Push notifications enabled
Key Features to Test
1. Authentication Flow
- Launch the app → see login screen
- Enter demo credentials → authenticate
- See onboarding (if using fresh account) → 4-step flow
- After onboarding → ATT explanation screen → choose Continue or Skip
- Land on Dashboard
2. Social Sign-In
- From login screen → "Sign in with Apple" → native Apple Sign-In sheet
- From login screen → "Continue with Google" → native Google Sign-In flow
- Both flows complete authentication and land on Dashboard
3. Dashboard (Home Tab)
- Threat Score gauge with animated progress ring
- Recent alerts list with severity badges
- Service summary cards (5 services)
- Quick action buttons (Scan, Alerts, Profile, Settings)
- Pull-to-refresh to reload data
- Deep link from push notification → specific alert detail
4. Services (Tab 2)
- DarkWatch — Dark web monitoring, watchlist management, exposure tracking
- VoicePrint — Voice enrollment for AI cloning detection, call analysis settings
- SpamShield — Call/SMS spam protection, blocked numbers, spam rules
- HomeTitle — Property title monitoring, add/remove properties
- Remove Brokers — Data broker removal requests, listing tracking
5. Alerts (Tab 3)
- List of all alerts with severity indicators
- Pull-to-refresh
- Pagination (infinite scroll)
- Tap alert → detail view with full context
- Mark as read / resolve alert
6. Settings (Tab 4)
- Account section — edit name/email, save changes
- Subscription section — current plan, renewal date, upgrade button
- Preferences — theme (light/dark/system), push notifications, biometric auth
- Voice Call Analysis — toggle, auto-block synthetic, audio retention
- Privacy & Analytics — ATT status, enable/disable analytics
- Siri Shortcuts — configure shortcuts for common actions
- SpamShield Protection — manage spam rules
- Family Group — invite family members
- Danger Zone — log out
7. Account (Tab 5)
- Profile with avatar and contact info
- Log out button
Complex Features Explained
App Tracking Transparency (ATT)
- The app shows a pre-dialog explanation screen before the system ATT prompt
- This explains what data may be collected and why
- User can choose "Continue" (shows system prompt) or "Skip" (anonymous analytics only)
- Analytics respects the user's choice — no tracking without consent
- User can change their choice in Settings → Privacy & Analytics
Subscription Model (Web Billing)
- Subscriptions are managed via Stripe Customer Portal (web billing)
- The "Upgrade Plan" button opens the billing portal in Safari
- This is compliant with App Store Guidelines because:
- Subscriptions are for access to monitoring services (not digital content consumed within the app)
- The service runs server-side (dark web scanning, data broker monitoring)
- Web billing is appropriate for service-based subscriptions
Jailbreak Detection & Degraded Mode
- On launch, the app runs security checks (jailbreak detection, runtime integrity)
- If a jailbreak is detected, the app enters "degraded mode":
- Security warning banner displayed
- Biometric auth disabled
- Sensitive data access restricted
- All activity logged
- The app remains functional but with reduced capabilities on compromised devices
CallKit SpamShield Extension
- The app includes a Call Directory extension for spam call filtering
- Blocked numbers are synced from the server every 15 minutes
- The extension reloads when new numbers are added/removed
- Requires user to enable Call Screening in Settings → Phone → Call Blocking & Identification
Siri Shortcuts
- Siri intents are donated after onboarding completion
- Available shortcuts:
- "Check my alerts with Kordant" → opens alerts tab
- "Run a scan with Kordant" → triggers dark web scan
- "Check my threat score with Kordant" → opens dashboard
Home Screen Widgets
- Small: Threat score gauge
- Medium: Threat score + 2 recent alerts
- Large: Full dashboard with score, alerts, stats, quick actions
- Widgets refresh every 15 minutes via background fetch
- Widget data shared via App Group container
Background Modes
The app uses two background modes:
- Background Fetch — Refreshes data every ~15 minutes
- Remote Notifications — Receives push notifications for alerts
Both are declared in Info.plist under UIBackgroundModes.
Push Notification Deep Links
Push notifications deep link to specific screens:
screen: "alerts"+id→ specific alert detailscreen: "alerts"→ alerts tabscreen: "dashboard"→ dashboardscreen: "settings"→ settingsscreen: "darkwatch"→ DarkWatch servicescreen: "voiceprint"→ VoicePrint servicescreen: "spamshield"→ SpamShield servicescreen: "removebrokers"→ Remove Brokers service
Privacy
- Privacy manifest (
PrivacyInfo.xcprivacy) declares all data collection - No tracking across third-party apps or websites (
NSPrivacyTracking: false) - Data collected: Name, Email, Audio (voice samples), User ID, Device ID, Product Interaction, Crash Data
- Data linked to user: Name, Email, Audio, User ID, Device ID
- Data unlinked: Product Interaction, Crash Data
- No third-party tracking domains
Notes for Reviewer
- First launch experience: The app shows onboarding → ATT explanation → Dashboard
- If ATT is skipped: Analytics runs in anonymous mode (no IDFA, no device identifiers)
- If notifications are denied: App functions normally, just no push alerts
- If biometric is unavailable: Falls back to password-only authentication
- Offline behavior: App caches data and syncs when connection is restored
- Error states: All network failures show user-friendly error messages with retry option
Contact
If you have questions during review, please use the App Store Connect messaging system.