I made an mac app in swift using Cursor
date
Jul 3, 2025
slug
cursor-first-mac-app
status
Published
tags
Prompting Session
type
Post
old content?
summary
Notes on my side quest to build a custom mac os app.
Problem statement
I wanted to make a native mac app, which when pressing certain key combination, then starts recording any audio, and upon releasing the keys, saves the audio + transcribes it.
My use case was to be able to press that key combination into any active text field, and push my hotkey, talk into it.
I am using the same workflow in MacWhisper 2, but want some fine controlled setting in the workflow. Thus building this myself. Or maybe, vibe coding this.
Implementing + Challenges
First I noted down my requirements into o3, and told it to come up with a feature list.
Then I made a prd out of it, divided it into tasks and started implementing it. This led me to some weird issue about the agent being confused about the platform we are building for, or used deprecated libraries.
To tackle that issue, I then went to perplexity, took the prd and told it to analyze the prd and generate a technical specification file; while using latest swift features. Using the newly generated technical specification, I then modified existing prd; to accomodate latest technical specification.
Learning here: Move to perplexity for something that you want newest tech stack.
Then went onto routine of breaking prd into tasks and implementing one by one.

Cursor agent was now the driver and I was just mentioning my comments + provide feedback on updates we made. Tell cursor to execute next task from task list, wait for it to finish, build the app again, check the implementation, paste errors or give feedback, move to next task. This was my workflow.
One issue that needed a lot of time to fix was: When it finished section 2, I tried to test its audio recording feature. Every time it recorded, the wavefoprm was empty. I thought it was mic issue and prompted to print which mic was it using. But that also didn’t work. So I asked in a new thread on steps of how to implement the voice recording feature without providing context. Then figured out that I needed to manually check it in Code Sandbox > Hardware section. Wasted 20-30 minutes here debugging this issue.

Learnings: It might be MacOS/XCode specific, but some things code generation just can’t do. We need to manually do it.
Once this issue resolved, cursor agent was able to pretty much code all the app all by itself. I am amazed at the capability of Vibe coding, I was making my own MacOS app.
I was just in the last section, and encountered this, and needed to stop my experiment.

Some screenshots of the final prototype:


End result:
- I was able to build an mac os app.
- They keyboard shortcut works. When I press keyboard shortcut, it starts recording and then transcribes it using native mac apis.
- Realized that transcription service is not upto the mark of MacWhisper 2, so dropping the idea to switch to custom app.
- Realized LLMs can make custom mac os apps also.
- Native MacOS Transcription service is not usable for my use case.
- Got a cool side project into my github.