HTML Diff
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 &amp; Dragons. Если вы не играли в подобные игры, дальнейший текст может показаться вам довольно запутанным. Если же вы игрок, то знаете, что заполнение всех характеристик с учётом зависимостей от расы, профессии, умений и бэкграунда персонажей может быть нетривиальной задачей.</p>
44 <p>Суть задачи в том, чтобы создать приложение для генерации персонажа и заполнения характеристик в соответствии с правилами игры Dungeons &amp; 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>