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

«Модульность и оптимизация проекта»

Redmadrobot
September 20, 2019

«Модульность и оптимизация проекта»

Ваня Вавилов, руководитель отдела iOS-разработки

Redmadrobot

September 20, 2019
Tweet

More Decks by Redmadrobot

Other Decks in Technology

Transcript

  1. Redmadrobot Агенда • Мотивация • Варианты • С чего начать

    • Проблемы • Решения • Статистика 2
  2. Redmadrobot Монолит Dependency Dependency Dependency Приложение Фича Фича Фича Общий

    UI Сервисы Pull to Refresh Логгер Стили Модели Утилиты Dependency Dependency Dependency 7
  3. Redmadrobot С чего начать • Стили — шрифты, лейблы, цвета

    • Другие библиотеки — логгеры, аналитика, лоадеры, pull to refresh • Модели • Работа с БД • Service • Утилиты • Общий UI • Фичи Сейчас мы здесь 10
  4. Redmadrobot CocoaPods ✓Можно переиспользовать в других проектах ✓Легко выносится в

    другой репозиторий x Оформлять podspec x Зависимости тоже придется выносить в CocoaPods 12
  5. Redmadrobot Подпроект ✓Можно использовать отдельно ✓Файлы могут быть только внутри

    одного проекта ✓Проще merge файла проекта x Необходимо отключать подпись для подпроекта 13
  6. Redmadrobot Target ✓Можно унаследовать build settings ✓Проще визуально ✓Подпись отключается

    автоматически ✓Разделение на модули быстрее x Легко накосячить с добавлением нового файла 14
  7. Redmadrobot Проблемы • 2 человека занимаются модулями, остальные 8 что-то

    делают. • Static library, например, Google Maps. • Без публичности не обойтись. • Время запуска неизбежно пострадает (+10 модулей +50 мс ~800 мс). • Классы, цвета, шрифты в Interface Builder придется проверить. 16
  8. Redmadrobot XcodeGen # Service Модуль Service: type: framework platform: iOS

    sources: - path: Modules/Service createIntermediateGroups: true dependencies: - target: Model - target: DTO - target: Parser - target: Logger settings: INFOPLIST_FILE: "$(SRCROOT)/Modules/Service/Info.plist" PRODUCT_BUNDLE_IDENTIFIER: "ru.xxxxxx.mobile.service" IPHONEOS_DEPLOYMENT_TARGET: "9.0" postBuildScripts: - script: "$SRCROOT/Pods/SwiftLint/swiftlint --path $SRCROOT/Modules/Service" name: SwiftLint ~ 500 LOC 18
  9. Redmadrobot Build Settings • -Xfrontend -warn-long-function-bodies=300 • -Xfrontend -warn-long-expression-type-checking=300 •

    Build Active Architecture Only (ONLY_ACTIVE_ARCH = YES) • Optimization Level — No Optimization для Debug (SWIFT_OPTIMIZATION_LEVEL = “-Onone”) 19
  10. Redmadrobot Итоги • USE_SWIFT_RESPONSE_FILE — теперь одной проблемой меньше. •

    Модули независимо подключаются к разным таргетам. • Рано или поздно придется использовать статические модули и/или динамически подгружать модули. • Для переиспользования в других проектах лучше подойдут Cocoapods. • Время холодной сборки увеличилось в полтора раза • Время горячей уменьшилось в 4 раза 23