# 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