PixelNote is my iPhone-only programming language for generating animated 8-bit pixel GIFs with one-line programs. I hadn’t updated it since V2.0 back in 2018, so I got the message from App Review a couple of weeks ago:
It still worked fine, and I find Apple’s approach here somewhat wrong, arbitrary, and annoying, and I’m already running behind plan for TimeStory 3, and life has been extremely busy lately. But I enjoy PixelNote and want to keep it available; it’s a sort of app which is uncommon in the Apple ecosystem, unabashedly focused on casual, hobby programming, for its own challenge and reward. And it was due for a refresh, and in the end, I’m actually glad to have been made to do it. (Don’t tell Apple, though; I still disagree with their approach!)
PixelNote 3 is now available in the App Store. (Free; no ads; no logins.)
- It now lets your programs take touch input, and includes a simple painting app as a demo. (I actually coded this several years ago, but never shipped it!)
- It has a few other minor command syntax improvements, including new
loopcommands which serve as shorthands for existing syntax.
- I raised the requirements from iOS 8 (!) to iOS 15. That’s a pretty big step, but not very hard for this app, and very worth it. Happy to adopt the modern photo-picking and photo-saving APIs, which let me avoid asking for permissions I don’t need; very happy to be able to use SF Symbols to decorate my buttons and list items; glad to make it look better in Dark Mode. And switching from the long-deprecated UIWebView to WebKit was a piece of cake; my only Web view is my built-in help HTML.
- I reworked the built-in user manual and list of examples from monolithic scroll views into a categorized UI behind the new ? button, to be more welcoming and navigable.
The code is 100% Objective-C, heavy on the C. I haven’t done Objective-C since 2018 either, and found I still enjoy it. I’m also still pretty pleased with PixelNote’s internal architecture; it parses to an AST, from which it generates a custom internal instruction format which the interpreter runs. This makes it easy to jump in and work on language features and interpreter capabilities separately.
And good grief, Objective-C compiles quickly on this M1 Pro, compared to Swift. And, although I appreciate Swift’s aggressive evolution, it’s very nice that I had no language changes to catch up on.