November 28, 2023

SwiftUI


Лайвкодинг: проект с нуля.

Проект с нуля - серия видеозаписей, где с самого нуля и до готового приложения, шаг за шагом, видео за видео, собираемся в онлайне и реализуем по частям.

Технический стек: SwiftUI 3 версии, Core Data, Structured Concurrency, Поддержка кастомной темы, дизайн система, Tuist, REDUX, Unit.

- Remote git.
- Offline first.
- Push notifications.
- Многомодульность.
- Cторизы для рецептов.
- Локализация для нескольких языков.
- Работа с БД: добавление в любимые, работа без интернета.


[Видео 0] Настройка и обсуждение проекта.

Вводное видео - выбирали стек технологий, обсуждали, что следует реализовать, рассматривали дизайн.

Ссылка для просмотра: boosty | телеграмм


[Видео 1] Структура проекта.

Обсудили SF Symbols, и взаимосвязь с иконками из фигмы. Рассмотрели новое, начиная с Xcode 15, решение для работы со строками, локализацией, небольшой обзор на Xcode: работа с логами, ошибками, дебаг меню. Начальная реализация Tusit'a + небольшой обзор на него. Рассмотрели AppDelegate, @main и App protocol. Начало реализации TabView + обсуждение данного элемента.

Ссылка для просмотра: boosty | телеграмм


[Видео 2] Декомпозиция элементов, синтаксис и гит.

В этом видео мы обсудили, какое именование стоит давать для feature-module, реализация toolbar'a и разница между кастомным и системным тулбаром. Обсудили декомпозицию ui элементом, как это влияет на работу, ревью, расширение и дебаггинг.

Под конце обсудили работу с git, рассмотрели интерактивный rebase, важность squash, как изменить уже запущенный commit message, и немного затронули тему pull-request'a.

Ссылка для просмотра: boosty | телеграмм


[Видео 3] Настройка core части для будущей темы.

В этом видео, мы реализовали кастомную тему. При помощи данной тему постараемся реализовать целую дизайн систему, на основе которой у нас будут и шрифты, и цвета, и тени и градиент и дизайн элементы, на подобие тех, что мы уже сделали(см. закреп в ТГ). 🤝

На данном этапе всего-лишь два цвета, но зато наша тема работает, умеет меняться + реализовали DI, при помощи @EnvironmentObject, а заодно посмотрели, зачем вообще он нужен? В чем разница между @Environment и @EnvironmentObject, а может-быть стоит использовать @ObservedObject, что думаете? Пишите ваш фидбек, не забывайте про ваши реакции (лайки / дизлайки / огоньки да голуби), чтобы я понимал, нравится ли вам такой формат, спасибо!

Ссылка для просмотра: boosty | телеграмм


Дизайн система.

Серия обучающих видео-гайдов по реализации элементов для дизайн системы. Начиная от кнопки и заканчивая тоглами / вьюхами. В каждом видео демонстрирую необходимые шаги для достижения корректного поведения, расширяемость, отказоустойчивость и работоспособности на все 136%.


[Design system] Реализация элемента на SwiftUI: Toast 1/3

  • Обсудили дизайн: на что стоит обратить внимание, что на начальном этапе лучше уточнить!
  • Начали реализовывать UI, работа с View элементами.
  • GeometryReader (почему не всегда стоит использовать), работу модификаторов (почему последовательность важна)

Ссылка для просмотра: boosty


[Design system] Реализация элемента на SwiftUI: Toast 2/3

  • Реализовали UI полностью.
  • Обсуждение нюансов вёрстки: как не делать 100500 if/else, +- в той или иной реализации.
  • Начало реализации анимации появления + withAnimation (не забываем)

Ссылка для просмотра: boosty


[Design system] Реализация элемента на SwiftUI: Toast 3/3

  • Доделали анимацию: появление, нахождение, уход.
  • Разобрали очень хитрые нюансы, при помощи ViewModifier.
  • Сравнили с тем, что хотел дизайнер и как получилось в итоге.
  • Отрефакторили + заревьюили итоговый вариант.

Ссылка для просмотра: boosty


[Design system] Компонент для SwiftUI: от А до Я 1/6

  • Взаимодействие с дизайнером, фигма.
  • Обсуждение технического задания, на что обращать внимание.
  • Как приступать к реализации, всегда ли нужно все писать самому?
  • Начало реализации, первые элементы, баги SUI, Xcode.

Ссылка для просмотра: boosty


Код ревю: рефакторинг кода.

Серия видео-роликов, в котором в лайм режиме производился рефакторинг на "вандальский код". Видео может-быть длинным, советую смотреть в перемотке х2 / х3-х4.


[Live code] Рефакторинг проекта на SwiftUI | 1/4

  • Из плохого кода в хороший
  • Объяснение своих действий + разбор:"Почему это плохо, а вот так будет хорошо"

Ссылка для просмотра: boosty


[Live code] Рефакторинг проекта на SwiftUI | 2/6

  • Из плохого кода в хороший
  • Объяснение своих действий + разбор:"Почему это плохо, а вот так будет хорошо"

Ссылка для просмотра: boosty


[Live code] Рефакторинг проекта на SwiftUI: Business logic / 3/6

  • Из плохого кода в хороший
  • Объяснение своих действий + разбор:"Почему это плохо, а вот так будет хорошо"

Ссылка для просмотра: boosty


SwiftUI: property wrapper's

Серия обучающих видео про все property wrapper's. Начинается видео всегда с теории и заканчивается практикой + реальные примеры (теория / практика).


State

Разобрали дебаггинг SwiftUI: от оптимального, до минимального.
Рассмотрели анатомию @State:
- Когда использовать.
- Как использовать правильно.
- Какие есть варианты работы и что они в себе несут.
Рассмотрели подробнее работу "initialValue" и "wrappedValue".

Ссылка для просмотра: boosty | notion


Property Wrappers: Environment и EnvironmentObject

В данном воркшопе рассмотрели:
- Использование в проекте, какую проблему решает.
- Как правильно взаимодействовать, какие нюансы могут быть при работе.
- Как заводить кастомные значения, прокидывать и работать.
- На небольшой блок-схеме закрепили все, что разобрали + summary.

Ссылка для просмотра: boosty | notion


Разбор домашних заданий

В этом блоке собраны разборы на домашние задания по SwiftUI. В каждом разборе я объясняю и разбираю, зачем те или иные вещи необходимо реализовать. Блок с описание каждого дз можно посмотреть в ноушене.


Разбор задания № 1 по вёрстке | SwiftUI

Всем привет, это разбор домашнего задания, советую реализовать сначала самим, а потом сравнить с тем как получилось у меня и отписать в комментарии, сколько правок пришлось вам вносить и как вы считаете, они необходимы? Т.е улучшают итоговый вариант?

Ссылка для просмотра: boosty


Разбор задания № 2 по вёрстке | SwiftUI

Всем привет, это разбор второго задания по вёрстке. Здесь мы уже познакомимся с декомпозицией, попробуем её, поработаем с ForEach, а так же увидим, как нам поможет @State при работе с рейтингом.

Ссылка для просмотра: boosty


Разбор задания № 3 по вёрстке | SwiftUI

Всем привет, это разбор третьего задания по вёрстке. Здесь мы научимся располагать элементы в той или иной области корректно, работать с переиспользованием для однотипных элементов, выбирать нужнуюструктуру данных для переиспользования, поймете выигрыш при использовании ZStack, работа с замыканиями.

Ссылка для просмотра: boosty


Разбор задания № 4 по вёрстке | SwiftUI

Всем привет, это разбор четвёртого задания по вёрстке. Здесь мы научимся работать с переиспользуемыми элементами чуть глубже: fixedSize и ideal width / height нам в этом помогут. Выясним как пригодится overlay / background, если у нас вью содержит еще одну вью. Научимся применять несколько модификаторов для группы вью, чтобы не дублировать. На себе покажу, что значит забыть про spacing для V / H стека :D

Поработаем с локализацией при помощи Environment и Localizing.

Ссылка для просмотра: boosty