Hacker News new | ask | show | jobs
by makecheck 1513 days ago
I tried for a really, really long time to implement backward compatibility (and was even impressed with things I came up with) but Apple makes it incredibly hard. Certain hard boundaries can be crossed, e.g. some point where the compiler/runtime support changes. At a certain point you are looking at practically two implementations if you want the same code to not look somewhat antiquated on newer systems UI-wise, too. And of course, Xcode just starts outright refusing to compile which means you might need older Xcode versions and even older hardware.

The worst part is that for every 5 cool things they add, they do at least one really stupid annoying new thing on macOS that makes using newer systems annoying.

For example, if there is one thing I recommend everyone do right now, is set this on newer macOS:

`NSAlertMetricsGatheringEnabled = 0`

It completely removes the majority of those stupid iOS-style alert boxes and returns them to the older sane layout.

3 comments

I'm the author, and I agree, it's not really possible for Cocoa developers to continue supporting old versions of macOS. The projects on my page have the advantage of only targeting old OS X releases, and not modern ones.

However, what really helps me is developers who document when support for an old OS was dropped, and continue to make older compatible versions of their software available for download and purchase. I have spent countless hours digging through the Internet Archive, doing a manual bisect to find the last compatible version of some app. Sometimes only to realize at the end that this version won't work with new license keys.

Worst of all are apps that have auto-update mechanisms I can't disable, which automatically replace my old working copy with a new version that crashes on launch. Please, don't do this!

---

Apps designed to be cross-platform are a different story. I think it's more than a little annoying that Google Chrome doesn't support OS X 10.10 and older, when the set of changes needed to support back to 10.7 is really quite minuscule, relative to the size of the Chromium codebase: https://github.com/chromium/chromium/compare/main...blueboxd...

If a single developer working in his free time is able to maintain backwards compatibility, the full force of Google should be able to do it too. Not just for weird people like me who are strangely emotionally attached to old versions of OS X, but for people in Guatemala who literally can't afford to upgrade their hardware!

> However, what really helps me is developers who document when support for an old OS was dropped, and continue to make older compatible versions of their software available for download and purchase.

I'm a Cocoa developer and go out of my way to do this. You can find and download the last supported version of my app for each major OS X release here: https://help.aetherlog.com/faq/oldversions/ (linked from the main page on the website). I've also intentionally kept the license key scheme the same so a license purchased today will activate any version of the app, even very old ones.

I hear not-too-infrequently from users who have an old Mac that they want to use for my software, and it's nice to have a solution for them. The caveat of course is that some things are inevitably broken with regard to (third-party) web APIs that have changed. But I'm lucky that my app's core functionality isn't dependent on an internet connection at all.

It's

    defaults write -g NSAlertMetricsGatheringEnabled -bool false
And it's amazing, thanks. Is there also a command to remove the paddings on the sides in sidebars and menus?
I really, really wish Apple would release an official way to run arbitrary older versions of their OS in VMs. They have a hypervisor and have for a long time, but using it to run an older OSX/macOS version is very much a DIY thing. It'd be hugely helpful for people supporting software, who need to test on older versions and maybe even to occasionally compile an important bug fix for something that's now "ancient".
If you have an Intel Mac, VMWare Fusion works really well for this! I have VMs of Lion, Mountain Lion, High Sierra, and Big Sur available at my fingertips within VMware Fusion 8 running atop Mavericks.

I do all of my development with VMs. It lets me instantly switch between xCode versions, and install dependencies without messing with the state of my real system.

(P.S. I also have Tiger and Snow Leopard VMs, but this requires patching VMWare and is definitely not endorsed by Apple!)