While I don’t have much experience with (B)VIPER, having more protocols/classes that are focused is something that I’ve been paying attention to when writing my code. I love the amount of control and flexibility that it gives me.
Now I understand why you chose (B)VIPER over MVVM, and it makes perfect sense. I agree that there is a tremendous amount of value in programming to interfaces and it is another best practice that I follow as closely as I can.
I am not very familiar with dependency injection, but of course I use Cocoapods (and sometimes Carthage but it has given me a few headaches from time to time).
The biggest challenge for me when attempting to adopt a new architectural pattern such as MVVM is not thinking on terms of MVC. It can be very difficult and the way I have approached it is to slowly adopt bits and pieces of it.
Thank you for the excellent article and your answer to my question.