Ответ
Pet-проекты — это полигон для изучения новых технологий и архитектурных подходов.
1. WeatherApp (Прогноз погоды)
- Стек: UIKit, CoreLocation, URLSession, CoreData, Combine.
- Цель: Изучение работы с REST API, фонового обновления и локального кэширования.
- Ключевые моменты:
- Запрос данных с OpenWeatherAPI.
- Кэширование ответов в CoreData для оффлайн-режима.
- Фоновое обновление по геопозиции.
- Пример сетевого слоя:
func fetchWeather(for city: String) async throws -> WeatherData { let url = URL(string: "https://api.openweathermap.org/...")! let (data, _) = try await URLSession.shared.data(from: url) return try JSONDecoder().decode(WeatherData.self, from: data) }
2. TaskTracker (Менеджер задач)
- Стек: SwiftUI, Firebase (Firestore, Auth), UserNotifications.
- Цель: Освоение SwiftUI и real-time баз данных.
- Ключевые моменты:
- Синхронизация задач между устройствами через Firestore.
- Локализованные push-уведомления о дедлайнах.
- Архитектура MVVM.
3. AR-Chess (Шахматы в дополненной реальности)
- Стек: ARKit, SceneKit, MultipeerConnectivity.
- Цель: Эксперименты с компьютерным зрением и сетевым взаимодействием.
- Ключевые моменты:
- Детекция плоскости и размещение шахматной доски.
- Физика перемещения фигур в SceneKit.
- P2P-мультиплеер через GameKit.
Общая цель: Углубленное понимание MVVM/VIPER, модульности (SPM) и написания тестов (XCTest).
Ответ 18+ 🔞
А, ну вот, смотри, классическая история! Сидит чувак, учит какой-нибудь UIKit, а ему говорят: "Да сделай пет-проект, блядь, работодатель смотрит!" И он такой: "Ага, щас, сделаю". А на деле это ж просто предлог, чтобы новую хуйню потрогать, не боясь, что прод накроется медным тазом. Полигон, ёпта, самый честный.
1. WeatherApp (Прогноз погоды)
- Стек: UIKit, CoreLocation, URLSession, CoreData, Combine.
- Цель по-человечески: Ну, REST API потыкать, чтобы не просто
print(response)в консоль, а чтобы хоть что-то на экране шевелилось. И чтоб, если интернет сдох, приложение не выло как сука, а показывало вчерашнюю погоду из своей подвальной базы. - Что там было интересного:
- Тыкался в OpenWeatherAPI, пока не понял, что
appidнадо передавать, а не в голове держать. Просветление, блядь. - Запихивал всё в CoreData, а потом охуевал, откуда берутся дубликаты записей. Чистил, переписывал, волнение ебать.
- Фоновое обновление по гео — это отдельный цирк. Получал координаты, а там не Москва, а какой-нибудь Подъёбкино, и погода соответствующая.
- Тыкался в OpenWeatherAPI, пока не понял, что
- Кусок кода, который тыкал палкой: (Не трогаю, всё как есть, техническая святыня)
func fetchWeather(for city: String) async throws -> WeatherData { let url = URL(string: "https://api.openweathermap.org/...")! let (data, _) = try await URLSession.shared.data(from: url) return try JSONDecoder().decode(WeatherData.self, from: data) }
2. TaskTracker (Менеджер задач)
- Стек: SwiftUI, Firebase (Firestore, Auth), UserNotifications.
- Цель по-человечески: Отмазаться от UIKit, сказать "я в тренде, я на SwiftUI". И заодно прикрутить эту вашу "реал-тайм базу", чтобы задачи с телефона на планшет сами летали, как будто так и надо.
- Что там было интересного:
- Синхронизация через Firestore — вроде магия, а на деле подписался на
snapshotListenerи понеслась. Добавил задачу на айфоне — она тут же всплыла на айпаде. Чувствовал себя богом на полчаса, пока не словил первыйpermission denied. - Локализованные пуши о дедлайнах — это чтобы самому себе напоминать, что пора бы уже этот пет-проект забросить.
- MVVM на SwiftUI — это когда
@Publishedпеременные, а вьюха сама перерисовывается. Красота, пока не начинаешь пихать туда логику и получаешь ViewModel на 300 строк, хитрая жопа.
- Синхронизация через Firestore — вроде магия, а на деле подписался на
3. AR-Chess (Шахматы в дополненной реальности)
- Стек: ARKit, SceneKit, MultipeerConnectivity.
- Цель по-человечески: Ваще оторваться по полной. Сказать "я делал AR" — это же солидно звучит! А по факту — искал пол столу полчаса, чтобы доску поставить.
- Что там было интересного:
- Детекция плоскости — это священный ритуал. Водишь телефоном, как идиот, а он тебе голубые квадратики рисует. "Вот тут можно, сука, доску воткнуть!".
- Физика в SceneKit — это когда фигуру толкаешь, а она улетает в хер знает куда, задев короля. "Шах и мат, блядь, в виртуальный шкаф".
- P2P-мультиплеер — это высший пилотаж. Настроил соединение, начали игру, а соперник взял и вышел. Обида ебать. Играешь сам с собой, полупидор.
А общая-то цель, блядь, какая? Да всё просто: не просто print("Hello, world!") писать, а понять, как эта паззл-хуязл из MVVM, модулей через SPM и этих ваших тестов собирается во что-то, что не развалится от одного твоего чиха. Чтобы в резюме написать не "знаком с", а "применил на практике, вот ссылка на гит, можете потыкать". Вот и вся философия, в рот меня чих-пых.