Closed kocherovets closed 3 years ago
Здравствуйте. Советую прочитать до конца или самый конец - там написано наиболее простое решение, требующее минимального количества усилий. Теперь по теме :)
Нет этого делать не планируется. Причина в поддержке - SwiftPM это пакетный менеджер Swift-а. Возможности которые сделаны со сторибоардами, это возможности Obj-C языка. На Swift нельзя сделать этот функционал по работе со Storyboard. По этой самой причине его нельзя занести в SwiftPM пакет.
Дальше сказывается тот факт, что Storyboard в наше время это как мамонты - ими никто не пользуется (почему? -есть куча статей в интернете). Пользуются ими только старые проекты которые скорей всего не используют мою библиотеку, и еще мало вероятней используют SwiftPM.
Вынести работу со сторибоард в отдельную репу возможно, только при этом придется нарушить инкапсуляцию, и она точно не будет SwiftPM. Если решите для своего проекта это сделать, то надо:
В силу того, что Storyboard это устаревшая система, и если его выносить отдельно будет нарушена инкапсуляция, то я не хочу этого делать на основной репе.
P.S. На самом деле это возможно, но это скорее хаки, нежели хорошие решения. P.P.S. Cocoapods и SwiftPM отлично работают вместе на одном проекте. P.P.P.S. Если вы переписываете старый проект, на новый код, то лучше придерживаться жесткого правила: Новый код ничего не знает о старом, а старый может знать о новом. P.P.P.P.S. Если Storyboard используются без sequence, то функционал библиотеки по работе со Storyboard не нужен. Всегда можно самому зарегистрировать VC так чтобы он создавался из Storyboard, и в коде использовать за место внедренного storyboard несколько провайдеров:
container.register { Storyboard("name").instantiateVC("vcname") }
YourRouter/Navigator/Coordinator/Wireframe {
init(vc1Provider: Provider<YourVC>, vc2Provider: Provider<YourVC2>) { ...
}
func f() { let vc = vc1Provider.value }
}
P.P.P.P.P.S. :) если слегка закрыть глаза на то, что singleton это зло то можно в DI местах убрать все регистрации Storyboard, а во всех своих VC, которые создавались из storyboard, написать:
func viewDidLoad() { // или можно внутри метода init?(coder: NSCoder)
super.viewDidLoad()
MyShared.container.inject(into: self, from: YourFramework.self) // можно
без from если у вас не многомодульное приложение.
}
Это самый простой способ, требующий всего одной жертвы - сделать чтобы container хранился где-то и был доступен отовсюду. А написать код во всех VC создаваемых с помощью Storyboard проблема на пару часиков. То есть сделать то, что делает библиотека автоматически, ручками :)
пт, 27 нояб. 2020 г. в 20:29, kocherovets notifications@github.com:
Добрый день! Планируется ли добавить поддержку Storyboards при установке через SwiftPM? Если нет, то можно ли выделить функционал со Storyboards для отдельной установки пусть даже через подсы? И можно ли сейчас вручную как-то выделить эту часть, чтобы вручную добавить в проект в таргет с UI? Или может быть текущее положение было так задумано, тогда как предполагается пользоваться SwiftPM в связке со Storyboards?
— You are receiving this because you are subscribed to this thread. Reply to this email directly, view it on GitHub https://github.com/ivlevAstef/DITranquillity/issues/158, or unsubscribe https://github.com/notifications/unsubscribe-auth/ABKDCH67GEL4TRFSQKZV6C3SR6STZANCNFSM4UE5HHWA .
-- С уважением, Александр Ивлев ivlev.stef@gmail.com; ivlev.stef@mail.ru
Спасибо, посмотрю все варианты, что будет лучше. Было бы хорошо добавить эти варианты в доку, может быть как сноску какую-то.
Добрый день! Планируется ли добавить поддержку Storyboards при установке через SwiftPM? Если нет, то можно ли выделить функционал со Storyboards для отдельной установки пусть даже через подсы? И можно ли сейчас вручную как-то выделить эту часть, чтобы вручную добавить в проект в таргет с UI? Или может быть текущее положение было так задумано, тогда как предполагается пользоваться SwiftPM в связке со Storyboards?