Rejection 1 — Guideline 2.1(a)
Crash
EXC_BREAKPOINTdispatch_assert_queue_fail
Cause
Empty completionHandler closure inferred @MainActor by Swift 6, but called on com.apple.launchservices.open-queue. Starting with Sequoia, AppKit began enforcing that expectation with dispatch_assert_queue.
Fix
Remove the completionHandler parameter entirely. No closure, no annotation, no assertion.
Rejection 2 — Guideline 2.1(b)
Symptom
Tip jar sheet appears empty during App Store review. No products, no error message.
Cause
Product.products(for:) returns [] when the Paid Apps Agreement in App Store Connect is not active. No agreement, no products in the sandbox.
Fix
Detect empty array, show explanatory message instead of a blank sheet.