DEV Community

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

Posted on Edited 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.

Update — August 2026

A lot has changed since I wrote this. Zush is now a native AI file renamer for Mac and Windows, with support for 104 file formats.

The naming system is much more flexible now. You can build reusable templates from 145+ Naming Blocks, add Custom AI Blocks for fields you want to extract, and combine them with dates, counters, metadata, separators, and case styles.

Every batch can be reviewed before applying it. If the result does not work, the original filenames can be restored from Activity history.

There are three processing options: managed Cloud AI built into the app, BYOK with your own Gemini, Groq, OpenAI, or Claude API key, and Offline AI with a local Ollama model for supported files.

The free version includes 50 renames across all three modes. Current Mac and Windows builds are available at zushapp.com.

Zush AI file renamer for macOS

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 AI to analyze supported file content and metadata, then proposes descriptive filenames. On Mac it can add Finder tags and Spotlight metadata, and folder monitoring can process new files as they arrive. The Mac app is native Swift/SwiftUI; the Windows version is a separate native app.

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.

From one cloud provider to three processing modes

At launch, the managed cloud path used Groq with Llama models because speed and cost mattered for batch renaming. That was the right starting point, but it was too narrow as a long-term setup.

Zush now offers three processing modes: managed Cloud AI built into the app, BYOK with Gemini, Groq, OpenAI, or Claude, and Offline AI with a local Ollama model for supported files.

BYOK gives users control over the provider and model they pay for. Offline AI is for supported workflows that should stay on the machine. Both are available within the same 50-rename free allowance; PRO removes the rename limit across every mode.

Flexible naming rules, templates, and Custom AI Blocks

One feature I’m particularly happy with is the naming system. Instead of accepting a rigid AI-generated title, users can build reusable Templates from 145+ Naming Blocks: dates, counters, metadata, original filename elements, separators, case styles, and other structured fields.

Custom AI Blocks cover the details that are not already available as metadata. You describe the field you want Zush to extract, then reuse that block inside any Template.

A photographer can combine the date, camera model, and an AI-generated description. An accountant can extract a vendor or invoice number. A legal team can include a document type, party, or date. The same app follows a different naming convention for each workflow.

Custom AI Blocks and flexible naming templates in Zush

Pricing changed as the product changed

The first version of this post described an earlier one-time pricing experiment. That pricing is no longer current.

The free version now includes 50 renames shared across managed Cloud AI, BYOK, and Offline AI. Zush PRO costs $10 per month or $48 as a one-time lifetime purchase. Both PRO options remove the rename limit across all three processing modes.

I kept the one-time option because many utility users prefer to buy a tool once. The monthly option is there for people who prefer a lower upfront cost.

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 now supports 104 file formats in total, including common RAW camera formats, and naming templates can include EXIF and other metadata fields. The niche within the niche was the real market.

What came next

The Windows version shipped. It is a separate native Windows app rather than a wrapper around the Mac build.

Zush for Windows

The models keep getting faster and cheaper. What used to require a larger team and significant infrastructure is now practical in a desktop tool built by a solo developer.

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 only the code. It was knowing what the product should feel like.

Zush is available for Mac and Windows at zushapp.com.

Top comments (0)