get to prod tasks
This commit is contained in:
81
tasks/ios-production/27-data-usage-descriptions.md
Normal file
81
tasks/ios-production/27-data-usage-descriptions.md
Normal file
@@ -0,0 +1,81 @@
|
||||
# 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
|
||||
Reference in New Issue
Block a user