2 крупных проекта сейчас, в одном Swinject, в другом обычный протокол DostavistaContainerProtocol в котором перечислены все зависимости. Разницы нет. В конечных resolve кложурах свинжекта все равно все явно передаем через init-ы. Проблем нет ни там, ни там. Однако Swinject это тоже зависимость. Ирония: зависимость для управления зависимостями. Я бы не был так критичен по отношению к велосипедам. Часто свое простое решение из одного класса, которое явно решает конкретно твою задачу в 100крат лучше чужой зависимости. Это вендорлок.
так же в случае критического бага в стороннем коде ты его не можешь оперативно исправить. Ты делаешь форк и в нем правишь их баг. Делаешь PR в основной репозиторий разработчиков либы, и все прочее. Ты ждешь пока они обновят фреймворк под очередной новый Xcode и проблем еще миллион. Поэтому тут баланс нужен. Если ты можешь решить задачу без либы, то решай