How I Built an iOS App with Vibe Coding — From Blank Page to App Store

Vibe Coding

AI isn’t some distant future anymore — it’s already part of the world around us. Some people welcome it, others worry about it, and many still aren’t sure what to make of it. But like it or not, it’s here, and it’s already reshaping the way we work, think, and build things.

I come from a web development background — React, React Native, the usual suspects — and even though I’ve moved on from coding full-time, the creative urge never really went away. So when I came across the idea of Vibe Coding, something just clicked. It felt like the perfect excuse to roll up my sleeves and start building again.

So, what is Vibe Coding? It’s using AI tools to generate and assist with code — sometimes from a simple prompt. It’s a buzzword, yes, but also a legitimate shift in how apps can be built today.

This is the story of how I used AI to bring an app from idea to App Store — step by step.

The problem I wanted to solve

We live in the age of subscriptions — music, streaming, software, and more. One day, while trying to get a grip on my recurring expenses, I opened an Excel sheet, and I thought: Wouldn’t it be great to have a simple, elegant iOS app that gives me a dashboard view of all this?

That was the spark.

I wanted a native iOS app to:

  • List all my subscriptions
  • Show monthly and annual totals
  • Be easy to use and visually pleasant
  • Work in multiple languages

At first, I tried learning SwiftUI from scratch. I made progress, but life got in the way — and the project was left unfinished.

Then I discovered Vibe Coding.

Enter Cursor: my first AI coding assistant

Cursor IDE

Cursor is an AI-powered IDE built on top of VS Code. What makes it unique is its deep integration with your entire codebase. It doesn’t just generate isolated code snippets — it understands your app structure, your files, your dependencies, and can even read documentation to stay context-aware.

To kick things off, I turned to ChatGPT and asked it to craft the perfect prompt to describe my app idea to Cursor. I included:

  • What the app should do
  • A list of key features
  • The architecture I preferred (MVVM)
  • Apple’s official Swift and SwiftUI documentation
  • Apple Design Guidelines

Once the prompt was ready, I dropped it into Cursor… and then watched the magic unfold. It created files, generated SwiftUI views, structured the model layer — essentially laying the foundation of the app within minutes.

I opened the project in Xcode, launched the simulator, and just like that, the very first version of MyAbonPlus was running on screen.

And from there, it was surprisingly easy to tweak and improve this first version simply by chatting with Cursor. I could ask it to adjust UI elements, rename variables, refactor functions or add small enhancements — all in natural language. The feedback loop was fast and incredibly efficient.

Extending the app with Cursor

Once the skeleton was built, I started adding more features:

  • Multilingual support
  • UI enhancements
  • Error handling

At this stage, Cursor began to struggle. When it attempted to implement localization, things broke. Every fix seemed to create new bugs — or worse, reverse previous progress.

I found myself stuck in a frustrating spiral of the loop of the death of the loop of the death of the loop of the death …

I tried multiple times to untangle the mess on my own, but despite my best efforts, I had to fall back to earlier versions (thanks to Git). After a few cycles of building up and rolling back, I decided to try to continue with ChatGPT.

Adding features with ChatGPT

ChatGPT became then my trusted co-pilot.

I explained what I wanted to build:

  • How the multilingual system should work
  • What UI adjustments were needed
  • Where the logic was failing
  • How to integrate widget support
  • How to enable iCloud data backup using CloudKit

Multilingual support

ChatGPT responded with clear, step-by-step guidance. For localization, it initially recommended the older .strings file approach, but after further exploration, I implemented Apple’s recommended strategy using @LocalizedStringKey and Localizable.stringsdict, ensuring better scalability and future compatibility.

I ended up implementing the multilingual support manually, guided by ChatGPT’s general instructions. It required more effort on my part, but once it was in place, I was finally able to move forward with Vibe Coding.

Widgets

When it came to widgets, ChatGPT helped me structure the widget extension, define timelines, and display relevant subscription data — both monthly and annual costs — right on the Home Screen.

iCloud sync

For iCloud sync, the process was more intricate. But with ChatGPT’s help, I implemented CloudKit support, allowing users to back up and sync their data seamlessly across devices. This required a fair bit of debugging, testing, and Xcode configuration — but step by step, it all came together.

Thanks to AI guidance and manual refinement, these features transformed the app into a fully rounded, modern iOS experience.

Code refactoring: structuring the app with ChatGPT

As the app grew, maintaining code clarity became critical. That’s when I moved toward MVVM architecture (Model-View-ViewModel).

ChatGPT helped me:

  • Break down business logic from SwiftUI views
  • Create reusable components
  • Structure my ViewModel logic cleanly
  • Write extensions and utilities for common formatting and behaviors

Refactoring with AI didn’t just clean up my code — it taught me new Swift idioms and patterns along the way.

Debugging the app with ChatGPT

Let’s face it: bugs happen.

But instead of aimlessly searching Stack Overflow, I now had a conversational debugger.

I would paste the error message or describe a weird behavior, and ChatGPT would:

  • Suggest fixes
  • Identify probable causes
  • Walk me through troubleshooting steps

One of the biggest wins was solving issues related to SwiftData and iCloud synchronization. It saved me hours — if not days — of frustration.

Publishing the app (yes, with help from ChatGPT)

The final stretch was preparing for App Store submission.

From App Group configuration to code signing issues, ChatGPT became a publishing expert:

  • It helped me configure my .entitlements and Info.plist
  • Explained how to handle build settings in Xcode
  • Helped generate clean, compliant metadata for App Store Connect

Thanks to AI, I submitted my first iOS app built entirely through Vibe Coding.

Creating a landing page with V0

Apple requires a landing page URL for app submission, so I started by creating a basic version with ChatGPT. While it helped me get the structure in place, the result was visually underwhelming — functional, but far from appealing. The design lacked polish, and I knew it wouldn’t make a great first impression.

That’s when I turned to V0, Vercel’s AI-powered web builder. With a well-crafted prompt and just a few tweaks, V0 generated a clean, modern, and responsive landing page built on Next.js. To my surprise, it even included dark and light mode support and a language selector by default — exactly the kind of user-friendly touch I was aiming for.

Thanks to V0, I went from a placeholder to a professional-looking landing page in minutes, without having to dive deep into front-end development.

You can visit the page here: suliworld.com/myabonplus

MyAbonPlus landing page

“MyAbonPlus” app is now live on the AppStore

I’m proud to share that MyAbonPlus is now available on the iOS App Store.

I decided to release the app for free (it was previously $1,99).

I truly believe it brings real value — a clean, focused tool to manage your subscriptions, with no ads and no data tracking. It’s designed to be simple, private, and useful.

While AI was a powerful ally throughout the process, building and polishing the app still required a lot of effort — designing, testing, debugging, and refining. If it helps you bring clarity to your subscriptions, I’ll consider that mission accomplished.

Conclusion: a developer’s superpower (with responsibility)

Vibe Coding isn’t magic — and it’s certainly not a replacement for developers.

What it is, though, is a powerful productivity boost.

Vibe Coding illustration

By guiding AI through clear intentions and structured prompts, I was able to:

  • Build a complete iOS app from scratch
  • Learn new tools, frameworks, and development patterns
  • Publish the app on the App Store
  • Save countless hours otherwise spent on boilerplate and repetitive debugging

But here’s the critical part: AI doesn’t excuse you from understanding your code.

You still need to stay on top of your codebase — know how things work, track down issues, and sometimes rewrite what the AI produces. There were moments where I had to dive in, untangle errors, and rebuild features manually. And that’s okay.

AI didn’t replace me — it amplified me. It helped me go further, faster, and with more confidence.

In this new era of development, the most valuable skill is not just writing code, but knowing how to ask the right questions, stay in the loop, and take ownership of the output.

If you’re a developer — or a curious maker — wondering how AI fits into your workflow, I have one message:

Try it. Vibe it. Ship it. But rule it.