Работали ли вы с дизайн-системой в iOS-проекте?

«Работали ли вы с дизайн-системой в iOS-проекте?» — вопрос из категории Софт-скиллы, который задают на 10% собеседований IOS Разработчик. Ниже — развёрнутый пример ответа, который можно адаптировать под свой опыт.

Ответ

Да, имел опыт разработки и поддержки дизайн-системы (Design System) в iOS-приложениях.

Реализация и подход:

  1. Единый источник истины: Компоненты и стили создавались на основе макетов в Figma, где были определены токены (цвета, шрифты, отступы, радиусы скругления).
  2. Реализация в коде:
    • SwiftUI: Создавал переиспользуемые View-компоненты (кнопки, текстовые поля, карточки).
    • UIKit: Использовал подклассы (UIButton, UILabel) и UIAppearance для глобальной стилизации.

Пример компонента кнопки в SwiftUI:

// Токены вынесены в отдельную структуру или enum
enum DesignSystem {
    enum Colors {
        static let primary = Color("Primary")
        static let background = Color("Background")
    }
    enum Fonts {
        static let button = Font.system(size: 16, weight: .semibold)
    }
}

struct PrimaryButton: View {
    let title: String
    let action: () -> Void

    var body: some View {
        Button(action: action) {
            Text(title)
                .font(DesignSystem.Fonts.button)
                .frame(maxWidth: .infinity)
                .padding(.vertical, 12)
                .padding(.horizontal, 24)
                .background(DesignSystem.Colors.primary)
                .foregroundColor(.white)
                .cornerRadius(8)
        }
    }
}
// Использование
PrimaryButton(title: "Войти", action: { ... })

Преимущества:

  • Консистентность: Единый внешний вид во всем приложении.
  • Скорость разработки: Готовые компоненты ускоряют создание новых экранов.
  • Простота поддержки: Изменение дизайна в одном месте применяется ко всему приложению.

Дополнительно: Для больших команд можно выносить дизайн-систему в отдельный Swift Package.