Skip to content

Learn-by-building: SwiftUI app with grid, sheets, reusable components, SafariView.

Notifications You must be signed in to change notification settings

KatyaVol/Apple-Frameworks

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

8 Commits
 
 
 
 
 
 
 
 

Repository files navigation

🍎 Apple Frameworks (SwiftUI)

Приложение на SwiftUI, которое показывает популярные фреймворки Apple в виде сетки. По тапу открывается детальный экран с описанием и кнопкой «Learn More», которая запускает встроенный Safari с документацией Apple.


🔍 Что делает приложение

  • Показывает список фреймворков в виде «плиток» (LazyVGrid)
  • Открывает детальный экран (sheet) по тапу на плитку
  • Кнопка «Learn More» открывает документацию во встроенном Safari (SFSafariViewController)
  • Использует архитектуру MVVM (Model-View-ViewModel)

🧱 Архитектура (MVVM)

  • Model - данные и их структура (например, Framework + MockData)
  • View - экраны и компоненты интерфейса (SwiftUI-разметка)
  • ViewModel - «связующее звено»: хранит состояние экрана и реагирует на действия пользователя

Как это работает:

  1. Пользователь тачит по карточке фреймворка в сетке (View)
  2. View говорит ViewModel: «выбран такой-то фреймворк»
  3. ViewModel обновляет опубликованные свойства (@Published)
  4. SwiftUI видит изменение и показывает детальный экран (sheet)

🗂️ Структура проекта

Apple-Frameworks/
├─ Apple_FrameworksApp.swift            # Точка входа приложения
├─ Assets.xcassets/                     # Иконки фреймворков и ресурсы
├─ Model/
│  └─ Framework.swift                   # Модель данных + MockData
├─ Screens/
│  ├─ FrameworkGridView/
│  │  ├─ FrameworkGridView.swift        # Экран с сеткой фреймворков
│  │  └─ FrameworkGridViewModel.swift   # ViewModel для сетки
│  └─ FrameworkDetailView/
│     └─ FrameworkDetailView.swift      # Детальный экран (sheet)
├─ UIKit Components/
│  └─ SafariView.swift                  # Обёртка вокруг SFSafariViewController
├─ Views/
│  ├─ Buttons/
│  │  ├─ AFButton.swift                 # Красная кнопка действия
│  │  └─ XDismissButton.swift           # Кнопка закрытия sheet
│  └─ Components/
│     ├─ FrameworkTitleView.swift       # Плитка: иконка + название
│     └─ DescriptionView.swift          # Текст описания фреймворка
└─ README.md

🔄 Цепочка событий «тап → sheet → Safari»

  1. Пользователь тапает по FrameworkTitleView в FrameworkGridView
  2. В обработчике жеста View устанавливает в ViewModel selectedFramework
  3. В didSet (или через логику во ViewModel) включается флаг isShowingDetailView = true
  4. Вью читает это published-состояние и показывает .sheet(...)
  5. На детальном экране по кнопке «Learn More» меняется локальное состояние isShowingSafariView = true, что открывает SafariView

Это «реактивная» модель: изменилось состояние - SwiftUI сам перерисует нужные части интерфейса.


▶️ Как запустить

Требования:

  • Xcode 15+
  • iOS 16+

Шаги:

  1. Клонируйте репозиторий
  2. Откройте Apple-Frameworks.xcodeproj
  3. Выберите симулятор и запустите (⌘R)

🧰 Технологии

  • Swift 5.9+
  • SwiftUI (NavigationStack, LazyVGrid, Sheet)
  • Combine-подход через @StateObject, @Published, @Binding
  • SFSafariViewController (через UIViewControllerRepresentable)

🗺️ Идеи для развития

  • Адаптивное число колонок (iPhone/iPad)
  • Поиск и фильтрация по фреймворкам
  • Закладки «Избранное» + сохранение в хранилище
  • Локализация (EN/RU)
  • Загрузка данных из JSON/сети вместо MockData

🙏 Благодарности

Проект создан на основе обучающего туториала от Sean Allen. Материал был адаптирован и дополнен под мои цели обучения.

About

Learn-by-building: SwiftUI app with grid, sheets, reusable components, SafariView.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages