I used Claude Code to vibe code a Mac app in 8 hours, and it was more work than magic

Screenshot by David Gewirtz/ZDNET

Follow ZDNET: Add us as a preferred source on Google.


ZDNET’s key takeaways

  • Vibe coding trades creativity for coordination and oversight.
  • Performance and UI issues still demand human judgment.
  • AI shines when developers relentlessly lead, test, and correct.

Over all my years in the software business, I’ve built software using two fundamental techniques. The first technique was writing code myself, line-by-line. I enjoy that practice, though it can be incredibly time-consuming. If you hit a flow state, you can really groove on the process.

The second technique was managing other coders. This was usually a force multiplier, because those developers were often better and faster at line-by-line coding than I was. I could manage a few developers, moving projects along faster.

But I didn’t enjoy that practice as much. There was never a flow state. It was more like a constant level of planning, convincing, cajoling, correcting, and a bit of chaos. People are going to people, and if you’re a manager, that’s what you get.

Also: 10 things I wish I knew before trusting Claude Code to build my iPhone app

There is no flow state that comes from building a Mac app using AI with Claude Code. If you’ve ever managed programmers, you know what using Claude Code feels like. It is an enormous force multiplier, but you’re going to spend most of your time cajoling and correcting, and some of your time trying to chart your way out of AI-generated chaos.

As with managing human programmers, you’re going to be much more successful with Claude Code if you know how to code and you understand the underlying technology. That way, you can guide the AI on architectural and design decisions as well as simply defining features.

My ZDNET colleague Tiernan Ray recently tried his hand at vibe coding. He describes himself as a “newbie, with limited programming knowledge.” His conclusion: “I will say that using these tools gave me a greater appreciation for programmers.”

Also: I tried vibe coding an app as a beginner – here’s what Cursor and Replit taught me

I’m telling you this to set expectations. I’ve been programming since the time of wooden ships and iron programmers. The benefits I, and by extension any experienced developer, will get from a tool like Claude Code may be available to intrepid hungry-to-learn non-programmers as well. But don’t expect to wave a magic wand and get an app suitable for market just because you’re using an AI.

With that, let’s dive into my Mac project.

Starting with my iPhone app

I started with the iPhone app I previously built using Claude Code. The purpose of this app is to manage 3D printing filament spools dynamically. I have 120 spools that live on four storage racks of five shelves each. The spools are constantly moved between the racks and eight 3D printers, five of which can use four spools at once, one which can use eight spools, and two which are limited to just one spool each.

The iPhone app uses NFC tags to make it super easy to track the movement of these spools and uses the built-in camera to grab images of each spool for reference. I’ve been using this app daily for about two months now, and it’s a huge win for my workflow.

Also: Vibe coding feels magical, but it can sink your business fast – here’s how

But now, I want to make it work on the Mac. I also want to make it work on my Apple Watch, but that’s a story for a different article.

I initiate most of my print jobs over the network from my Mac, so being able to clearly see what materials and colors I have available, and what’s already been allocated, can prove helpful. I could use my phone, of course. But I’d like to be able to just open a Mac application on my desktop and see what I have in inventory.

The iPhone app is built using Swift and SwiftUI in Apple’s Xcode development environment. I use Claude Code in the terminal, where it works with Xcode to write the code.

Porting to the Mac

There is a lot of crossover between the Mac’s UI and the iPhone UI, particularly when using Swift. Fortunately, porting to the Mac did not require an entire rewrite. But it did require a lot of rework.

First, there was the question of the Mac’s limitations. My Mac Studio doesn’t have a camera, and the Mac doesn’t support NFC scanning. So while I wanted to retain the NFC and photo data gathered by the iPhone app, the Mac isn’t able to scan or manage it.

I also wanted the Mac to sync instantly and completely with the iPhone app. Whatever spool data existed on the iPhone should be visible from the Mac. Fortunately, Apple has built a fairly extensive library for sharing data via iCloud.

Also: What is AI vibe coding? It’s all the rage but it’s not for everyone – here’s why

I knew I was going to want to share my data when I started the iPhone app, so I built the iCloud architecture into the iPhone app from the beginning. When I started with the Mac app, it was just a matter of tapping into that data and bringing it down to the computer as well as the phone.

That was my starting point. I made sure to make a full backup of the app directory. I also checked everything into GitHub for source control and management.

Then I fired up Claude Code, told it I wanted it to branch my local Git repo, and explained I wanted to build a Mac app based on the work done on the iPhone app. As part of that first prompt, I explained that NFC and camera features didn’t need to be ported, but the iCloud architecture would be.

It started out pretty ugly.

Screenshot by David Gewirtz/ZDNET

Ten minutes later, I had a Mac app. It was crap. It looked terrible. Every time the spool list came up, it took forever to fill in. But getting from nothing to first run in ten minutes took about ten days less than it would have taken me had I done it line-by-line.

More ugly interface. Fortunately, it gets better.

Screenshot by David Gewirtz/ZDNET

Alternating between functionality and UI

It took a few rounds of running Xcode’s build tool, waiting for its inevitable errors and warnings, sharing those errors and warnings with Claude, and repeating. But after a while, the app was functional, although nothing like what I wanted to eventually end up with.

One area that Claude had some initial difficulty with was reconciling that the Mac has windows that resize. As such, the UI elements have to scale and resize accordingly. This is where building up Claude’s knowledge base became enormously important.

Also: 10 professional developers on vibe coding’s true promise and peril

As I did with the iPhone app, I instructed Claude Code to build in notes and status updates about everything it worked on, as well as lessons we learned. So once Claude finally understood that windows resize, that became a rule embedded in the project instructions.

On the iPhone, you transition from screen to screen, all in a vertical orientation. But on the Mac, I chose to make a three-pane screen. The left pane contains the main option buttons, the middle pane contains the list of spools, and the rightmost pane contains the spool data.

Even the settings look good now.

Screenshot by David Gewirtz/ZDNET

It didn’t take too long to get that working, but it took a large number of rounds of back-and-forth prompts to get it to look nice. There isn’t any one particularly standout prompt I can share with you, but I can tell you that I described what I wanted to see, had it move and rearrange items, and add styling to sections of the display. I did that with Claude a lot.

Also: I let Anthropic’s Claude Cowork loose on my files, and it was both brilliant and scary

Unfortunately, adding the three-pane display to the Mac implementation somehow broke the iPhone app. Here’s where being a programmer helps, because I finally figured out that Claude was probably trying to share screens across apps. When I explicitly told it to create new interface screens for the Mac and then repair the iPhone ones, things worked much better.

Architecturally, we had to deal with speed issues. The spool list was slow because it loaded full-resolution photos for every row. The fix was a thumbnail caching system that creates small 128-pixel versions of photos, stores them on disk, and generates them in the background so the list scrolls smoothly even with hundreds of spools.

We also had to explore how to refresh that list, reduce wait time for image creation, and add purging features.

Managing, not coding

At the beginning of this article, I mentioned my two modes of software creation: coding and managing. When working with Claude Code, I spent most of my time managing.

In fact, the best mindset I could find was one where I treat the AI the same way I’d treat a remote human programmer. I gave it assignments. I asked questions. I asked for its opinion. I pointed out errors. I tested, tested, and tested some more. Then I tested again.

Also: The best free AI for coding in 2025 – only 3 make the cut now

Claude did as well in producing this project as any programmer I’ve assigned work to in the past. There were times when Claude was obtuse and stubborn, but my human programmers had similar moments of uncooperativeness.

Without a doubt, managing the AI was not nearly as pleasant an experience as coding on my own. On the other hand, we created a full Mac app that does exactly what I want in about 8 hours of project time, spread over about a month of real time.

If you’re thinking about making a Mac app with Claude Code, or any AI for that matter, my recommendation is that you work slowly, add features one-by-one, and refine. Then, once the project reaches a somewhat functional state, switch 90% of your attention to testing. Don’t assume that anything will be built as you have asked. Claude left out some key features and didn’t implement them until I pointed them out to it.

Also: Coding with AI? My top 5 tips for vetting its output – and staying out of trouble

But without a doubt, the productivity benefits were huge. I have a special custom-purpose app now on my iPhone and my Mac designed specifically for my workflow. And it works. I still haven’t decided if I want to turn it into a product or not, but even if I never sell it, the few hundred bucks I spent on Claude Code Max over the past three months has definitely been worth it.

Stay tuned. My next project is moving my app to the Apple Watch.

What about you? Have you tried building an app using AI tools like Claude Code, either as a developer or as someone still learning to code? Did it feel more like collaborating with a teammate or managing one? What worked well for you, what broke in unexpected ways, and do you see yourself trusting AI for larger projects? Let us know in the comments below.


You can follow my day-to-day project updates on social media. Be sure to subscribe to my weekly update newsletter, and follow me on Twitter/X at @DavidGewirtz, on Facebook at Facebook.com/DavidGewirtz, on Instagram at Instagram.com/DavidGewirtz, on Bluesky at @DavidGewirtz.com, and on YouTube at YouTube.com/DavidGewirtzTV.

Artificial Intelligence