Files
Kordant/tasks/ios-production/27-data-usage-descriptions.md
2026-05-26 16:06:34 -04:00

3.1 KiB

27. Data Usage Descriptions

meta: id: ios-production-27 feature: ios-production priority: P1 depends_on: [] tags: [compliance, privacy, app-store, production]

objective:

  • Add all required permission usage descriptions to Info.plist for camera, microphone, location, and other sensitive APIs

deliverables:

  • Info.plist permission descriptions
  • Localized descriptions for supported languages
  • In-app permission rationale dialogs
  • Permission handling in all features

steps:

  1. Audit all permissions used:
    • Camera (document scanning, VoicePrint enrollment)
    • Microphone (VoicePrint enrollment)
    • Photo Library (document upload)
    • Push Notifications (alerts)
    • Face ID / Touch ID (biometric auth)
    • Location (not currently used — verify)
    • Contacts (not currently used — verify)
  2. Add Info.plist descriptions:
    • NSCameraUsageDescription: "Camera is used to scan documents for identity verification"
    • NSMicrophoneUsageDescription: "Microphone is used to enroll your voice for VoicePrint protection"
    • NSPhotoLibraryUsageDescription: "Photo library access is used to upload identity documents"
    • NSFaceIDUsageDescription: "Face ID is used to securely access your account"
    • NSUserTrackingUsageDescription: (from task 26)
    • UIBackgroundModes: fetch, remote-notification
  3. Localize descriptions:
    • Add translations for Spanish, French (if supporting)
    • Create InfoPlist.strings for each language
    • Keep descriptions concise but informative
  4. Add in-app rationale dialogs:
    • Show custom dialog before system permission request
    • Explain why permission is needed
    • Include example of feature benefit
    • Add "Don't Allow" and "Allow" buttons
  5. Handle permission denials:
    • Show guidance to Settings if permission denied
    • Degrade functionality gracefully
    • Don't crash if permission unavailable
  6. Test all permission flows:
    • First request → rationale → system dialog
    • Deny → feature degraded → Settings guidance
    • Allow → feature fully functional
    • Revoke in Settings → app handles gracefully

tests:

  • Unit: Test permission state handling
  • Integration: Test rationale dialog flow
  • Device: Test all permissions on physical device

acceptance_criteria:

  • All required Info.plist descriptions present
  • Descriptions accurate and user-friendly
  • Localized for all supported languages
  • In-app rationale dialogs before system requests
  • Graceful degradation when permissions denied
  • Settings guidance for denied permissions
  • No crashes from missing permissions
  • All permission flows tested on physical device
  • App Review will approve descriptions

validation:

  • Check Info.plist → all NS*UsageDescription keys present
  • Test camera permission → rationale dialog → system dialog
  • Deny permission → app shows Settings guidance
  • Check localization → descriptions in correct language
  • App Review → no rejections for permission descriptions

notes:

  • Apple rejects apps with generic permission descriptions
  • Descriptions must explain specific feature usage
  • Always show rationale before system dialog
  • Test on physical device — simulator doesn't show permission dialogs realistically