Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Генерамба и прочие аспекты кодогенерации в VIPER

Faf4a633b0d1e32a07a071039686c868?s=47 Egor Tolstoy
December 22, 2015

Генерамба и прочие аспекты кодогенерации в VIPER

Выступление на Rambler.iOS #5:
Видео: http://www.youtube.com/watch?v=NXNiN9FaUnY
Генерамба: https://github.com/rambler-ios/Generamba

Faf4a633b0d1e32a07a071039686c868?s=128

Egor Tolstoy

December 22, 2015
Tweet

Transcript

  1. Генерамба и прочие аспекты кодогенерации в VIPER

  2. Автор Егор Толстой Ведущий iOS разработчик Rambler&Co Twitter: @igrekde www.github.com/igrekde

  3. •Использование шаблонов Xcode •Что такое Генерамба •Устройство Генерамбы

  4. Классы: Assembly.h Assembly.m ViewController.h ViewController.m Presenter.h Presenter.m Interactor.h Interactor.m Router.h

    Router.m Протоколы: ViewInput.h ViewOutput.h InteractorInput.h InteractorOutput.h RouterInput.h ModuleInput.h Тесты: AssemblyTests.m ViewControllerTests.m PresenterTests.m InteractorTests.m RouterTests.m
  5. 21 файл * 30 секунд = 10 минут

  6. None
  7. None
  8. None
  9. #import "___VARIABLE_viperModuleName:identifier___Interactor.h" #import "___VARIABLE_viperModuleName:identifier___InteractorOutput.h" @implementation ___VARIABLE_viperModuleName:identifier___Interactor #pragma mark - ___VARIABLE_viperModuleName:identifier___InteractorInput

    @end
  10. gem install generamba

  11. generamba setup generamba template install generamba gen MyModule template_name

  12. #import "{{ prefix }}{{ module_info.name }}Presenter.h" @implementation {{ prefix }}{{

    module_info.name }}Presenter #pragma mark - Методы {{ prefix }}{{ module_info.name }}ViewOutput - (void)didTriggerViewReadyEvent { [self.view setupInitialState]; } @end
  13. None
  14. • Project/Rambafile • Project/Templates/ • ~/.generamba/ user- preferences.yml • Локальные

    шаблоны • Удаленные шаблоны • Шаблоны каталога Проект Пользователь Внешние ресурсы
  15. {{ module_name }} {{ prefix }} {{ module_info.description }} liquid

  16. {% if user.name == 'tobi' %} Hello tobi {% elsif

    user.name == 'bob' %} Hello bob {% endif %} if/else liquid
  17. {% for item in array %} {{ item }} {%

    endfor %} for loop liquid
  18. • {{ "a~b" | split:"~" }} #=> ['a','b'] • {{

    'barbar' | remove_first:'bar' }} #=> 'bar' • {{ 3 | pluralize: 'item', 'items' }} #=> 'items' работа со строками liquid
  19. XCODEPROJ_HELPER GEN_COMMAND MODULE_GENERATOR CONTENT_GENERATOR CODE_MODULE MODULE_TEMPLATE Filesystem Project.xcodeproj Command Line

    Interface Code Generation Output TILT
  20. SETUP_COMMAND RAMBAFILE_ GENERATOR Rambafile Command Line Interface Output TILT Code

    Generation
  21. LOCAL_INSTALLER TEMPLATE_ INSTALL_ COMMAND TEMPLATE_PROCESSOR REMOTE_INSTALLER TEMPLATE_DECLARATION Filesystem Command Line

    Interface Installation Logic Output CATALOG_INSTALLER
  22. •Полное покрытие тестами, •Автоматическая установка зависимостей, •Автогенерация тестов по интерфейсам,

    •Список всех сгенерированных модулей, •GUI Планы
  23. •Ruby - отличный выбор для подобных утилит, •Автоматизация любых процессов

    - ценное вложение труда и времени, •rails-way для iOS приложений. Выводы
  24. https://github.com/rambler-ios/Generamba &