Problem: First rejection: HealthKit permission requested on launch, not on user-initiated action. Second rejection: derived data written back to HealthKit without explicit per-type consent. Four additional undiscovered issues: unnecessary background delivery registration, incorrect privacy nutrition label, watch extension requesting duplicate entitlements, export feature treated as 'sharing' by Apple.
Solution: HealthPermissionCoordinator wrapped all HealthKit calls, enforcing user-intent requirement and delaying permission requests until the specific feature was accessed. Custom pre-prompt before the system dialog explained each data type. Background delivery removed; HKObserverQuery used foreground-only. Watch extension entitlements refiled separately.
Technology: Swift · SwiftUI · HealthKit · StoreKit · Xcode
Optimisation pattern: eager-entitlement-request-to-user-intent-gated-permission-coordinator
Outcomes:
Third submission approved without reviewer questions. Time from second rejection to approval: 11 days. No data-handling findings in subsequent SOC 2 review. Pattern used for 2 subsequent HealthKit apps — both approved first submission.