Just shipped my Flutter app (Authn8) to the App Store after a brutal month of rejections. Thought I'd share what went wrong and how I fixed it - especially for anyone building Flutter apps without access to iOS hardware.
The Setup
I built Authn8 (a team-based 2FA manager) in Flutter and was using Stripe for subscriptions via webviews. Submitted confidently. Got rejected within 24 hours.
The Rejections
Here's what Apple hit me with across multiple rejections:
Webviews for payments - You can't use Stripe webviews for digital content. Must use Apple's IAP system.
Missing legal agreements - There's a hidden "Paid Applications Agreement" you need to accept in App Store Connect. Not obvious.
Xcode capabilities not enabled - I'd configured IAP in App Store Connect but forgot to enable the capability in Xcode itself.
Subscriptions not submitted - Your IAP subscriptions need to be submitted for review alongside your app. They don't auto-submit.
The Fix: RevenueCat
Switched to RevenueCat for IAP management. The integration took about a week:
Configure Apple subscriptions + Google Play
Integrate RevenueCat SDK
Rip out all Stripe/webview code
Rebuild subscription UI natively in Flutter
The Impossible Part: Testing Without Hardware
Here's the kicker - I don't own an iPhone. Just a MacBook.
You literally cannot test IAP in the iOS simulator. My testing strategy became:
Make changes based on docs/Stack Overflow
Submit and wait 24-48 hours
Let Apple reviewers tell me if it works
Repeat
It was painful. But it worked.
Nuclear Option: Going Fully Native
Around week 3, I rebuilt every feature that used webviews directly in Flutter. My app was originally lean, leveraging my .NET 8 website for some features. Now the Flutter app is completely standalone.
More code to maintain, but zero webviews = zero rejection risk.
Final Checklist (so you don't repeat my mistakes)
Before you submit:
Enable IAP capability in Xcode (not just App Store Connect)
Accept all legal agreements in App Store Connect
Submit IAP products for review with your app
Remove ALL webviews if possible (especially for payments)
Get a real test device if you're doing payments
Budget 48 hours per review cycle
Was it worth it?
Absolutely. Seeing your app live in the App Store is incredible. But I definitely underestimated the approval process.
Timeline: 1 month from first submission to approval Rejections: 4 Test devices owned: 0 Sanity remaining: questionable
For other Flutter devs:
Anyone else gone through App Store review hell? What tripped you up? Also curious if anyone's successfully tested IAP without owning an iPhone (please tell me your secrets).
App is live now: