They don't "have" to be, but that's very much the result of what Apple has been advocating, what the community tells itself and what happens.
> Actually, having dumb models is the surest way to completely screw up your controllers design, since you’re now left with no other places to write your business logic in.
Exactly. And the coordination logic. Alas, that is exactly what happens, and I've been in enough of these codebases.
It's actually a bit more complex than that, as what people seem to aspire to is write self-contained widgets for their functionality, essentially slicing the application vertically most of the time. And that appears to have a bunch of causes, for example the PM->Design->Engineering process chain that also appears to be standard (and broken).
> My take on the model layer is : write everything that’s not strictly specific to your UI there.
YES.
UNDERLINE.
BOLD.
BLINK.
Repeat 100 times. Say it loud. Sing it. Shout it.
The "Model" is an object that is the headless application. It implements and coordinates all the functionality. You put a thin GUI on top of that. Or a different GUI. Or an API. Or a WebUI. Or a CLI....