IosGlk, IosGlulxe, and IosFizmo are out of support
Wednesday, January 1, 2020
Comments: 3 (latest 2 days later)
To be clear: all of these apps still work; they're all still for sale. I last updated each of them in late 2018. They work fine on iOS 13. They should continue to work on iOS 14 and into the future.
Because Apple is Apple, there will someday be another App Store purge and these apps will disappear. I don't know when it will be. I'd put my nickel on 2024-ish. Who knows. Until then, by all means keep playing.
You may of course also play Heliopause, Shade, and Dreamhold in iOS Frotz, a terrific free interpreter which remains fully supported. Hadean Lands will also remain available on Steam and Itch.IO for as long as I can keep Lectrote working.
That's the status report for IF fans. Technical details follow. Jump now if you don't want to hear about tedious Objective C stuff.
I built these interpreter libraries in 2011, as part of the roadmap for creating Hadean Lands for iOS. They've worked pretty well for the past nine years. But, let's be clear, this is really old iOS code. I originally wrote some of it on iOS 3! I've updated it every year since then, but I've never done a thorough update. I've just thrown in the minimum hackery to keep it running on more recent devices. There's hacks in there labelled "for iOS 6", "for iOS 5", "for iOS 4"... It's a terrible patchwork.
Last week I sat down to do the annual app updates for iOS 13, and it all fell apart. The navbars are the wrong height. The map in the Hadean Lands app won't update properly; neither will the to-do list in Shade or the ship tab in Heliopause. I fussed around for several hours, clicked a dozen checkboxes in Xcode, browsed StackOverflow like it was about to catch fire. No luck.
(You won't see these problems in the released apps. Believe it or not, Apple puts in lots of effort to keep old apps running! Because my apps were built for iOS 12, their navbars and map screens and so on continue to behave like they did on iOS 12, even when your phone is running a newer OS. But when I rebuild them for iOS 13, they break.)
To make the apps work right, I would have to do a complete rewrite. Just for laughs, here's a partial report on the accumulated technical debt:
- The game tab doesn't use the standard iOS text toolkit. This means that standard iOS text selection doesn't exist; standard copy gestures and text sharing don't work; the standard VoiceOver rotor doesn't work. To do: rip out my text code, put in TextKit.
- The help tab uses UIWebView, which is deprecated. To do: replace with WKWebView.
- The apps use old-style NIB files for UI layout. To do: replace with storyboards and constraint layout.
- Because of the way I set up the VM loop, the interpreter core isn't compatible with ARC. It has to use manual reference counting, which is stone-knives-and-bearskins territory. Restructure the VM loop; turn on ARC.
- The way the nav-controller code is shared between IosGlk, IosGlulxe, and the HL app is a nightmare. I'm sure this is why the navbar sizing fails.
- I really should add iCloud as a save-file storage option.
- I never released the 2017 bug-fix update of HL for iOS. This would require additional UI to select a version. (The player has to opt in because the update breaks save files.)
- Some note that I wrote to myself about UIAccessibilityTraitHeader which I don't remember why. Probably because the standard VoiceOver rotor doesn't work.
This simply isn't worthwhile for the amount of money the apps bring in. I'm selling maybe 150 units per year of Hadean Lands on iOS. That's fine; it's great for a five-year-old parser-IF game. It covers its Apple developer fees and even some of my conference travel costs. But it's not a good argument for a complete interpreter rewrite.
As I said, the apps still work and I expect them to keep working for the next few years. But they're now on the slow downward slide to obsolescence.
I am sad about the state of software, which is that it sucks, all the time, even when people care and work hard. Yes, that includes Apple engineers.