iOS Dev
7.55K subscribers
952 photos
69 videos
1 file
1.08K links
🍏Канал об iOS-разработке, необычных подходах и решениях.
👨‍💻Автор: Виктор Грушевский (@Viktorianec)
Темы:
⭐️ Подготовка к собеседованиям.
⭐️ Архитектуры и алгоритмы.
⭐️ Код. Много кода.

⚒️База знаний: https://boosty.to/ios_dev

#ios #mobile #swift
加入频道
This media is not supported in your browser
VIEW IN TELEGRAM
Реализация приложения для игры в шахматы на SwiftUI

David v.Knobelsdorff недавно создал шахматное приложение от начала до конца с помощью SwiftUI и задокументировал весь процесс в своем блоге.

Это объёмный материал (аж из девяти частей), но его стоит прочитать, если вы интересуетесь шахматами или ищете хороший пример создания полноценного приложения на SwiftUI.

1️⃣ Мотивация и терминология.
2️⃣ Зачем нужны pgn-файлы и как с ними работать.
3️⃣ Реализация логики.
4️⃣ Создание набора компонентов.
5️⃣ База данных и кодирование ходов.
6️⃣ FSRS-алгоритм (тут можно почитать про него дополнительно).
7️⃣ Шахматные головоломки.
8️⃣ Использование локального шахматного движка.
9️⃣ Тестирование и выводы.

😃 iOS Dev
Please open Telegram to view this post
VIEW IN TELEGRAM
Что такое краш в iOS: детальный разбор

Конечно, факт того, что краш - это завершение работы приложения, является очевидным.

Джейкоб Бартлетт рассматривает природу сбоев с другого угла, ведь на самом деле система вызывает краш, чтобы сохранить устройство в безопасности.

📖 Делюсь отличной статьёй, в которой сложная тема рассмотрена с юмором (и даже приведены 9 уровней зла от падения фрейм-рейта до компрометации системы в целом).

Рассмотрены сбои не только в рантайме, но и в ядре XNU, а ещё указано, почему краши - далеко не самое худшее, что может произойти с девайсом.

😃 iOS Dev
Please open Telegram to view this post
VIEW IN TELEGRAM
Большое обновление App Store Connect — версия 2.0

🎉 Apple обновили приложение (надеюсь, теперь не будет постоянного дропа сессий, как раньше), можно подписаться на уведомления о фичеринге и не только.

А ещё появился целый раздел, в котором можно напрямую номинировать своё приложение на фичеринг (среди типов добавление контента, улучшение функциональности или в целом запуск).

📖 Узнать больше о номинациях и новых доступных ресурсах можно здесь.

😃 iOS Dev
Please open Telegram to view this post
VIEW IN TELEGRAM
Обнаружение лиц на изображениях с помощью фреймворка Vision

Распознавание лиц может оказаться полезным инструментом для многих приложений.

Например в системном «Фото» от Apple это используется для организации специальной коллекции.

В 18 оси для разработчиков появилась возможность использовать новый запрос FaceObservation, который упрощает работу с такими задачами.

📖 Доступное объяснение и пример использования есть в этой статье.

😃 iOS Dev
Please open Telegram to view this post
VIEW IN TELEGRAM
This media is not supported in your browser
VIEW IN TELEGRAM
Эффект переливающегося стикера на Metal+Swift

Крутые анимации всегда сложны, а довести задуманное до конца уже неплохо.

🤩 Нашел блестящую (в прямом и переносном смыслах) реализацию фойл-эффекта. Кстати, автор пишет, что пытался повторить то, что можно встретить в самых разных карточках, например, в покемонах.

Использовано сразу несколько шейдеров и модификаций внутри.

📖 Бонусом идёт репозиторий с кодом (из коробки доступно для настройки несколько параметров).

А здесь ещё больше сложных анимаций и эффектов.

😃 iOS Dev
Please open Telegram to view this post
VIEW IN TELEGRAM
TextEditor в SwiftUI: возможности, ограничения и советы

Работа с текстом — пожалуй, одна из самых частых и важных задач в нашей разработке.

В проектах, например, может быть поле для комментариев, создание заметок или даже полноценный редактор.

В SwiftUI есть возможность использования TextEditor. И пусть он не такой мощный, как UITextView, его вполне достаточно для большинства случаев использования.

📖 В этом материале разбираются не только примеры использования (например, как сделать свою функцию find/replace), но и приводится простой пример реализации.

😃 iOS Dev
Please open Telegram to view this post
VIEW IN TELEGRAM
Подробное объяснение работы с Environment в SwiftUI

Автор статьи считает, что SwiftUI буквально произвёл революцию в разработке приложений благодаря декларативному синтаксису и реактивной обработке данных, тем самым упростив создание динамичных и отзывчивых пользовательских интерфейсов.

В основе фреймворка лежит обертка свойств @Environment (и связанные с этим инструменты).

📖 В статье подробно описаны различные механизмы от классических протоколов @EnvironmentObject и ObservableObject до относительно новых макросов @Observable и @Bindable.

А ещё уделено внимание производительности и сложным иерархиям вью в приложении.

😃 iOS Dev
Please open Telegram to view this post
VIEW IN TELEGRAM
Есть ли место творчеству в разработке?

Многие романтизируют нашу профессию, но так ли это на самом деле, большой вопрос.

В некоторых рекламах показывают программистов, которые пьют чашку кофе, за окном льёт дождь, а яблочко на ноутбуке (прошли времена) светится и озаряет надеждой на светлое будущее. В реальности же всё немного иначе.

Чаще всего разработка — это совокупность многих ограничений: ТЗ, дизайн, жёсткая архитектура, процесс код-ревью и тестирование — повторить несколько раз. В зависимости от уровня компании между каждым этапом могут быть свои прослойки, в том числе согласования, многократные изменения и смещения приоритетов.

Когда-то давным-давно я запомнил важную истину: код, который вы пишете на работе, вам не принадлежит. Казалось бы, банальная фраза, но она сильно меняет мировоззрение. Наша задача — в первую очередь закрывать потребности бизнеса и получать за это справедливое вознаграждение.

В мифическом человеко-месяце Брукса есть глава, посвященная радостям ремесла. Я не помню детали, так как читал её в университете, но суть в том, что программисты радуются самому процессу разработки и решению сложных, запутанных вещей. Выброс дофамина, который мы получаем, когда сложные вещи наконец компилятся, бустит общее состояние, а возможность делать вещи, полезные остальным, выступает путеводной звездой.

На мой взгляд, выгорание человека как специалиста происходит в первую очередь от отсутствия понимания, что именно нужно сделать. И от монотонности одного и того же, что справедливо не только для программирования. Поэтому в сфере, когда вы решаете новые задачи, расширяя функциональность, гибкость мышления будет только развиваться.

Я общался со многими людьми, которые менторят людей (а ещё ведут блоги о разработке, но не программируют сами, что интересно), видел множество ребят, которые разочаровывались в программировании спустя два месяца после попадания в профессию, и видел выгоревших профессионалов с десятилетним опытом по причинам, озвученным в абзаце выше.

Несмотря на это, количество людей, которые стремятся попасть внутрь магического IT все также высоко. Приведу пример, за последние несколько месяцев я общался со своими коллегами из топовых компаний, и по нашим суммарным внутренним метрикам количество продолжает расти, в начале года на одну вакансию в среднем было 12 отзывов, сейчас около 40 (это уже после того, как HR делятся резюме кандидатов), об этом нужно помнить.

Творческая ли наша профессия?

Если вы умеете находить радость в условиях жёстких ограничений и кайфуете от того, что вашим продуктом будут пользоваться тысячи людей, безусловно.

Если вы готовы постоянно учиться, следить за новыми технологиями и у вас в компании можно юзать новые фреймворки, а не поддерживать 12 ось, то да.

Если вы не боитесь сложных вызовов, когда на Stackoverflow отсутствуют ответы, а ChatGPT ещё не обучился, конечно.

Но когда вы в очередной раз столкнётесь с багом, который не воспроизводится или ваше приложение зареджектят потому что луна опять не в той фазе, или же проект надо будет перевести на Swift 7 спустя несколько лет, а для этого надо будет обновить треть кодовой базы — перечитайте этот пост.

😃 iOS Dev
Please open Telegram to view this post
VIEW IN TELEGRAM
Интеграция Live Activity и Dynamic Island в iOS: подробное руководство

📖 В масштабной статье описаны этапы, позволяющие, эффективно интегрировать Live Activities и Dynamic Island в приложение для iOS.

Плюс в том, что рассмотрен каждый шаг: от ограничений дизайна до обработки обновлений.

📺 Также материал доступен и в формате видео.

😃 iOS Dev
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
Об анатомии крэшей на iOS «по-взрослому»

Давид Чупреев из команды Core iOS ОК на хабре постарался раскрыть тему крашей, и в фундаментальной статье описал, откуда они берутся и, что самое главное, как с ними взаимодействовать.

📖 В этом материале затрагиваются не только технические азы, но и структура краш-репорта, виды исключений, а также принцип работы PLCrashReporter.

🔗 А в нашем канале недавно был ещё один разбор «9 уровней зла» от падения фрейм-рейта до компрометации системы в целом.

😃 iOS Dev
Please open Telegram to view this post
VIEW IN TELEGRAM
This media is not supported in your browser
VIEW IN TELEGRAM
Подборка экспериментальных анимаций на SwiftUI с кодом

😎 Майкл Ли - дизайнер, который любит делать прототипы с необычными подходами.

Недавно он заопенсорсил всю коллекцию (и обещает продолжать её наполнять).

🛠 Ознакомиться с примерами можно на Github.

😃 iOS Dev
Please open Telegram to view this post
VIEW IN TELEGRAM
Оптимизация процесса компиляции и выполнения тестов в Xcode

Компиляция проектов Xcode может занимать много времени (особенно после очистки кэша).

При этом время компиляции обычно растет динамически вместе с увеличением проекта, а скорость сборок часто повышается только за счёт обновления аппаратного обеспечения, что само по себе крайне дорогостоящий процесс.

На протяжении многих лет в Tuist вкладывали средства в решение этой проблемы, используя наиболее оригинальный и экономически эффективный подход с помощью фич Xcode.

📖 В этой статье разработчики из Tuist объясняют, что именно может замедлять скорость сборки проектов, какие шаги можно предпринять и почему превьюхи в SwiftUI могут отвалиться из-за проблем билд-системы самого Xcode.

😃 iOS Dev
Please open Telegram to view this post
VIEW IN TELEGRAM
This media is not supported in your browser
VIEW IN TELEGRAM
Пример интеграции Natural Language: анализ текста и генерация градиента на основе результата

ℹ️ Natural Language — это фреймворк, предоставляющий набор инструментов для анализа и обработки текста.

Его можно использовать, например, для определения языка, поиска сходства между фрагментами и т. д.

📖 В своей статье Артем Новичков рассматривает особенности использования фреймворка, приводит примеры и показывает возможное применение с использованием MeshGradient (в канале есть несколько разборов).

🛠 Код примера доступен на GitHub.

😃 iOS Dev
Please open Telegram to view this post
VIEW IN TELEGRAM
This media is not supported in your browser
VIEW IN TELEGRAM
Реализация поисковых подсказок в SwiftUI

🔎 Модификатор searchSuggestions(_:) - это полезная фича, которая улучшает работу поиска в приложениях для iOS.

В сочетании с отслеживанием истории поиска можно создать интуитивно понятный интерфейс, который поможет пользователям быстро найти то, что они ищут (и легко вернуться к ранее просмотренным элементам).

📖 В этом материале рассказано, как внедрить такую фичу в своё приложение поэтапно:

1️⃣ Реализация фильтрации поиска в режиме реального времени.
2️⃣ Внедрение подсказок.
3️⃣ Отслеживание истории поиска.
4️⃣ Создание удобной навигации.

😃 iOS Dev
Please open Telegram to view this post
VIEW IN TELEGRAM
This media is not supported in your browser
VIEW IN TELEGRAM
Новогодняя анимация на SwiftUI+AppKit

Интересное решение придумал разработчик, чтобы добавить немного атмосферы в последний месяц этого года.

🤩 Оказывается, что такой эффект можно создать для мака, что и доказывает Simon B. Støvring.

Интересно, кто-то из читателей нашего канала сможет повторить такой эффект?

😃 iOS Dev
Please open Telegram to view this post
VIEW IN TELEGRAM
Полезные советы для Advent of Code на Swift

Каждый декабрь Эрик Вастл публикует Advent of Code — увлекательный набор заданий по написанию алгоритмов.

Каждый день с 1 по 25 декабря публикуется по одной задаче.

Задачи появляются постепенно, начиная с самых простых и постепенно усложняются.

🔗 Здесь есть несложная инструкция, как присоединиться к Swift-лидерборду.

А на скриншоте несколько советов, как упростить решение задач, используя Swift Algorithms.

😃 iOS Dev
Please open Telegram to view this post
VIEW IN TELEGRAM
This media is not supported in your browser
VIEW IN TELEGRAM
Создание кастомного Segmented Control в SwiftUI

Хотя многие примеры модификатора matchedGeometryEffect() посвящены анимации, он может применяться и в других контекстах, например для создания своих контролов.

📖 Наталья Панферова в своем блоге рассказывает о простом способе использования этого модификатора для создания собственного компонента со слайд-анимацией.

😃 iOS Dev
Please open Telegram to view this post
VIEW IN TELEGRAM
Растягивание аудиофайла до нужной длины в Swift

Такая фича может быть полезной для устранения проблем синхронизации (например, при переводе исходного файла и генерации субтитров).

📖 Том Локхорст и Матейс Кадейк рассказывают, почему комбинации AVMutableComposition и AVAudioUnitTimePitch недостаточно. И описывают способ с дублированием конкретных фрагментов аудио в рассчитанных точках.

В рамках хакатона от RevenueCat я делал небольшую утилиту для генерации сабов, поэтому данный подход может оказаться весьма полезным. Да и для пополнения пула знаний решение довольно любопытное.

🛠 Код примера доступен на GitHub.

😃 iOS Dev
Please open Telegram to view this post
VIEW IN TELEGRAM
Создание клона приложения Messages с помощью SwiftUI

📖
В статье автор делится своим подходом к вёрстке списка чатов, выборе аттачей и затрагивает особенности реализации баббла сообщений с помощью Path.

А посмотреть на реализацию эффекта отклеивания, как в нативном приложении, можно в этом посте.

😃 iOS Dev
Please open Telegram to view this post
VIEW IN TELEGRAM