Building an iOS App in 2 Hours with Claude Sonnet 4: My first Experience
The other day I decided to try iOS development in VSCode and within two hours I vibecoded a small app and open sourced it: https://github.com/ramzesenok/Appinion. Here I’m gonna share my experience and maybe you find it valuable and it will inspire you to try the same.
Getting Started with AI-Assisted Development
I was using GitHub Copilot with VSCode and Claude Sonnet 4 model. It’s modern & I wanted to try it out. The best way to start engaging with agents is to tell them what you want to achieve, iterate on the idea and then let them plan what it’s gonna do further, so that’s what I did.
“I wanted to build an app where you would search for a certain app from the App Store and it will fetch all the reviews for it and let ChatGPT summarize it.” – something among these lines. “I’m thinking about using App Store Connect API and OpenAI API for that.”
“The app should be simple and have native design. It should be universal for iOS and macOS. It should have two screens. One for search and one for details. Search screen should have a search bar and the list of found apps. It should show last searches when no query is entered.”
“The detail page should show the app icon, the title and summarize description. Come up with a plan of how we are going to implement it and ask any questions that you think are appropriate. Ultrathink.”
The Planning Phase
It went to a thinking mode and then asked me some questions for clarification, like “Do we need to persist summaries to not regenerate them every time?”. “Yes, we do. Also make sure you use the latest Swift and SwiftUI APIs and async/await.”
It started planning, outlined the structure, and told me which resources (like API keys) I should provide. Then I confirmed that I liked the plan and it started building. All the time I was using superwhisper to not type but rather tell it what to do, so the iteration was very fast.
The Development Experience
The next two hours were more or less just me tapping Continue, Continue, Continue, Continue… I am yet to discover how to automate that :)
But what Claude did was such a delight to observe. It started creating files, writing views, previews for them, writing models and did intermediate builds without me even asking for it to make sure everything works.
I was literally bored because I didn’t know what to do. It needed my attention every few minutes to Continue but the autonomy of it impressed me – It invoked terminal all the time with comments that I wouldn’t come up with myself.
Problem Solving and Iteration
After it finished the very basic version of the app, I decided to give it a spin. I ran the app and found out that it doesn’t work – the call returns failure. So I told it about the problem and it immediately found why this problem might be.
Moreover, since it cannot use the app and make sure it works after the fixes, it created an integration test which did the call and it made sure that the call succeeds. Over those two hours it created many of those tests which help it understand if the app is working as intended.
For half an hour it was developing JWT. I don’t know how it works, so I wouldn’t be able to write it or it would take me significant amount of time. Ironically, when the app finally worked, I realized that App Store Connect only allows you to access your apps, not all of the apps.
The Pivot
This is where we pivoted to using iTunes RSS API. Claude successfully implemented it and it worked from the first time. Then I asked to clean up the App Store Connect API invocations and the project became clean again.
It came up with ChatGPT prompt itself which works really good – it wouldn’t be able to do so if I wouldn’t tell it the result I want to have. So being explicit about your intentions and plans plays a crucial part.
Security and Open Source Preparation
After that I started exploring the idea of how to hide my API key to not expose it to open source using ChatGPT and Google when it hit me – I’ll let Claude do it. And it successfully implemented it within minutes and taught me what’s possible.
Meanwhile, it was creating countless Markdown files, explaining what it did. Slightly annoying because I anyways wasn’t gonna read it, but it might be helpful for those who want to know what exactly it did.
I asked to clean it all and also prepare the project for open sourcing – writing the single concise Readme, then I created the repository and I asked it to push everything there. Whoosh and it’s done.
Final Thoughts
I would spend at least a whole day writing this app. Or probably a few days, given I first started with ASC API. This mistake only costed me an hour of iteration with Claude and then we moved on when we realized it’s wrong.
Take a look at the project. It’s clean, it’s working and I didn’t write a single line of code. Marvelous, isn’t it? What a time to live in…