1 added
1 removed
Original
2026-01-01
Modified
2026-02-21
1
<p><a>#подборки</a></p>
1
<p><a>#подборки</a></p>
2
<ul><li>14 фев 2024</li>
2
<ul><li>14 фев 2024</li>
3
<li>0</li>
3
<li>0</li>
4
</ul><p>Опытные айосеры делятся идеями для пет-проектов. Нет, здесь не будет скучных парсеров погоды, тудушек и помидорок.</p>
4
</ul><p>Опытные айосеры делятся идеями для пет-проектов. Нет, здесь не будет скучных парсеров погоды, тудушек и помидорок.</p>
5
<p>Иллюстрация: Оля Ежак для Skillbox Media</p>
5
<p>Иллюстрация: Оля Ежак для Skillbox Media</p>
6
<p>Шеф-редактор Skillbox Media "Код". Пишет о разработке, софт-скиллах и культовых личностях в IT. Обожает Swift, продукты Apple и мемы про код.</p>
6
<p>Шеф-редактор Skillbox Media "Код". Пишет о разработке, софт-скиллах и культовых личностях в IT. Обожает Swift, продукты Apple и мемы про код.</p>
7
<p>Главная проблема начинающих iOS-разработчиков в том, что вакансии для джунов появляются редко, а конкуренция за них высокая. Крутое портфолио с пет-проектами может помочь выделиться на фоне конкурентов - но идеи для них искать трудно, а те, что есть интернете, довольно банальны и сложны в исполнении.</p>
7
<p>Главная проблема начинающих iOS-разработчиков в том, что вакансии для джунов появляются редко, а конкуренция за них высокая. Крутое портфолио с пет-проектами может помочь выделиться на фоне конкурентов - но идеи для них искать трудно, а те, что есть интернете, довольно банальны и сложны в исполнении.</p>
8
<p>Поэтому мы попросили двух опытных iOS-разработчиц поделиться свежими идеями для тренировочных проектов, а заодно расписать их так, чтобы разобрался даже новичок. Даже если вы не найдёте здесь проект мечты, возможно, эти идеи помогут вам выйти на что-то по-настоящему великое :)</p>
8
<p>Поэтому мы попросили двух опытных iOS-разработчиц поделиться свежими идеями для тренировочных проектов, а заодно расписать их так, чтобы разобрался даже новичок. Даже если вы не найдёте здесь проект мечты, возможно, эти идеи помогут вам выйти на что-то по-настоящему великое :)</p>
9
<p>Разработчик-фрилансер. Занимается iOS-разработкой с 2011 года. Вела курс по Swift в Астраханском государственном университете. Программный директор и эксперт по мобильной разработке в Skillbox.</p>
9
<p>Разработчик-фрилансер. Занимается iOS-разработкой с 2011 года. Вела курс по Swift в Астраханском государственном университете. Программный директор и эксперт по мобильной разработке в Skillbox.</p>
10
<p>С 2016 года также занималась управлением проектами в мобильной разработке.</p>
10
<p>С 2016 года также занималась управлением проектами в мобильной разработке.</p>
11
<p><strong>Сложность</strong>: ⭐⭐⭐⭐✰</p>
11
<p><strong>Сложность</strong>: ⭐⭐⭐⭐✰</p>
12
<p><strong>Чему научитесь</strong>: работе с фоновыми процессами, отслеживанию геопозиции в реальном времени, работе с уведомлениями.</p>
12
<p><strong>Чему научитесь</strong>: работе с фоновыми процессами, отслеживанию геопозиции в реальном времени, работе с уведомлениями.</p>
13
<p><strong>Инструменты</strong>: Swift,<a>UIKit</a>, user notifications,<a>Core Location</a>, фреймворк для работы с картами на выбор.</p>
13
<p><strong>Инструменты</strong>: Swift,<a>UIKit</a>, user notifications,<a>Core Location</a>, фреймворк для работы с картами на выбор.</p>
14
<p>Приложение, которое присылает пользователю уведомление, когда он подъезжает к своей остановке. В самом простом варианте программа будет хранить данные о нескольких точках, при приближении к которым сработает фоновый процесс, после чего приложение создаст и отправит локальную нотификацию.</p>
14
<p>Приложение, которое присылает пользователю уведомление, когда он подъезжает к своей остановке. В самом простом варианте программа будет хранить данные о нескольких точках, при приближении к которым сработает фоновый процесс, после чего приложение создаст и отправит локальную нотификацию.</p>
15
<p>Для этого потребуется разработать два экрана:</p>
15
<p>Для этого потребуется разработать два экрана:</p>
16
<p><strong>1️⃣ Стартовый экран - список остановок.</strong>Если остановок нет, можно оставить на экране всплывашку с рекомендацией добавить остановку, чтобы начать пользоваться приложением. Когда остановки есть, показываем список их названий. Также на экране должна быть кнопка добавления новой остановки.</p>
16
<p><strong>1️⃣ Стартовый экран - список остановок.</strong>Если остановок нет, можно оставить на экране всплывашку с рекомендацией добавить остановку, чтобы начать пользоваться приложением. Когда остановки есть, показываем список их названий. Также на экране должна быть кнопка добавления новой остановки.</p>
17
<p><strong>2️⃣ Добавление остановки.</strong>Здесь лучше всего интегрировать фреймворк для работы с картами. Выбирайте SDK на свой вкус:<a>Apple</a>,<a>Google</a>,<a>Yandex</a>или любой другой. На карте пользователь может выбрать точку. Когда точка выбрана, появляется предложение указать название остановки и сохранить её. До ввода названия кнопка сохранения заблокирована. Пока точка не сохранена, можно нажать "Отмена" и вернуться к выбору точки.</p>
17
<p><strong>2️⃣ Добавление остановки.</strong>Здесь лучше всего интегрировать фреймворк для работы с картами. Выбирайте SDK на свой вкус:<a>Apple</a>,<a>Google</a>,<a>Yandex</a>или любой другой. На карте пользователь может выбрать точку. Когда точка выбрана, появляется предложение указать название остановки и сохранить её. До ввода названия кнопка сохранения заблокирована. Пока точка не сохранена, можно нажать "Отмена" и вернуться к выбору точки.</p>
18
<p>После сохранения точки проверяем, есть ли у нас разрешение на использование геолокации. Если нет, выводим сообщение с запросом для пользователя предоставить это разрешение или предлагаем самостоятельно включить геолокацию в настройках.</p>
18
<p>После сохранения точки проверяем, есть ли у нас разрешение на использование геолокации. Если нет, выводим сообщение с запросом для пользователя предоставить это разрешение или предлагаем самостоятельно включить геолокацию в настройках.</p>
19
<p>Когда геолокация включена и точки установлены, приложение должно запустить отслеживание местоположения. При приближении к точке на определённое расстояние создаём локальное уведомление с баннером и звуком и рассылаем её через центр нотификаций.</p>
19
<p>Когда геолокация включена и точки установлены, приложение должно запустить отслеживание местоположения. При приближении к точке на определённое расстояние создаём локальное уведомление с баннером и звуком и рассылаем её через центр нотификаций.</p>
20
<p>Для выполнения проекта нужно изучить:</p>
20
<p>Для выполнения проекта нужно изучить:</p>
21
<ul><li>Работу с фоновыми процессами.</li>
21
<ul><li>Работу с фоновыми процессами.</li>
22
<li><a>CLLocationManager</a>.</li>
22
<li><a>CLLocationManager</a>.</li>
23
<li>Работа с локальными уведомлениями.</li>
23
<li>Работа с локальными уведомлениями.</li>
24
<li>Карты (фреймворк на ваш выбор).</li>
24
<li>Карты (фреймворк на ваш выбор).</li>
25
</ul><p><strong>Как усложнить.</strong>При развитии приложения можно добавить несколько функций:</p>
25
</ul><p><strong>Как усложнить.</strong>При развитии приложения можно добавить несколько функций:</p>
26
<ul><li>Редактирование и удаление остановок.</li>
26
<ul><li>Редактирование и удаление остановок.</li>
27
<li>Активация и деактивация остановок (чтобы они оставались в списке, но не отслеживались, пока неактивны).</li>
27
<li>Активация и деактивация остановок (чтобы они оставались в списке, но не отслеживались, пока неактивны).</li>
28
<li>Добавление расписаний: отслеживание некоторых остановок можно привязать к дням недели или к определённым интервалам времени.</li>
28
<li>Добавление расписаний: отслеживание некоторых остановок можно привязать к дням недели или к определённым интервалам времени.</li>
29
</ul><p>Приложение, которое позволит собирать статистику по своему самочувствию и отслеживать, как на него влияют внешние обстоятельства.</p>
29
</ul><p>Приложение, которое позволит собирать статистику по своему самочувствию и отслеживать, как на него влияют внешние обстоятельства.</p>
30
<p>Идея в том, что пользователь составляет собственный набор показателей, по которым он хочет собрать статистику. Например, можно выбрать настроение (в баллах от 1 до 10), количество выпитых чашек кофе, температуру за окном и количество часов сна. После выбора показателей начинается сбор данных. Пользователь каждый день заходит в приложение и отмечает результат за сутки. Эти данные мы собираем и храним локально, используя Core Data. Дальше на отдельном экране можно будет посмотреть сводку в виде графика.</p>
30
<p>Идея в том, что пользователь составляет собственный набор показателей, по которым он хочет собрать статистику. Например, можно выбрать настроение (в баллах от 1 до 10), количество выпитых чашек кофе, температуру за окном и количество часов сна. После выбора показателей начинается сбор данных. Пользователь каждый день заходит в приложение и отмечает результат за сутки. Эти данные мы собираем и храним локально, используя Core Data. Дальше на отдельном экране можно будет посмотреть сводку в виде графика.</p>
31
<p>В самом простом варианте нужно будет создать три экрана.</p>
31
<p>В самом простом варианте нужно будет создать три экрана.</p>
32
<p><strong>1️⃣ Ежедневное заполнение данных.</strong>На этом экране нужно списком вывести поля, куда пользователь будет вносить данные. Каждое поле соответствует одному из выбранных для отслеживания показателей. Из-за частоты обращения этот экран лучше сделать стартовым.</p>
32
<p><strong>1️⃣ Ежедневное заполнение данных.</strong>На этом экране нужно списком вывести поля, куда пользователь будет вносить данные. Каждое поле соответствует одному из выбранных для отслеживания показателей. Из-за частоты обращения этот экран лучше сделать стартовым.</p>
33
<p><strong>2️⃣ Список показателей для отслеживания.</strong>Экран для первоначальной настройки приложения. Здесь пользователь сможет добавлять, удалять или редактировать показатели. В самом простом варианте нужно будет установить название показателя и выбрать рамки, в которых он измеряется. Например, для настроения выбираем значения от 1 до 10, а для количества часов сна зададим границы от 0 до 24. Эти значения нужны для построения графика.</p>
33
<p><strong>2️⃣ Список показателей для отслеживания.</strong>Экран для первоначальной настройки приложения. Здесь пользователь сможет добавлять, удалять или редактировать показатели. В самом простом варианте нужно будет установить название показателя и выбрать рамки, в которых он измеряется. Например, для настроения выбираем значения от 1 до 10, а для количества часов сна зададим границы от 0 до 24. Эти значения нужны для построения графика.</p>
34
<p>В более сложном варианте можно настроить приложение так, чтобы экран со списком параметров выводился первым автоматически, если список показателей ещё не заполнен.</p>
34
<p>В более сложном варианте можно настроить приложение так, чтобы экран со списком параметров выводился первым автоматически, если список показателей ещё не заполнен.</p>
35
<p><strong>3️⃣ Экран статистики.</strong>Самая сложная и интересная часть всего проекта. На этом экране будут выводиться графики с разными показателями. Проще всего это реализовать с помощью недавно добавленного в Swift фреймворка<a>Swift Charts</a>, который предназначен как раз для построения графиков и диаграмм.</p>
35
<p><strong>3️⃣ Экран статистики.</strong>Самая сложная и интересная часть всего проекта. На этом экране будут выводиться графики с разными показателями. Проще всего это реализовать с помощью недавно добавленного в Swift фреймворка<a>Swift Charts</a>, который предназначен как раз для построения графиков и диаграмм.</p>
36
<p>Основная сложность задачи в том, чтобы вывести на одном графике показатели с разными единицами измерения и с разным шагом. Для этого в Swift Charts можно добавить справа дополнительную ось Y со своей шкалой. Это позволит вывести одновременно два параметра.</p>
36
<p>Основная сложность задачи в том, чтобы вывести на одном графике показатели с разными единицами измерения и с разным шагом. Для этого в Swift Charts можно добавить справа дополнительную ось Y со своей шкалой. Это позволит вывести одновременно два параметра.</p>
37
<p>Более сложный вариант потребует преобразования всех данных в общий формат. Например, если у нас есть шкала от 1 до 10 (10 шагов) и шкала от 0 до 24 (25 шагов), то общая шкала будет содержать 50 делений (наименьшее общее кратное для 10 и 25).</p>
37
<p>Более сложный вариант потребует преобразования всех данных в общий формат. Например, если у нас есть шкала от 1 до 10 (10 шагов) и шкала от 0 до 24 (25 шагов), то общая шкала будет содержать 50 делений (наименьшее общее кратное для 10 и 25).</p>
38
<p>Дальше нужно будет подумать, как вывести данные на экране, чтобы пользователю было легко их считать. Можно сделать подписи прямо возле точек графика, а можно - всплывающие подсказки по долгому нажатию.</p>
38
<p>Дальше нужно будет подумать, как вывести данные на экране, чтобы пользователю было легко их считать. Можно сделать подписи прямо возле точек графика, а можно - всплывающие подсказки по долгому нажатию.</p>
39
<p><strong>Как усложнить.</strong>Изучите другие фреймворки для построения графиков. Даже если вы не будете их использовать, в комментариях к проекту укажите список рассмотренных решений и объясните свой выбор. Это будет положительно оценено потенциальным работодателем.</p>
39
<p><strong>Как усложнить.</strong>Изучите другие фреймворки для построения графиков. Даже если вы не будете их использовать, в комментариях к проекту укажите список рассмотренных решений и объясните свой выбор. Это будет положительно оценено потенциальным работодателем.</p>
40
<p><strong>Сложность</strong>: ⭐⭐⭐✰✰</p>
40
<p><strong>Сложность</strong>: ⭐⭐⭐✰✰</p>
41
<p><strong>Чему научитесь</strong>: аккуратной и внимательной работе с ТЗ, простой вёрстке.</p>
41
<p><strong>Чему научитесь</strong>: аккуратной и внимательной работе с ТЗ, простой вёрстке.</p>
42
<p><strong>Инструменты</strong>: Swift,<a>UIKit</a>.</p>
42
<p><strong>Инструменты</strong>: Swift,<a>UIKit</a>.</p>
43
<p>Этот проект не так сложен технически, как предыдущие два, однако требует гораздо большего внимания к деталям и кропотливости. Оба качества часто недооцениваются разработчиками на старте карьеры, хотя именно они могут показать вас работодателю с выгодной стороны.</p>
43
<p>Этот проект не так сложен технически, как предыдущие два, однако требует гораздо большего внимания к деталям и кропотливости. Оба качества часто недооцениваются разработчиками на старте карьеры, хотя именно они могут показать вас работодателю с выгодной стороны.</p>
44
<p>Суть задачи в том, чтобы создать приложение для генерации персонажа и заполнения характеристик в соответствии с правилами игры Dungeons & Dragons. Если вы не играли в подобные игры, дальнейший текст может показаться вам довольно запутанным. Если же вы игрок, то знаете, что заполнение всех характеристик с учётом зависимостей от расы, профессии, умений и бэкграунда персонажей может быть нетривиальной задачей.</p>
44
<p>Суть задачи в том, чтобы создать приложение для генерации персонажа и заполнения характеристик в соответствии с правилами игры Dungeons & Dragons. Если вы не играли в подобные игры, дальнейший текст может показаться вам довольно запутанным. Если же вы игрок, то знаете, что заполнение всех характеристик с учётом зависимостей от расы, профессии, умений и бэкграунда персонажей может быть нетривиальной задачей.</p>
45
<p>Если коротко, персонажа ролевой игры можно описать набором из его истории и характеристик.</p>
45
<p>Если коротко, персонажа ролевой игры можно описать набором из его истории и характеристик.</p>
46
<ul><li><strong>Предыстория</strong>- описание жизни героя, его привычек, мыслей и мотивации. Например, персонаж может быть ремесленником, шутом или рыцарем - все эти амплуа наделяют его особыми свойствами.</li>
46
<ul><li><strong>Предыстория</strong>- описание жизни героя, его привычек, мыслей и мотивации. Например, персонаж может быть ремесленником, шутом или рыцарем - все эти амплуа наделяют его особыми свойствами.</li>
47
<li><strong>Характеристики</strong>- набор параметров, по которым можно просчитать успех его действий: как далеко персонаж может пройти за ход, какой урон нанести, сможет ли убедить оппонента сделать что-то и так далее.</li>
47
<li><strong>Характеристики</strong>- набор параметров, по которым можно просчитать успех его действий: как далеко персонаж может пройти за ход, какой урон нанести, сможет ли убедить оппонента сделать что-то и так далее.</li>
48
-
</ul><p>Характеристики персонажа зависят от разных факторов: его расы, класса, профессии, навыков, уровня. Также влияние м��жет оказать формализованная часть предыстории. Например, у сына торговца может быть больше денег, а у воина - лучше с боевыми навыками и силой, но хуже с красноречием.</p>
48
+
</ul><p>Характеристики персонажа зависят от разных факторов: его расы, класса, профессии, навыков, уровня. Также влияние может оказать формализованная часть предыстории. Например, у сына торговца может быть больше денег, а у воина - лучше с боевыми навыками и силой, но хуже с красноречием.</p>
49
Как может выглядеть интерфейс приложения<em>Изображение: DALL-E 3 / Skillbox Media</em><p>Все зависимости описаны в правилах игры и могут меняться в разных версиях правил и используемых дополнений. Чтобы посмотреть список характеристик, можно погуглить лист персонажа в PDF - например, для пятого релиза подойдёт<a>этот</a>.</p>
49
Как может выглядеть интерфейс приложения<em>Изображение: DALL-E 3 / Skillbox Media</em><p>Все зависимости описаны в правилах игры и могут меняться в разных версиях правил и используемых дополнений. Чтобы посмотреть список характеристик, можно погуглить лист персонажа в PDF - например, для пятого релиза подойдёт<a>этот</a>.</p>
50
<p>Многие из этих листов позволяют заполнить данные и даже получить вычисленный результат по всем характеристикам. Но сложность их реализации именно в использовании PDF со встроенным исполняемым кодом. Взаимодействовать с таким файлом легко на компьютере, но почти невозможно на iPad или iPhone.</p>
50
<p>Многие из этих листов позволяют заполнить данные и даже получить вычисленный результат по всем характеристикам. Но сложность их реализации именно в использовании PDF со встроенным исполняемым кодом. Взаимодействовать с таким файлом легко на компьютере, но почти невозможно на iPad или iPhone.</p>
51
<p>Итак, основная задача проекта - дать пользователю возможность выбрать основные характеристики персонажа и заполнить лист вычисляемыми характеристиками на основе выбора. Здесь я не буду давать рекомендаций и описывать количество экранов. Прелесть задачи именно в том, чтобы самостоятельно выписать правила и скрупулёзно реализовать их в коде.</p>
51
<p>Итак, основная задача проекта - дать пользователю возможность выбрать основные характеристики персонажа и заполнить лист вычисляемыми характеристиками на основе выбора. Здесь я не буду давать рекомендаций и описывать количество экранов. Прелесть задачи именно в том, чтобы самостоятельно выписать правила и скрупулёзно реализовать их в коде.</p>
52
<p>Желаю удачи и надеюсь увидеть ваши приложения в App Store!</p>
52
<p>Желаю удачи и надеюсь увидеть ваши приложения в App Store!</p>
53
<p>Тимлид команды мобильной разработки в Ozon Tech. Занимается разработкой для iOS с 2019 года. Окончила Школу 21 "Сбера". Эксперт по мобильной разработке в Skillbox.</p>
53
<p>Тимлид команды мобильной разработки в Ozon Tech. Занимается разработкой для iOS с 2019 года. Окончила Школу 21 "Сбера". Эксперт по мобильной разработке в Skillbox.</p>
54
<p>Большим плюсом для начинающего разработчика будет наличие в портфолио приложения и на UIKit, и на SwiftUI. Это покажет работодателю, что вы знаете разные архитектуры и подходы к вёрстке. В приложении на UIKit можно сделать упор на бизнес-логику, интерфейс при этом сделать облегчённым. На SwiftUI, наоборот, - уделить больше внимания визуальным деталям.</p>
54
<p>Большим плюсом для начинающего разработчика будет наличие в портфолио приложения и на UIKit, и на SwiftUI. Это покажет работодателю, что вы знаете разные архитектуры и подходы к вёрстке. В приложении на UIKit можно сделать упор на бизнес-логику, интерфейс при этом сделать облегчённым. На SwiftUI, наоборот, - уделить больше внимания визуальным деталям.</p>
55
<p><strong>Сложность</strong>: ⭐⭐⭐⭐✰</p>
55
<p><strong>Сложность</strong>: ⭐⭐⭐⭐✰</p>
56
<p><strong>Чему научитесь</strong>: работе с архитектурами MVC/MVP, сторонним API, сетевыми запросами.</p>
56
<p><strong>Чему научитесь</strong>: работе с архитектурами MVC/MVP, сторонним API, сетевыми запросами.</p>
57
<p><strong>Инструменты</strong>: Swift,<a>UIKit</a>,<a>URLSession</a>.</p>
57
<p><strong>Инструменты</strong>: Swift,<a>UIKit</a>,<a>URLSession</a>.</p>
58
<p>Разработчики часто используют сторонние программы для выполнения специфической работы. Например, если в вашем приложении есть фича перевода текста, вам нет смысла самому создавать переводчик, достаточно подключить готовый API. Работа с API предполагает, что приложение посылает запросы стороннему сервису, а в ответ получает данные.</p>
58
<p>Разработчики часто используют сторонние программы для выполнения специфической работы. Например, если в вашем приложении есть фича перевода текста, вам нет смысла самому создавать переводчик, достаточно подключить готовый API. Работа с API предполагает, что приложение посылает запросы стороннему сервису, а в ответ получает данные.</p>
59
<p>Приложение "Этот день в истории" будет показывать человеку факт о введённой дате, используя сервис<a>Numbers API</a>. Ответ от сервиса будет содержать текст на английском языке. Чтобы перевести его на русский, можно использовать API переводчика, например "<a>Яндекса</a>".</p>
59
<p>Приложение "Этот день в истории" будет показывать человеку факт о введённой дате, используя сервис<a>Numbers API</a>. Ответ от сервиса будет содержать текст на английском языке. Чтобы перевести его на русский, можно использовать API переводчика, например "<a>Яндекса</a>".</p>
60
<p><strong>1️⃣ Экран первый: ввод даты.</strong>Для этого вы можете использовать системный компонент<a>DatePicker</a>. После ввода даты осуществляется переход на новый экран.</p>
60
<p><strong>1️⃣ Экран первый: ввод даты.</strong>Для этого вы можете использовать системный компонент<a>DatePicker</a>. После ввода даты осуществляется переход на новый экран.</p>
61
<p><strong>2️⃣ Экран второй: факт о дне.</strong>При переходе на этот экран нужно отправить URL-запрос к сайту<a>Numbers API</a>, получить ответ с текстом и перевести его через переводчик, используя API. До момента загрузки всех необходимых данных можно отобразить лоадер. После получения данных выведите на экран факт о дне, импровизируя с внешним видом - например, можно сделать ему обрамление эстетичной рамкой.</p>
61
<p><strong>2️⃣ Экран второй: факт о дне.</strong>При переходе на этот экран нужно отправить URL-запрос к сайту<a>Numbers API</a>, получить ответ с текстом и перевести его через переводчик, используя API. До момента загрузки всех необходимых данных можно отобразить лоадер. После получения данных выведите на экран факт о дне, импровизируя с внешним видом - например, можно сделать ему обрамление эстетичной рамкой.</p>
62
<p>Чтобы отправить на втором экране запрос, нужно будет передать ему дату с предыдущего экрана. Ещё один вариант - сделать один общий класс для работы с датой и запросами, которым будут пользоваться оба экрана.</p>
62
<p>Чтобы отправить на втором экране запрос, нужно будет передать ему дату с предыдущего экрана. Ещё один вариант - сделать один общий класс для работы с датой и запросами, которым будут пользоваться оба экрана.</p>
63
<p><strong>Важно!</strong></p>
63
<p><strong>Важно!</strong></p>
64
<p>Так как все мы уважаем авторское право и знакомы с правилами использования API, на экране, где отображается переведённый текст, разместим надпись "Переведено сервисом…" с активной гиперссылкой на страницу переводчика. Также стоит указать информацию об использовании сервиса в файле Readme репозитория на GitHub.</p>
64
<p>Так как все мы уважаем авторское право и знакомы с правилами использования API, на экране, где отображается переведённый текст, разместим надпись "Переведено сервисом…" с активной гиперссылкой на страницу переводчика. Также стоит указать информацию об использовании сервиса в файле Readme репозитория на GitHub.</p>
65
<p><strong>Как усложнить.</strong>Добавьте выбор языка, на который будет осуществляться перевод. Можно также поэкспериментировать с обработкой ошибок и кэшированием ответов, полученных с помощью API.</p>
65
<p><strong>Как усложнить.</strong>Добавьте выбор языка, на который будет осуществляться перевод. Можно также поэкспериментировать с обработкой ошибок и кэшированием ответов, полученных с помощью API.</p>
66
<p><strong>Сложность</strong>: ⭐⭐⭐✰✰</p>
66
<p><strong>Сложность</strong>: ⭐⭐⭐✰✰</p>
67
<p><strong>Чему научитесь</strong>: архитектуре<a>MVVM</a>, вёрстке с помощью<a>VStack</a>/<a>HStack</a>/<a>ZStack</a>, а также работе с картинками, анимацией и рандомайзером.</p>
67
<p><strong>Чему научитесь</strong>: архитектуре<a>MVVM</a>, вёрстке с помощью<a>VStack</a>/<a>HStack</a>/<a>ZStack</a>, а также работе с картинками, анимацией и рандомайзером.</p>
68
<p><strong>Инструменты</strong>:<a>SwiftUI</a>.</p>
68
<p><strong>Инструменты</strong>:<a>SwiftUI</a>.</p>
69
<p>Простая игра, суть которой в том, чтобы запомнить расположение одинаковых карточек и перевернуть их.</p>
69
<p>Простая игра, суть которой в том, чтобы запомнить расположение одинаковых карточек и перевернуть их.</p>
70
<p>Для этого приложения нам понадобится всего один экран - карточки. Создайте экран, на котором в скроллящейся коллекции будут располагаться карточки. На внутренней стороне карточек разместите картинки. В начале игры пользователю даётся несколько секунд, чтобы изучить все карточки и запомнить их расположение. Затем они переворачиваются обложкой вверх, и нужно открыть картинки нажатием пары одинаковых карточек.</p>
70
<p>Для этого приложения нам понадобится всего один экран - карточки. Создайте экран, на котором в скроллящейся коллекции будут располагаться карточки. На внутренней стороне карточек разместите картинки. В начале игры пользователю даётся несколько секунд, чтобы изучить все карточки и запомнить их расположение. Затем они переворачиваются обложкой вверх, и нужно открыть картинки нажатием пары одинаковых карточек.</p>
71
<p>Интересными задачами тут будут вёрстка карточек, анимация их переворота (можно использовать rotation3DEffect), логика их хранения (например, массив, хранящийся во View Model) и перемешивания. После каждого раунда игры вам нужно будет перемешать массив с карточками, чтобы они расположились в новом порядке.</p>
71
<p>Интересными задачами тут будут вёрстка карточек, анимация их переворота (можно использовать rotation3DEffect), логика их хранения (например, массив, хранящийся во View Model) и перемешивания. После каждого раунда игры вам нужно будет перемешать массив с карточками, чтобы они расположились в новом порядке.</p>
72
<p><strong>Как усложнить.</strong>Предоставьте пользователю возможность задавать количество карточек, добавьте счётчик успешных и неуспешных попыток.</p>
72
<p><strong>Как усложнить.</strong>Предоставьте пользователю возможность задавать количество карточек, добавьте счётчик успешных и неуспешных попыток.</p>
73
Визуализация интерфейса приложения "Найди пару".<em>Изображение: DALL-E 3 / Skillbox Media</em><p><strong>Сложность</strong>: ⭐⭐⭐⭐✰</p>
73
Визуализация интерфейса приложения "Найди пару".<em>Изображение: DALL-E 3 / Skillbox Media</em><p><strong>Сложность</strong>: ⭐⭐⭐⭐✰</p>
74
<p><strong>Чему научитесь</strong>: импровизации без чёткого ТЗ, использованию основных элементов SwiftUI.</p>
74
<p><strong>Чему научитесь</strong>: импровизации без чёткого ТЗ, использованию основных элементов SwiftUI.</p>
75
<p><strong>Инструменты</strong>:<a>SwiftUI</a>.</p>
75
<p><strong>Инструменты</strong>:<a>SwiftUI</a>.</p>
76
<p>Приложение-самопрезентация. Поможет убить двух зайцев - показать навыки работы со SwiftUI и произвести хорошее первое впечатление на работодателя. Рассказывать можно о чём угодно, не только о хард-скиллах - например, о своём пути в IT, бэкграунде, хобби и увлечениях.</p>
76
<p>Приложение-самопрезентация. Поможет убить двух зайцев - показать навыки работы со SwiftUI и произвести хорошее первое впечатление на работодателя. Рассказывать можно о чём угодно, не только о хард-скиллах - например, о своём пути в IT, бэкграунде, хобби и увлечениях.</p>
77
<p>Чтобы было интереснее, используйте на каждом экране или в каждом разделе новые элементы интерфейса. SwiftUI предлагает много легко настраиваемых компонентов, которые помогут сделать богатый деталями интерфейс: скроллящиеся фото, возможность зума и вращения фото, кастомизация текста,<a>picker</a>,<a>slider</a> - всё что угодно. Но помните, что не стоит добавлять элементы просто для красоты - их выбор должен быть уместен и продиктован задачей.</p>
77
<p>Чтобы было интереснее, используйте на каждом экране или в каждом разделе новые элементы интерфейса. SwiftUI предлагает много легко настраиваемых компонентов, которые помогут сделать богатый деталями интерфейс: скроллящиеся фото, возможность зума и вращения фото, кастомизация текста,<a>picker</a>,<a>slider</a> - всё что угодно. Но помните, что не стоит добавлять элементы просто для красоты - их выбор должен быть уместен и продиктован задачей.</p>
78
<p>В использовании компонентов вы ограничены только собственной фантазией, это можно расценить как сложность, но это интересно. Не бойтесь экспериментировать и ошибаться, пробуйте свои самые смелые идеи, и ваш пет-проект будет выделяться. Желаю успехов!</p>
78
<p>В использовании компонентов вы ограничены только собственной фантазией, это можно расценить как сложность, но это интересно. Не бойтесь экспериментировать и ошибаться, пробуйте свои самые смелые идеи, и ваш пет-проект будет выделяться. Желаю успехов!</p>
79
<a><b>Бесплатный курс по Python ➞</b>Мини-курс для новичков и для опытных кодеров. 4 крутых проекта в портфолио, живое общение со спикером. Кликните и узнайте, чему можно научиться на курсе. Смотреть программу</a>
79
<a><b>Бесплатный курс по Python ➞</b>Мини-курс для новичков и для опытных кодеров. 4 крутых проекта в портфолио, живое общение со спикером. Кликните и узнайте, чему можно научиться на курсе. Смотреть программу</a>