The story of building my first macOS app

I released my first mac os app Criticly for critical thinking recently. The idea is quit straight forward. I've been finding myself frequently copying and pasting content to ChatGPT to better understand concepts. So, why not create an app that eliminates the need for those extra steps? You can select any text and invoke Criticly immediately by a global shortcut, and then choose from the 5 thinking tools to understand the content clearly and deeply.

The challenging part isn't writing the code but involves code obfuscation, signing, and notarization. The Electron app is written in JS, making it easy to copy and decode without obfuscation. At first, I relied on claude code to do this task, but it took two days and still couldn't figure it out. So, I decided to tackle it myself by reading the documentation and managed to finish it quickly, in just half a day. This experience reminded me to reconsider the reliance on AI; I can perform tasks better than AI if I have grasped the background knowledge. Sure, the obfuscation cannot stop people from decoding the app nowadays, especially with AI, but at least, it adds some frictions.

Code sign and notarization is the essential step to distribute a reliable MacOS app. Code sign means the app is created by a reliable party. And notarization means the app has been uploaded to Apple for a malware scan. Without the two steps, your app will be shown corrupted and cannot be open by the user. It requires $99 apple developer fee to do that.

The fee is not a big problem but it took above 2 weeks to register an organization developer account. I need to apply the DUNS number first to register as a company. The takeaway is that creating an Apple developer account speeds up the process of applying for the number. I initially applied the number without going through the Apple entrance, so it's been stuck for the first two weeks.

After creating the account, I got stuck on app notarization. I use GitHub Actions to sign and notarize the app, but the notarization process consumed all my free minutes. It took over 5 hours and still didn't finish. I emailed Apple support and received unhelpful replies. Fortunately, it completed the next day, and the next release pipeline finished quickly in just 3 minutes.

I never thought I would run out of free GitHub Action minutes. Yes, it's enough to use if the notarization run doesn't exceed 5 hours. So what's next? Thanks to GitHub Enterprise plan, I can have a trial for 1 month.

Now my app can be downloaded directly at https://getcriticly.app. But it's not uploaded to Apple Store yet as I use stripe for the payment. It still requires a lot of effort to onboard the Apple app store. But, anyway, I can distribute the app through my website now.