The Archive Nightmare
Here's something Expo tutorials conveniently forget to mention: Xcode archiving will test your will to live.
When I first tried to archive for App Store submission, my builds kept appearing in "Other Items" in Xcode Organizer instead of under my app name. The feeling of seeing your app in "Other Items" is like seeing your luggage on the wrong carousel at the airport. Technically it exists, but it's utterly useless.
Hours of debugging (and one dramatic moment where I considered becoming a goat farmer) led to these lessons:
The Golden Rules (Tattoo These on Your Arm):
- Always open the
.xcworkspace, not.xcodeproj. They look the same but they are NOT the same. This will cause you pain. - Select "Any iOS Device" as the build target. If you see your simulator selected, stop immediately. Go directly to jail. Do not collect $200.
- Clean DerivedData when things go wrong (so... always):
rm -rf ~/Library/Developer/Xcode/DerivedData/AnimalDetective-* # Translation: "Xcode, forget everything you think you know" - Verify bundle identifier matches everywhere:
com.metaltorchlabs.pixieplay. Check it. Check it again. Then check it once more because you definitely typed it wrong somewhere.
The working archive command (copy this, you're welcome):
xcodebuild archive \
-workspace ios/AnimalDetective.xcworkspace \
-scheme AnimalDetective \
-configuration Release \
-archivePath ~/Desktop/AnimalDetective.xcarchive \
-destination "generic/platform=iOS"
# If this works on the first try, go buy a lottery ticket
Analytics Without Being a Creep
For a kids' app, analytics need to be privacy-first. You're not Facebook (and for a kids' app, you definitely don't want to be). I integrated Meta App Events with maximum privacy settings because nothing says "trustworthy children's app" like NOT tracking everything kids do.
Privacy Configuration (Non-Negotiable):
- App Tracking Transparency (iOS 14.5+ requirement. Apple will literally reject you)
- GDPR-compliant data collection (Europe doesn't mess around)
- No personal data stored (no names, no emails, no "haha we have your data now")
- User opt-out capability (and make it EASY to find, not buried in 47 menus)
What I Actually Track:
- Level selections: Which worlds are popular? (Spoiler: Farm and Ocean win every time)
- Animal discoveries: Engagement metrics. Are kids actually tapping animals or just staring at the screen?
- Level completions: Progression data. Do they finish levels or rage-quit after 3 animals?
- Purchase conversions: Did they buy the unlock after playing the free level? (This one's for rent money)
Where to Check Your Analytics (And What It All Means)
Okay, you've set up analytics. Now where the heck do you see them? Here's the treasure map:
App Store Connect, Analytics Tab
- Downloads: How many people downloaded your app. Celebrate every single one. That's a human who chose YOUR app over millions of others.
- Sessions: How many times people opened your app. If downloads are high but sessions are low, your app might be... boring. (Ouch, but useful to know!)
- Retention: Do people come back? Day 1 retention of 30%+ is good for games. Below 10%? Houston, we have a problem.
- Crashes: If this number isn't 0, PANIC. Just kidding. Check the crash logs and fix them.
Meta Events Manager (events.facebook.com)
- Event Overview: See all your custom events like level_selected, animal_discovered, etc.
- Event Volume: How often each event fires. If "purchase_completed" is 0, either your IAP is broken or your pricing is wrong.
- Funnel Analysis: Track the journey from app_open to level_selected to purchase_initiated to purchase_completed. Find where people drop off (usually at purchase_initiated. Nobody likes spending money).
What the Numbers Actually Mean:
| Metric | Good Sign | Bad Sign |
|---|---|---|
| Session Length | 5-15 minutes (engaged but not addicted) | Under 1 min (boring) or 2+ hours (parent's phone is MIA) |
| Levels Per Session | 2-4 levels explored | Only free level, never explores paid content |
| Purchase Conversion | 2-5% of free users convert | Under 1% (price too high or value unclear) |
| Day 7 Retention | 20%+ come back after a week | Under 10% (content exhausted or forgotten) |
Pro Tip: Check analytics weekly, not daily. Daily checking leads to "OH NO we only got 3 downloads today!" panic attacks. Weekly gives you actual trends.
All this data without knowing who the users are, just what they enjoy. Privacy-first analytics: because being helpful doesn't mean being creepy.
The Final Submission Checklist (Don't Skip Any!)
Before hitting "Submit for Review" and nervously refreshing your email for 3 days:
- All version numbers aligned (app.json, package.json, Info.plist). You WILL forget one, check twice
- Build number incremented from previous submission. Apple remembers EVERYTHING
- Screenshots for all device sizes (iPhone, iPad). Yes, all of them. Yes, they're all slightly different sizes. Yes, this is annoying.
- App Preview video (optional but helps. Parents scroll fast, videos stop thumbs)
- Privacy Policy URL (required for kids' apps. Use a real URL that actually loads)
- Age rating questionnaire completed (click through honestly, lying here ends badly)
- "Made for Kids" designation selected. This triggers extra review, so make sure you're actually compliant
- COPPA compliance confirmed. Parental gates on EVERYTHING external
- Content rights verified (all assets original or licensed. Free stock sounds from 2008 don't count)
- Test on physical devices. Simulator lies to you. Trust no one but real hardware.
- Restore purchases working. Apple's testers WILL try this, and they WILL reject you if it fails
What I'd Do Differently (Hindsight is 20/20)
- Start with EAS Build earlier: Expo Application Services handles a lot of the native complexity automatically. Past me thought "I'll learn native builds for fun!" Past me was wrong.
- Set up CI/CD from day one: Automated builds save hours. Manual builds at 11 PM lead to typos, tears, and rejected apps.
- Test IAP on devices weekly: Don't wait until submission. Sandbox accounts expire, configs change, and suddenly nothing works the night before your launch.
- Keep a version changelog: Apple asks "What's new?" every update. "Uh... stuff?" is not an acceptable answer.
- Design for iPad from the start: Retrofitting landscape tablet layouts is painful. iPad users expect things to look good. They paid extra for those pixels.
- Take breaks: You cannot debug at 3 AM. You think you can. You cannot. Go to bed.
The Result
After weeks of development, countless cups of coffee, several rejected builds (each with increasingly passive-aggressive Apple feedback), and one moment where I genuinely considered if cows even MAKE that sound... Animal Detective is live on the App Store!
Kids around the world are now tapping on cows, dolphins, and penguins, hearing their sounds and (hopefully) learning about wildlife. Some kid in Australia probably knows what a capybara sounds like now because of me. That's pretty cool when you think about it.
Resources That Saved My Life (Bookmarks I Actually Used)
- Expo Documentation. Your new best friend. Read it twice.
- Apple's App Store Review Guidelines. Dense but essential. Section 1.3 is your kids' app bible.
- Google's Families Policy. Google's rules for kids' apps. Spoiler: also strict.
- AdMob Families Program. How to show ads without getting banned into oblivion.
- COPPA Compliance Guide. The actual legal stuff. Read it. Not kidding.
- App Store Connect Analytics. Where your download numbers live. Prepare for emotional rollercoaster.
- Stack Overflow. Let's be honest, it's always Stack Overflow.
Final Thoughts (The Sappy Part)
Publishing to the App Store is a marathon, not a sprint. More accurately, it's a marathon where the finish line keeps moving, someone hides your water bottle, and occasionally the ground is on fire. There are guidelines to follow, certificates to manage (they expire! at the worst times!), and countless small details that can delay your launch.
But seeing your app live, knowing real kids are playing something you built, learning animal sounds instead of watching their 47th YouTube video, makes every rejected build, every 2 AM debugging session, and every moment you questioned your career choices absolutely worth it.
If you're building a kids' app, embrace the compliance requirements. Yes, parental gates are annoying to implement. Yes, privacy configurations are confusing. But they exist to protect children, and honestly? Building something safe for kids feels good. Following these rules from the start saves headaches later, and you get to sleep at night knowing you didn't accidentally let a 4-year-old see a crypto ad.
Happy shipping! (And maybe take a nap first. You've earned it.)