Not Everyone Can Be a macOS Developer

Lately it was necessary to use macOS to develop and test software and I was doing my customer support job on there as well. While I've had moderate success developing and testing on Linux and Windows, macOS is a whole other matter...

Not everyone can be a macOS developer. Emoji of frowning face

God loves geeks too!
Why Jesus?

Just to get this out of the way, I'm not a very smart guy. Yes, God has blessed me with the knowledge I need right when I need it, but for macOS development, while I've made progress, it's been painfully slow, frustrating and unintuitive. It got to the point that I decided to abandon my macOS development work and go back to Linux for now. In case you're wondering or bored, here's the sad tale...

Desire to be cross-platform
As you (may) know, I am the developer of SpiritVNC-FLTK, a multi-view VNC client. While FLTK apps can compile and run on a wide variety of operating systems including Linux, Windows and macOS, it often looks out of place, with a Windows 95-look-and-feel that sticks out like a sore thumb on Windows 11 or most modern versions of macOS. Personally, I will continue to use the FLTK version of SpiritVNC because FLTK is very lightweight and relatively easy to develop with, but it has been my desire to release native Windows and macOS versions of SpiritVNC, so I thought I'd try to tackle the macOS version first.

I gave myself a decent head-start when I first tried doing a native macOS version back in 2018. I seem to remember having some problems back then and I would often have to step back from the project, taking a break until my brain recovered from the abuse that comes from Objective-C and Cocoa. So frustrating were those times that my young son made a cute "I Survived Cocoa" award from paper and colored pens, presenting it to me after many long hours of toiling with native macOS development.

"Grow a brain, Will, anyone can develop in macOS!"
No, that's definitely not true. Here are some things that trip me up when developing on macOS:

 • Xcode is buggy, unweildly and bloated. It got so bad that I decided to ditch Xcode completely and develop the whole thing outside Xcode, in a text editor, and use a Makefile to build. (In all fairness, MS Visual Studio is pretty crazy and rough, too)

 • Cocoa, Core Graphics and other macOS development technologies make it harder than competing operating systems. Method names, parameters and flags often are not intuitive and easy to figure out. In other technologies, if you want to show a window or control, you do window1->show() or similar, while in Objective-C and Cocoa, it's [window1 makeKeyAndOrderFront:nil].

 • Things are sometimes difficult to find on Apple's development search engine and sometimes important information is completely missing. I was trying to find the documentation on flags for a Core Graphics image-creation command and it just didn't exist. I had to search around the internet to see if anyone had working examples, and often what I did find wasn't the right choice for my use case. Quite often Apple documentation links to decades-old articles that show deprecated methods and inaccurate information. (Yes, this is the case for documentation in other toolkits and operating systems, but because Apple presents their brand and technologies as 'premium', these issues shouldn't be as widespread)

 • Some macOS apps just freeze for a while for no obvious reason. I am using libvncserver / libvncclient on all OSs and while it's an okay library, it's sometimes tricky to interface with -- especially on macOS. Unlike the gtk-vnc widget for use with Gtk apps, you have to write your own message-processing loop with libvncclient. Even after throwing sleep calls in this loop, it still seems to cause macOS to freeze up and get confused. This even happens on SpiritVNC-FLTK built for macOS -- it's just something macOS does that's frustrating and doesn't typically happen on Linux, though it's somewhat frequent on Windows.

 • For some reason macOS uses a Cartesian coordinate sytem instead of the fairly standard coordinate system nearly all other toolkits and OSs use. This causes headaches when you're using libraries that expect non-Cartesian drawing. Another example of Apple being different just because it's -- 'cool'...?

 • Objective-C is not super-fun. I know that 'message passing' is supposed to be 'safer' and 'superior' to just plain calling other methods, but Objective-C feels burdensome with all of those brackets. Yes, I know you don't use brackets in Swift, but Swift is a whole other ball of wax that I won't get into here.

Overall, it just seems that Apple was trying to be different for the sake of being different. Yes, some of their technological choices make sense and sometimes they truly are superior to other technologies, but for the unfortunate developers that typically live in Linux and / or Windows and have to subject themselves to punishment in the Apple development world, it can be brutal. Or maybe, maybe it's just me...?

For now I've completely unplugged my Mac and I'm experiencing relatively sane programming on Linux. To quote my dear friend "All operating systems stink". Yes, they all have their quirks and head-scratchers. macOS development is just so foreign and upside-down to me that it makes software development a burden instead of fun. God bless those folks who do it full-time and get through it and stay relatively sane!

If Apple listened to nobodies like me, how could they fix this?
 • De-bloat Xcode or enable the IDE to be much more modulized so it doesn't include every single feature and simulator out of the box, or provide an installer for advanced users that lets you chose what you want to install and not a 'one-size-fits-all' approach (again, for advanced users who know what they want. There should be a 'Minimal IDE and toolchain' install all the way up to 'The Kitchen Sink').

 • Provide a C++-like interface with reasonable method names like window1->show() instead of silliness like [makeKeyAndOrderFront:nil]. I know Swift was introduced to liberate Objective-C programmers from their bracketed drudgery, but coming from a C / C++ / Free Pascal background, Swift seems like a 'me too' answer to Rust, which itself is not all that fun if you have a developmental disability.

 • With all of Apple's spare cash sitting around, they should hire a team to go through the online documentation and make sure it's accurate. This team could also modernize the ancient conceptual documentation and make sure it doesn't go against current / modern best-practices. Also refreshing those pages' style so they don't look like something out of OS X Snow Leopard would be a nice touch too (though Snow Leopard was a pretty cool release back in the day). Emoji of face winking

 • When apps freeze, a helpful log entry in Console would be nice. As it is, there's a 'spin' log category but there was not one entry in it. The general log made a note of apps freezing, but it was lacking useful details and only gave a hex result code.

So my humble suggestions to any company that wants more quality and quantity app-wise:

 • Don't despise the devs who are trying to make apps for your platform. Give them quality tools that don't crash every five seconds. Make things understandable for the general developer population, not just elite developers who are your platform's platinum fanboys. Some developers are working with multiple OSs and frameworks so making it easy to bounce back and forth easily makes life easier.

 • Provide great documentation, and make it easy for beginners, intermediate and seasoned developers to find just what they're looking for. Make sure every method, parameter, enum and flag is properly documented and that a useful explanation of each exists. If you're worried about overwhelming beginners, hide detailed information but make it easy to discover and view when required.

 • Don't complicate things and instead make it easy for beginning developers as well as seasoned pros to be productive. It's not a good idea to give babies power tools to play with, and professionals don't want to limited by toys. Make the IDE configurable based on the developer's experience and what they are targeting and don't force one singular configuration for everyone.

 • Since AI is all the rage right now, develop a good model that will allow valid feedback from third-party developers to be routed quickly to the appropriate group within Apple, Microsoft and so-on. Make it easy for valid feedback and bug reports to get where they need to go while limiting lazy 'help vampire' requests.

Will I ever try macOS development again? Maybe someday, but that really depends on Apple, my financial situation and living situation. I really don't want to give Apple any more of my money for a machine that can run the latest macOS due to Apple's overt paganism and apparent privacy hypocrisy. While plenty of God-loving people and conservatives use Apple's products and need apps, beating myself up to enrich Apple isn't a priority.

God bless you, and thank you for reading! Emoji of face grinning big

About me
First and foremost I'm a follower of Jesus Christ. After that, I'm a blessed husband, father and grandfather. I do remote computer work for a living although it's mostly part-time. I'm an amateur radio operator - AF7EC. When I'm not working on the endless list of house and car projects, I like to tinker with electronics, like to listen to shortwave radio and write software (mostly open-source) in C, C++, Python and Free Pascal. I usually run Linux as my main operating system but sometimes I'm forced to endure macOS and Windows 11 for gaming with my son or testing software. Overall, I am a big nobody, but always willing to share about Jesus and all that God has done for me and my family.

 

Comments

(No comments yet)

 

Post A Comment

Your name:

Your e-mail address: (Will not be seen or used by anyone else but me)

To help cut down on spam, what do you get when you add two and four?:

Please type your message below: (Please limit message to less than 1,000 characters)

By submitting your comment, you consent to me posting it on my site.

All submissions are moderated before being posted and any profanity or sensitive information blanked out.

My Story   |   Today God is First!   |   Autism
 
This page should pass HTML validation. Standards-compliance is important to me.