I’ve been building things in JavaScript for many years front end back and command line applications and recently I had a project that I wanted to do and there wasn’t really a way to do it in JavaScript. So I have too much kind of resistance to the weird looking syntax of objective-C, and after a bit of reading, including around here, that I should probably go with Objective-C and Cocoa rather than Swift, because of maturity, I decided to dive in….but not at first. My ideal app architecture was compiled binary command-line helper wrapped in a MacOS app that sort of provides an interface. Or better yet a couple of Command-line tools plumbed together with a bash script, and then that functionality is given an interface. So I started working on it without having any idea what I was doing and it’s all just too overwhelming–so I use something called Platypus, which turned out to be really great, to wrap a simple binary (initially just to compile JavaScript application) in a GUI. But I found issues regarding, like the correctness and modernization maybe you could say of the app’s structure created using Platypus–and also there’s a limited extent to which you can customize the GUI. As cool as Platypus was and how it helped me get started to understand the structure of apps, it also sort of hindered my ability to upload them to the App Store because of signing issues, and I think other things. So then I had to dive into the whole codesigning thing and understand how things need to be signed with the different certificates, and what provisioning profiles were, and what kind of entitlements might be needed–and then having to debug how different hardened runtime and sandbox entitlements and effects, interacted with assumptions and capabilities of the underlying binary file, including file access and instructions and so on. Wow, it was a lot to learn and kind of overwhelming. But with a lot of Google searching and a lot of interacting with ChatGPT I managed to come up with a manual code signing script both for a Dev ID or Apple Distribution release (two separate scripts) that essentially worked and got my Platypus app pretty close to release on the App Store… But at that point I also shifted gears and I thought you know what? maybe I just need to totally dive in and come up with my own GUI. So I thought–fuck it I’m just gonna do Objective-C–and that suddenly started to seem like a really good idea. So for the first time I started up Xcode and followed the instructions from ChatGPT on how to create a new project. And slowly but surely I started building an interface in Storyboard and over–basically the entire process was essentially like the three weeks it’s been since Chinese new year–I just like cranked really hard to get my app in objective-C. A lot of interacting with ChatGPT. I had no idea about Objective-C before this, but actually I find quite enjoyable now and the syntax no longer seems so crazy wrong and it’s actually kind of cool. And I have to say I’m really I really loving MacOS app development–like I feel kind of addicted to it. There’s something about this idea that you can create something and put it on to a store that’s available 24/7 and also that that thing that you create has gone through all these like gauntlets and jumped through the hoops so you know it’s in some sort of precise pristine state. It’s a very sort of addictive creative process I find. So I just wanted to share that realization and that joy with you here! I’m sure probably many people can relate to this and anyway it was very a happy three weeks (and also intense work, which didn’t feel like work–a reawakened passion definitely that in the endless grind of supporting existing products in the same languages I was used to I had forgotten!) for me and I just felt so stoked when I got the email this morning saying my submission was accepted and is on the App store (pending developer release) so I’m just so happy. edit: I needed to edit this copy to correct the voice typing errors
Story Published at: February 14, 2023 at 02:58AM

Leave a Reply

Your email address will not be published. Required fields are marked *