This is taken to a pathological degree in the VIPER architecture. Every thing is decomposed and wrapped in and interface. Unfortunately this has gained some popularity in the iOS world. It makes code so much harder to follow and maintain.
Never used VIPER. MVVM with navigation flows and layout handlers works well enough.
MVI is the latest evolution of MVVM. It's basically MVVM with Reactive programming.
I do use Reactive (ReactiveKit) a lot now to prepare for Combine
AppKit is pretty deeply MVC. I generally prefer to just work with the underlying APIs than try to invent a new paradigm on top of them. With VC containment I feel like I have enough abstraction power already.
In my case the "Flows" are usually UINavigationControllers hidden behind a protocol. I tend to chop up my UI's really deeply into VC's but most of them get a VM because I like my VC's really, really small.