Into iOS I go!

ZenGoal Onboarding

I've been building on the web for a long time. I've dabbled in all sorts of languages, mostly preferring Node and TypeScript these days as I got my start on the front-end and so tend to move faster in these ecosystems.

That being said, I've long wanted to be able to find the time to get into the mobile ecosystem and now I am excited to share that I've built my first Swift app; ZenGoal!

My goals in building this

It's intentionally as simple as possible, mostly as a learning exercise for myself. I wanted to come up with an idea that covered the basics of an app without getting too deep into anything just yet as I hone my skills and better understand the App Store, the App Review process, etc.

Roughly, I wanted to learn:

  • How to work with databases in Swift
  • How to build stateful UI components
  • How the App Review process works

I opted to build something that was as simple as possible that would cover these points and also serve as something I think I might actually use. I wound up with the idea of one goal per day; not something that hasn't ever been done before, but something valuable enough to me that I could see myself actually using it.

So, how did it go?

I landed on Supabase for managed postgres which has been pretty great so far. A few migrations in, and they've been relatively simple to manage, and they also offer the major perk of taking auth mostly off my plate, except for the UI bits.

Having my phone flip to dark mode immediately highlighted some UI problems in my side-loaded app as I played with it; this was something I haven't usually considered when building web apps.

Once I got into the App Store submission process, I realized it'd be helpful to have an automated screenshot tool and found the amazing fastlane which has been wonderful. I started committing them to my repo too so I can see when things change visually which is also useful.

I nearly missed the requirement for account deletion before submitting for the first time...and once approved I of course immediately found a bug when testing on my daughter's iPad....because I'd completely forgotten about iPads...oops!

I still have a lot to learn. I don't love that I still can't quite get the right incantation of .padding().margin().whatever() to get things to look how I want them very quickly.

Overall though, I really like Swift. I plan to keep going.

How about AI usage?

I'm generally a heavy Cursor user, which was not as useful here since you need Xcode for so many things with Swift. I started this project moving between Cursor and Xcode (I haven't found that Apple's XCode AI integration is anywhere near as good), and ended it using Claude Code which seems to handle Swift a little better than Cursor (although I do hope Cursor will catch up).

Although I do use AI a lot these days for development and debugging...learning a brand new language while also using AI presented an interesting challenge. I knew that I definitely wouldn't know enough to see it when AI is steering me towards a spaghetti coded mess. I took some time to go through a few tutorials and found them super helpful for understanding Xcode a bit more and learned about basic things like using previews and cool things in Swift like defer . I tried to use what I learned there plus my foundation of general software engineering knowledge to steer my project into something a little more elegant than spaghetti...perhaps tortellini. I think only writing more Swift apps (and reading those of others) will really get me to a point where I can more confidently build more complex apps.

What's next for ZenGoal?

I have a few more ideas in the works, but may gate them on how folks are using this version first. If you do find yourself using ZenGoal, I'd love to hear your thoughts: feedback@zengoal.app.

← All posts