Was chatting with a friend today and was finally able to vocalize one of the big things that's been nibbling at my brain.

When it comes to building mobile apps, where is our equivalent of Wordpress or Shopify or Drupal? Why is it that every single app must start over from "Hello world" and build from there?

@davedelong I think it has something to do with there being no first-party platform (or concept, obviously) for the web. Not that UIKit or Jetpack Compose are equivalent to what you mentioned, but their existence seems to remove some of the oxygen from the ecosystem that is required to get there, for better or worse. Something about raising the floor… I don’t know.
@davedelong there have been commercial projects like that but they didn’t get enough business to survive

@davedelong Any abstraction you build must contend with Apple adding new developer APIs and interactions and design rules every year. A ton of your time is spent on rearchitecting and rewriting things to support the new shiny, which is time not spent on improving the abstraction.

Consider game engines, they thrive on mobile with multiple offerings, some paid, some open source. They don't really have to contend with Apple's shifting priorities, so they can innovate.

@stevestreza @davedelong @nicklockwood 🎯

Even abstractions that have huge budgets behind them like Flutter struggle to keep up and frequently have bugs leak through the abstraction.

@davedelong There are a few boilerplates for iOS popping up in the last year or so, like https://swiftship.dev/

I believe this is the closest that we have today.

SwiftShip: iOS Swift UI Boilerplate | SwiftUi Sample Code

iOS template app for Swift UI to ship your app in days or hours. Use SwiftUI samples and pre-built features commonly needed in mobile apps.

SwiftShip: iOS Swift UI Boilerplate | SwiftUi Sample Code

@davedelong The whole point of AppKit was to be that. Unfortunately, it went through a long period of aversion to adding both new API (especially classes) and more automatic functionality that thwarted this a bit.

For example, I argued NSViewController should be an NSResponder, which is how it shipped in Mac OS X 10.5. But it took several more major releases (e.g. lots of convincing) for it to *automatically* participate in the responder chain like NSView, NSWindow, and NSDocument.

@davedelong Similarly, AppKit still doesn’t have a native “command” or “selection” concept, only the responder chain. So any application that wants a higher-level concept of commands and typed selections still needs to implement that using the pieces AppKit provides. Heck, bindings & KVO were never _really_ finished, insofar as there are KVO observation options that are likely still not supported by the NSController hierarchy. Same with no support for a real preferences window (or concept).
@eschaton @davedelong I think what he's talking about is probably at least one level further up in the abstraction - something more like hypercard, filemaker, etc.
@pixel @davedelong I got the impression he was more talking about something like Three20 or Swift Composable Architecture that gives you something to slot the rest of your application into. Either way, it’s worth thinking about.

@eschaton @pixel I want even higher level than that. There was a big push over the years for "shoebox" apps like Music or Photos or even iMovie.

So … where was Shoebox.framework that gave you the core of that kind of app? With master-detail-inspector interfaces and a ready-to-go database layer where you could customize the kinds of things you wanted stored, etc.

@davedelong @pixel We had all the pieces necessary to do this with Core Data, predicates, and bindings (modulo incomplete KVO option support in the NSController hierarchy).

Another engineer and I always wanted to make something like DirectToWeb/DirectToJavaClient for Cocoa atop an NSPredicate-based rule engine so CRUD apps would “just” be a matter of modeling data & business rules. Such a thing could still be done today using SwiftData and SwiftUI, in some ways more easily…

@davedelong @pixel I even had the start of it in the original Core Data interface generation for Interface Builder: When you dropped an entity from the modeling tool on an Interface Builder document, IB used a static set of rules (written in ObjC) to create the corresponding view/controller objects and bindings which you could then tweak directly. Moving that into AppKit (say in an NSViewController) would’ve been a good next step, followed by “externalizing” the rules…
@davedelong @eschaton @pixel I did this at Pixar 20 years ago for a class of apps we wrote. You could drag and drop the whole thing together in IB.
See previously my phd thesis wavesworld
@davedelong I feel like Three20 was or could have been that.
@patzearfoss @davedelong Three20 definitely tried to be that, there have been tons of attempts at filling that exact role. One of the latest attempts seems to be Swift Composable Architecture.
@eschaton @davedelong makes you wonder why there’s not much staying power.

@patzearfoss @davedelong I think a big part of it is that these architectures are often created by people with very specific opinions of what an application’s architecture should be but are not the platform vendor, so they have no visibility into the platform vendor’s future plans.

You then wind up in the situation where the architecture lags the platform and the platform vendor resents the architecture holding developers back from new feature adoption.

@patzearfoss @davedelong That’s one of the biggest problems with using third party developer tools; they always lag the platform, which causes apps that use them to lag the platform too, which can further hold back platform evolution.
@eschaton @patzearfoss @davedelong Not sure, that seems to put the blame on the 3rd party dev tools "being behind", when it's the specific platform vendor which causes that. 3rd party tools can be as successful as the 1st party one if given the same disclosure.
Java is a somewhat good example for that with a diverse dev tools ecosystem, including completely different languages.

@helge @patzearfoss @davedelong It’s said with the complete understanding that the platform vendor will never provide third parties with the level of disclosure they would need to be at parity when new platform versions are introduced.

The platforms and their tools aren’t and shouldn’t be separate: There’s substantial dialogue between them throughout development to provide an integrated experience. Third party participation in that would effectively make them first parties.

@helge @patzearfoss @davedelong So in a sense it does put the blame on the third parties, but they (and the developers using them) need to fully understand the reality of the constraints under which they’re operating: A platform vendor needs the flexibility to evolve their platform. In exchange, the platform vendor preserves customer binary compatibility, including for software made using third party tools that adhere to the rules/documentation.
@eschaton @patzearfoss @davedelong Generally I would say I agree, but the reality is that this is only true for a single vendor: Apple.
All the other major platform vendors focus on backwards compatibility.
(yes, I understand that Apple makes more money :-) )
@helge @patzearfoss @davedelong Apple focuses extensively on backward compatibility. For something like 10 years after it shipped, you could still target Mac OS X 10.6 with an x86_64 application, and use newer features on newer OSes. As someone who worked on the platform and tools directly for two decades, I find the “Apple doesn’t focus on backwards compatibility” meme rather offensive, honestly. Where’s the idea come from?
@eschaton @patzearfoss @davedelong From Swift? I totally agree that this is true for Objective-C.

@helge @patzearfoss @davedelong Swift has had an enormous amount of work to do, and even so it’s still possible to target substantially earlier releases (around macOS 10.15, from 5 years ago) using much more recent Xcode releases.

The popular statement of the meme isn’t about not being able to write Swift 6 that targets Snow Leopard, it’s about being (remaining) mad that Apple dropped the boat anchor that was 32-bit Intel nearly 10 years after shipping 64-bit Intel.

@eschaton Yes, that's not the meme I'm after. Being able to target only 5 years back doesn't suggest any stability to me, but the exact contrary. Meanwhile you can still do Win32, all COM, Java, Python 2( ;-) ) what-not, etc.
It's a Swift era issue (not limited to the language itself, it spreads heavily into the frameworks like SwiftUI).
I used IJSVG w/ manual ref counting on a modern system and that just worked. So yes, if I hurt feelings, I do think that the (ObjC) base system *is* stable.
@eschaton @helge @patzearfoss @davedelong AMEN! I added a few specific checks for apps into GameKit back in the distant mists of time to ensure backward compatibility.

@jeffwatkins @eschaton @helge @patzearfoss Apple for sure spends enormous amounts of effort in maintaining *binary* compatibility. But there are other kinds too. And it's very very common that a simple Xcode/SDK upgrade will radically change OS framework (esp SwiftUI) behavior and require bizarre and opaque workarounds in order to maintain *deployment* compatibility and latest OS compatibility.

So it has become a trope that, despite bincompat, Apple doesn’t care about *source* compatibility

@davedelong @eschaton @helge @patzearfoss Swift has become a particular nightmare for this. I’d be willing to bet any one of my old pure Obj-C projects would build and run just fine.

@jeffwatkins @eschaton @helge @patzearfoss The language is a factor, yes. But part of it are the frameworks themselves that blindly assumes that just because a new SDK has been linked that the developer has therefore *chosen* and consciously agreed to opt-in to all the new behavior.

This has gotten especially bad over the past 5 years.

@eschaton @helge @patzearfoss @davedelong I’m not sure how many people cared about 32-bit Intel per-se vs. dropping the promised migration path from it (64-bit Carbon).

To me, it’s mostly in the Swift era. For example, for two years in a row, Apple has shipped broken Xcodes that build Mac apps that crash when deployed on older (in this case, Big Sur, so not that old) versions of macOS. In both cases, the bugs were reported in the summer. Last year, fixed December 13. This year, unfixed so far.

What was last year’s bug, and what’s this year’s? Sounds like an API with incorrect availability markup?
@eschaton No, they were linker issues. Last year there were several, including FB13097713, https://github.com/swiftlang/swift/issues/68163, and a SwiftUI asset symbols one that may still exist. This year, the bug is FB14667312, which is not yet mentioned in any Xcode release notes, but oddly I just saw that the *macOS* 15.1 release notes say is fixed. Fingers crossed.
Regression: Xcode 15 cannot build correctly for macOS versions older than 10.15 · Issue #68163 · swiftlang/swift

Description According to the documentation, Xcode is supposed to be able to build for macOS 10.13 and up. However, this does not seem to be the case in practice; my testers on 10.14.6 have reported...

GitHub
@eschaton @helge @patzearfoss @davedelong To build for Monterey successfully required a specific version of Xcode 14 because of changes in Swift and the tool chain. That’s a lot less than 10 years.
@davedelong A long time ago, thete was RedFoundry. A click and drag builder and you could drop down to XML components + JS for logic. Very ahead of its time. But everything looks the same. https://techcrunch.com/2010/11/05/red-foundry-raises-1-1-million-to-help-create-and-manage-ios-apps/
Red Foundry Raises $1.1 Million To Help Create And Manage iOS Apps | TechCrunch

Chicago-based mobile app development startup Red Foundry has raised $1.1 million in Series A funding from OCA Ventures and I2A Fund. Red Foundry, which is in private beta, develops a SaaS that allows users with limited technology experience to create and manage iOS apps. We have 200 invites for TechCrunch readers with the code "TechCrunch" here. Red Foundry's software allows users to create professional-looking iPhone and iPad apps that include menus, RSS feeds, images, videos, maps and more. Apps have built in sharing options like Twitter, Facebook, email, and comments and include a built-in storage and delivery solution.

TechCrunch
@davedelong I think UIKit/AppKit/SwiftUI is just a lower level version of Wordpress/Drupal. We don‘t have a box of UIViewControllers to adjust and work with, but a box of UIViews (to use UIKit parlance). And I think that‘s way better, as the other option would lead to more same-looking apps.
@chbeer @davedelong And cool things like Core Data and Photos libraries and more.
@davedelong we used to get a fully functional tableView with timestamps and detail view, how is that not it :)