Finally: irrespective of the overall architecture, we find great value in programming to interfaces (protocols) for many of our components (now popular approach thanks to Protocol-Oriented Programming in Swift), in a proper dependency injection like Typhoon and in a proper dependency management like Cocoapods.
Let me explain better. When you build apps for a specific domain, like airlines and travel companies as MTT does, you realize soon that some Screens / Modules can be productize and consumed as a libraries among other apps. This also implies that Screens / Modules placed within unknown hosting apps must require a custom navigation (Builder can inject a custom Wireframe), may require a slightly different way of formatting data on the screen (Builder can inject a custom PresentationModelBuilder) and even a bespoke user interface (Builder can inject a custom View).
…ver MVVM is mostly in the size of the building blocks. (B)VIPER is more granular. This implies that you’ll have more protocols and classes in your code base, but those will be focused and small. You’ll have more test classes, but again focused and small. With a proper Builder you are then able to change with great granularity the behavior of a Module.