Guideline 2.1
Guideline 2.1 - Performance: App Unresponsive After In-App Purchase Closure
Our Take
This is a straightforward technical issue under Guideline 2.1 (Performance) - your app fails to properly handle the dismissal of the purchase flow, leaving the interface in a broken state where no buttons or functionality work.
This is likely a manual review finding, not automated, as it requires specific user interaction testing.
The fastest path to approval is identifying and fixing the root cause of this UI freeze, which typically involves improper state management, memory leaks, or event handling issues in your purchase flow dismissal logic.
Resolution Guide
Reproduce the exact issue
Test your submitted build on macOS 14.3+ by opening any in-app purchase dialog, then closing it (both cancel and complete scenarios). Verify if UI becomes unresponsive.
Check purchase flow state management
Review your StoreKit delegate methods and ensure proper cleanup when purchase views are dismissed. Look for retain cycles or incomplete state resets.
Audit main thread blocking
Verify that purchase completion/cancellation callbacks aren't blocking the main UI thread. Move heavy processing to background queues.
Fix view controller lifecycle issues
Ensure purchase view controllers are properly deallocated and parent views regain first responder status when dismissing purchase flows.
Test on multiple macOS versions
Verify the fix works across macOS 13.0+ and specifically test the scenario described by Apple's reviewers.
Add defensive programming
Implement timeout handlers and fallback UI state restoration in case purchase flows don't complete normally.
Prevention
Example Rejection Email
Before & After
After user closes in-app purchase dialog, all app buttons and controls become unresponsive and clicks have no effect.
When purchase dialog is dismissed, app returns to normal responsive state with all functionality working correctly.
What changed: Proper state management and UI thread handling ensure the app remains functional after purchase flow completion.
Purchase view controller dismissal leaves the main interface in a frozen state where no user interaction is processed.
Purchase flow cleanup properly restores first responder status and main view controller event handling.
What changed: Fixed view controller lifecycle management prevents UI blocking after modal dismissal.
Community Solutions · 0
Sign in to share your solution.
More Guideline 2 (Performance) rejections
- Guideline 2.1 - App Completeness: App Crashes During Review
- Guideline 2.1 - App Completeness: App Requires External Hardware Not Provided for Review
- Guideline 2.1 - App Completeness: Crashes on Launch
- Guideline 2.1 - App Completeness: Demo Account Not Working
- Guideline 2.1 - App Completeness: IAP Products Not Found in Binary
- Guideline 2.1 - App Completeness: Missing App Icon