From Idea to App Store, how i built an app using react-native expo

From Idea to App Store, how i built an app using react-native expo

It all started with a simple idea: "What if we built an app integrating AI that could track and help users with their goals, plus add other features too?" At the time, around late November, I was deeply invested in integrating AI into web apps and websites. Then came the challenge of learning React.

I had always been the type to say, "I can make anything with HTML, CSS, and vanilla JavaScript, so why do I need React?" That was until I gave myself a one-week window to understand the bare basics of React Native from various sources and build a somewhat functional clone of Uber. That's when the real work began.

I started by crafting various screens one by one. I initially hated how you couldn't just hit "Inspect" to debug or change the style of an element – it honestly felt frustrating at first, but I gradually got used to it. The first major hurdle appeared during testing. Unlike web development where you can use a browser, React Native development requires either a simulator or an actual device. Since our app primarily targeted the premium market (iPhone users) and I didn't own an iPhone (sponsors welcome! :,)), we needed an iPhone simulator. Apple, being Apple, restricts you from even trying to install their simulator on non-Mac systems, and I was using Linux.

One evening, I made a bold decision. I decided to "hackintosh" my way through this obstacle using my nearly 5-year-old computer. Installing macOS took an astounding 14 hours (or two business days, as I like to say). After much back-and-forth, I finally got the simulator working – trust me, it's significantly more challenging on non-Apple hardware, especially after the introduction of Apple Silicon.

Development continued on the Expo workflow, and I added numerous features while juggling exam preparations. OAuth pwas our first significant challenge (why have Google and Apple made it so complicated to implement?), so we stuck with our reliable old friend: email and password authentication.

Then came the big issue. We had built our entire app while testing on Expo Go because of its auto-reload feature. However, in the production build, it kept crashing for Apple users. This was particularly frustrating because I couldn't test it without an iPhone, and crash logs were practically useless. After two full days of scouring the web and countless self questions, I discovered something buried in the Expo documentation: adding --no-dev --minify flags makes it behave like a production build. (Pro tip to all developers out there: don't just run npx expo start – use these flags!)

It turned out that while Expo Go handled many things automatically, in the production build, our useEffect hook was rendering components in an infinite loop, causing chaos. Another day of debugging and remodeling component structure (fueled by two gallons of caffeine) got things somewhat stable, and the app finally stopped crashing on the first try – felt like a giant leap for humanity!

Next came implementing in-app purchases and setting up a webhook through Stripe that our Lambda function would use to add the premium tag, conditionally rendering certain components in the app. What we hadn't considered was the Spotify vs. Apple dispute. Apple had implemented a rule requiring the use of their in-app purchase system exclusively, rejecting third-party providers. This was yet another challenge to figure out and implement.

After 12 iterations (Apple reviewers don't tell you everything at once – they take their time rejecting your app and then gradually reveal requirements), today (December 23rd, around 7 AM) I received the email I'd been waiting for:

"Congratulations! Your submission was accepted for distribution. App Name: Reset AI"

Finally! Seeing an app you built appear on the App Store is incredibly fascinating (at least to me). If you're interested, check out Reset AI on the App Store and leave a review. While it's currently available only for iOS, we'll soon release the Android version on the Play Store.