DEV Community

Cover image for I Don’t Know Swift. I Shipped a macOS App Anyway.
Kirill Isachenko
Kirill Isachenko

Posted on • Originally published at Medium

I Don’t Know Swift. I Shipped a macOS App Anyway.

I’m a designer. I’ve never written Swift before this year. And I now have a native macOS app on the App Store that people pay for.

This is not a flex. It’s an observation about what’s possible right now, and what’s still hard.

The problem

I had a folder with 2,000 screenshots named Screenshot 2024-11-03 at 14.22.57.png. My photo library was all IMG_4382.jpg. I wanted an app that would look at these files, understand what's in them, and rename them to something searchable.

Apps like this exist. I tried all of them. They all look like they were designed in 2009. But the worse part wasn’t even the design — it was the speed. I’d drag in 10 files and wait. And wait. Some tools took seconds per file. I genuinely couldn’t understand how people were paying for this. If your AI-powered renamer is slower than me renaming files by hand, something has gone wrong.

So I decided to build my own.

The app is called Zush. It uses multimodal AI to analyze images, PDFs, and documents, and renames them based on what’s actually in them. It adds Finder tags, Spotlight metadata, monitors folders in the background. Native Swift/SwiftUI, ~14MB, no Electron.

Vibe-coding is real, but incomplete

The app was largely vibe-coded. Claude Code and Codex wrote most of the Swift. I shaped the UX and made sure everything felt native.

This worked surprisingly well for about 80% of the work. The last 20% is where it gets interesting.

AI can scaffold a networking layer in minutes. It cannot debug why your folder monitoring feature renames the same file 47 times because of a race condition. It doesn’t understand that a subtle layout shift on Sonoma doesn’t happen on Sequoia. These are the things you still have to reason about yourself.

The path of least resistance problem applies here too. The model will happily fix a symptom in the UI when the root cause is three layers deeper. You have to know enough to ask the right questions. “Fix this bug” and “find the root cause of this bug” produce very different results.

Still — a designer with zero Swift experience shipping a native macOS app in about two months. That’s new. The tools made it possible.

Why Groq

For the AI analysis under the hood, I use Groq with Llama models. The reason is simple: speed and cost.

When someone drags 50 files into the app, they expect results before they lose interest. Groq delivers analysis in milliseconds. The cost per rename is negligible enough that I can offer a free tier without going broke immediately.

I also built BYOK — bring your own API key. Users can plug in keys from OpenAI, Gemini, Claude, or Groq. This turned out to be the most important feature I shipped, not because of the unlimited renames, but because it kills the “what if the developer shuts down” fear. Your app keeps working as long as the AI providers exist.

Rename Rules (Custom AI prompts)

One feature I’m particularly happy with: users can write their own AI prompts for renaming and tagging.

Instead of a rigid “here’s your filename, take it or leave it,” you tell Zush how to think. A photographer can instruct it to always include camera model and location. A lawyer can tell it to extract party names and dates from contracts. A designer can have it tag files by project and client.

Same app, completely different behavior depending on who’s using it. Most tools in this space give you a dropdown with three options. Custom prompts give you the entire instruction set.

Killing subscriptions

When I launched, I did the standard thing: subscription pricing. Every SaaS playbook says recurring revenue is the way.

It felt wrong from day one.

Then I saw a small macOS utility on Reddit. The dev’s entire pitch was: “No subscriptions, no hidden fees, pay $10 and use it.” No walls of marketing text. And I thought — why am I overcomplicating this?

My situation is trickier because I pay real money for AI tokens on every rename. But the math works. Free users get 50 renames. PRO is $10 one-time for 10,000 renames. After that, BYOK kicks in and the cost shifts to the user’s own API provider.

Revenue comes in small amounts from everywhere. A $10 here, a $10 there. But conversion went up, refunds went down, and angry emails about forgotten subscriptions disappeared entirely.

A file renamer is not Netflix. You don’t wake up every morning craving new filenames. You have a mess, you clean it up, you move on. Subscription pricing for a tool like this is like charging a monthly fee for a hammer.

Automating releases as a solo dev

When you’re one person, you’re the entire company. Every manual process is a tax on your time.

I fully automated the release pipeline for both the direct download and the App Store. Push a git tag, CI builds, signs, notarizes, and ships. The App Store version goes through TestFlight. The direct build updates via Sparkle with delta updates.

I push a tag and make tea. By the time it’s ready, both versions are live. This took significant effort to set up, but the ROI is immediate when you’re shipping updates weekly.

Design as competitive advantage

Every competitor I evaluated treats design as an afterthought. This makes sense — they’re built by developers optimizing for functionality.

But on macOS, users expect things to feel native. Smooth animations, proper spacing, keyboard shortcuts that behave like every other Mac app. The difference between “this works” and “this feels right” is measurable in retention, even if it’s hard to quantify upfront.

I spent more time on how drag-and-drop feels than on some entire features. That’s a luxury of being a designer who also ships the product. You don’t have to convince anyone that the animation curve matters. You just fix it.

Photographers turned out to be the most excited audience. Zush supports 23 image formats including RAW files with EXIF preservation. Apparently this is rare in renaming tools. The niche within the niche was the real market.

What’s next

Windows version. A designer willingly entering Win32 territory.

The models keep getting faster and cheaper. What used to require a large team and significant infrastructure now runs on a $10 one-time purchase from a solo dev who learned Swift this year.

I don’t think this is unique to me. The tools are there for anyone with domain expertise and a problem worth solving. The hard part was never the code. It was knowing what the product should feel like.

Zush is at zushapp.com. macOS only, for now.

Top comments (0)