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
David v.Knobelsdorff недавно создал шахматное приложение от начала до конца с помощью SwiftUI и задокументировал весь процесс в своем блоге.
Это объёмный материал (аж из девяти частей), но его стоит прочитать, если вы интересуетесь шахматами или ищете хороший пример создания полноценного приложения на SwiftUI.
1️⃣ Мотивация и терминология.
2️⃣ Зачем нужны pgn-файлы и как с ними работать.
3️⃣ Реализация логики.
4️⃣ Создание набора компонентов.
5️⃣ База данных и кодирование ходов.
6️⃣ FSRS-алгоритм (тут можно почитать про него дополнительно).
7️⃣ Шахматные головоломки.
8️⃣ Использование локального шахматного движка.
9️⃣ Тестирование и выводы.
Please open Telegram to view this post
VIEW IN TELEGRAM
Что такое краш в iOS: детальный разбор
Конечно, факт того, что краш - это завершение работы приложения, является очевидным.
Джейкоб Бартлетт рассматривает природу сбоев с другого угла, ведь на самом деле система вызывает краш, чтобы сохранить устройство в безопасности.
📖 Делюсь отличной статьёй, в которой сложная тема рассмотрена с юмором (и даже приведены 9 уровней зла от падения фрейм-рейта до компрометации системы в целом).
Рассмотрены сбои не только в рантайме, но и в ядре XNU, а ещё указано, почему краши - далеко не самое худшее, что может произойти с девайсом.
😃 iOS Dev
Конечно, факт того, что краш - это завершение работы приложения, является очевидным.
Джейкоб Бартлетт рассматривает природу сбоев с другого угла, ведь на самом деле система вызывает краш, чтобы сохранить устройство в безопасности.
📖 Делюсь отличной статьёй, в которой сложная тема рассмотрена с юмором (и даже приведены 9 уровней зла от падения фрейм-рейта до компрометации системы в целом).
Рассмотрены сбои не только в рантайме, но и в ядре XNU, а ещё указано, почему краши - далеко не самое худшее, что может произойти с девайсом.
Please open Telegram to view this post
VIEW IN TELEGRAM
Большое обновление App Store Connect — версия 2.0
🎉 Apple обновили приложение (надеюсь, теперь не будет постоянного дропа сессий, как раньше), можно подписаться на уведомления о фичеринге и не только.
А ещё появился целый раздел, в котором можно напрямую номинировать своё приложение на фичеринг (среди типов добавление контента, улучшение функциональности или в целом запуск).
📖 Узнать больше о номинациях и новых доступных ресурсах можно здесь.
😃 iOS Dev
🎉 Apple обновили приложение (надеюсь, теперь не будет постоянного дропа сессий, как раньше), можно подписаться на уведомления о фичеринге и не только.
А ещё появился целый раздел, в котором можно напрямую номинировать своё приложение на фичеринг (среди типов добавление контента, улучшение функциональности или в целом запуск).
📖 Узнать больше о номинациях и новых доступных ресурсах можно здесь.
Please open Telegram to view this post
VIEW IN TELEGRAM
Обнаружение лиц на изображениях с помощью фреймворка Vision
Распознавание лиц может оказаться полезным инструментом для многих приложений.
Например в системном «Фото» от Apple это используется для организации специальной коллекции.
В 18 оси для разработчиков появилась возможность использовать новый запрос
📖 Доступное объяснение и пример использования есть в этой статье.
😃 iOS Dev
Распознавание лиц может оказаться полезным инструментом для многих приложений.
Например в системном «Фото» от Apple это используется для организации специальной коллекции.
В 18 оси для разработчиков появилась возможность использовать новый запрос
FaceObservation
, который упрощает работу с такими задачами.📖 Доступное объяснение и пример использования есть в этой статье.
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
Работа с текстом — пожалуй, одна из самых частых и важных задач в нашей разработке.
В проектах, например, может быть поле для комментариев, создание заметок или даже полноценный редактор.
В SwiftUI есть возможность использования TextEditor. И пусть он не такой мощный, как UITextView, его вполне достаточно для большинства случаев использования.
📖 В этом материале разбираются не только примеры использования (например, как сделать свою функцию find/replace), но и приводится простой пример реализации.
Please open Telegram to view this post
VIEW IN TELEGRAM
Подробное объяснение работы с Environment в SwiftUI
Автор статьи считает, что SwiftUI буквально произвёл революцию в разработке приложений благодаря декларативному синтаксису и реактивной обработке данных, тем самым упростив создание динамичных и отзывчивых пользовательских интерфейсов.
В основе фреймворка лежит обертка свойств
📖 В статье подробно описаны различные механизмы от классических протоколов
А ещё уделено внимание производительности и сложным иерархиям вью в приложении.
😃 iOS Dev
Автор статьи считает, что SwiftUI буквально произвёл революцию в разработке приложений благодаря декларативному синтаксису и реактивной обработке данных, тем самым упростив создание динамичных и отзывчивых пользовательских интерфейсов.
В основе фреймворка лежит обертка свойств
@Environment
(и связанные с этим инструменты). 📖 В статье подробно описаны различные механизмы от классических протоколов
@EnvironmentObject
и ObservableObject
до относительно новых макросов @Observable
и @Bindable
. А ещё уделено внимание производительности и сложным иерархиям вью в приложении.
Please open Telegram to view this post
VIEW IN TELEGRAM
Есть ли место творчеству в разработке?
Многие романтизируют нашу профессию, но так ли это на самом деле, большой вопрос.
В некоторых рекламах показывают программистов, которые пьют чашку кофе, за окном льёт дождь, а яблочко на ноутбуке (прошли времена) светится и озаряет надеждой на светлое будущее. В реальности же всё немного иначе.
Чаще всего разработка — это совокупность многих ограничений: ТЗ, дизайн, жёсткая архитектура, процесс код-ревью и тестирование — повторить несколько раз. В зависимости от уровня компании между каждым этапом могут быть свои прослойки, в том числе согласования, многократные изменения и смещения приоритетов.
Когда-то давным-давно я запомнил важную истину: код, который вы пишете на работе, вам не принадлежит. Казалось бы, банальная фраза, но она сильно меняет мировоззрение. Наша задача — в первую очередь закрывать потребности бизнеса и получать за это справедливое вознаграждение.
В мифическом человеко-месяце Брукса есть глава, посвященная радостям ремесла. Я не помню детали, так как читал её в университете, но суть в том, что программисты радуются самому процессу разработки и решению сложных, запутанных вещей. Выброс дофамина, который мы получаем, когда сложные вещи наконец компилятся, бустит общее состояние, а возможность делать вещи, полезные остальным, выступает путеводной звездой.
На мой взгляд, выгорание человека как специалиста происходит в первую очередь от отсутствия понимания, что именно нужно сделать. И от монотонности одного и того же, что справедливо не только для программирования. Поэтому в сфере, когда вы решаете новые задачи, расширяя функциональность, гибкость мышления будет только развиваться.
Я общался со многими людьми, которые менторят людей (а ещё ведут блоги о разработке, но не программируют сами, что интересно), видел множество ребят, которые разочаровывались в программировании спустя два месяца после попадания в профессию, и видел выгоревших профессионалов с десятилетним опытом по причинам, озвученным в абзаце выше.
Несмотря на это, количество людей, которые стремятся попасть внутрь магического IT все также высоко. Приведу пример, за последние несколько месяцев я общался со своими коллегами из топовых компаний, и по нашим суммарным внутренним метрикам количество продолжает расти, в начале года на одну вакансию в среднем было 12 отзывов, сейчас около 40 (это уже после того, как HR делятся резюме кандидатов), об этом нужно помнить.
Творческая ли наша профессия?
Если вы умеете находить радость в условиях жёстких ограничений и кайфуете от того, что вашим продуктом будут пользоваться тысячи людей, безусловно.
Если вы готовы постоянно учиться, следить за новыми технологиями и у вас в компании можно юзать новые фреймворки, а не поддерживать 12 ось, то да.
Если вы не боитесь сложных вызовов, когда на Stackoverflow отсутствуют ответы, а ChatGPT ещё не обучился, конечно.
Но когда вы в очередной раз столкнётесь с багом, который не воспроизводится или ваше приложение зареджектят потому что луна опять не в той фазе, или же проект надо будет перевести на Swift 7 спустя несколько лет, а для этого надо будет обновить треть кодовой базы — перечитайте этот пост.
😃 iOS Dev
Многие романтизируют нашу профессию, но так ли это на самом деле, большой вопрос.
В некоторых рекламах показывают программистов, которые пьют чашку кофе, за окном льёт дождь, а яблочко на ноутбуке (прошли времена) светится и озаряет надеждой на светлое будущее. В реальности же всё немного иначе.
Чаще всего разработка — это совокупность многих ограничений: ТЗ, дизайн, жёсткая архитектура, процесс код-ревью и тестирование — повторить несколько раз. В зависимости от уровня компании между каждым этапом могут быть свои прослойки, в том числе согласования, многократные изменения и смещения приоритетов.
Когда-то давным-давно я запомнил важную истину: код, который вы пишете на работе, вам не принадлежит. Казалось бы, банальная фраза, но она сильно меняет мировоззрение. Наша задача — в первую очередь закрывать потребности бизнеса и получать за это справедливое вознаграждение.
В мифическом человеко-месяце Брукса есть глава, посвященная радостям ремесла. Я не помню детали, так как читал её в университете, но суть в том, что программисты радуются самому процессу разработки и решению сложных, запутанных вещей. Выброс дофамина, который мы получаем, когда сложные вещи наконец компилятся, бустит общее состояние, а возможность делать вещи, полезные остальным, выступает путеводной звездой.
На мой взгляд, выгорание человека как специалиста происходит в первую очередь от отсутствия понимания, что именно нужно сделать. И от монотонности одного и того же, что справедливо не только для программирования. Поэтому в сфере, когда вы решаете новые задачи, расширяя функциональность, гибкость мышления будет только развиваться.
Я общался со многими людьми, которые менторят людей (а ещё ведут блоги о разработке, но не программируют сами, что интересно), видел множество ребят, которые разочаровывались в программировании спустя два месяца после попадания в профессию, и видел выгоревших профессионалов с десятилетним опытом по причинам, озвученным в абзаце выше.
Несмотря на это, количество людей, которые стремятся попасть внутрь магического IT все также высоко. Приведу пример, за последние несколько месяцев я общался со своими коллегами из топовых компаний, и по нашим суммарным внутренним метрикам количество продолжает расти, в начале года на одну вакансию в среднем было 12 отзывов, сейчас около 40 (это уже после того, как HR делятся резюме кандидатов), об этом нужно помнить.
Творческая ли наша профессия?
Если вы умеете находить радость в условиях жёстких ограничений и кайфуете от того, что вашим продуктом будут пользоваться тысячи людей, безусловно.
Если вы готовы постоянно учиться, следить за новыми технологиями и у вас в компании можно юзать новые фреймворки, а не поддерживать 12 ось, то да.
Если вы не боитесь сложных вызовов, когда на Stackoverflow отсутствуют ответы, а ChatGPT ещё не обучился, конечно.
Но когда вы в очередной раз столкнётесь с багом, который не воспроизводится или ваше приложение зареджектят потому что луна опять не в той фазе, или же проект надо будет перевести на Swift 7 спустя несколько лет, а для этого надо будет обновить треть кодовой базы — перечитайте этот пост.
Please open Telegram to view this post
VIEW IN TELEGRAM
Интеграция Live Activity и Dynamic Island в iOS: подробное руководство
📖 В масштабной статье описаны этапы, позволяющие, эффективно интегрировать Live Activities и Dynamic Island в приложение для iOS.
Плюс в том, что рассмотрен каждый шаг: от ограничений дизайна до обработки обновлений.
📺 Также материал доступен и в формате видео.
😃 iOS Dev
📖 В масштабной статье описаны этапы, позволяющие, эффективно интегрировать Live Activities и Dynamic Island в приложение для iOS.
Плюс в том, что рассмотрен каждый шаг: от ограничений дизайна до обработки обновлений.
📺 Также материал доступен и в формате видео.
Please open Telegram to view this post
VIEW IN TELEGRAM
Об анатомии крэшей на iOS «по-взрослому»
Давид Чупреев из команды Core iOS ОК на хабре постарался раскрыть тему крашей, и в фундаментальной статье описал, откуда они берутся и, что самое главное, как с ними взаимодействовать.
📖 В этом материале затрагиваются не только технические азы, но и структура краш-репорта, виды исключений, а также принцип работы PLCrashReporter.
🔗 А в нашем канале недавно был ещё один разбор «9 уровней зла» от падения фрейм-рейта до компрометации системы в целом.
😃 iOS Dev
Давид Чупреев из команды Core iOS ОК на хабре постарался раскрыть тему крашей, и в фундаментальной статье описал, откуда они берутся и, что самое главное, как с ними взаимодействовать.
📖 В этом материале затрагиваются не только технические азы, но и структура краш-репорта, виды исключений, а также принцип работы PLCrashReporter.
🔗 А в нашем канале недавно был ещё один разбор «9 уровней зла» от падения фрейм-рейта до компрометации системы в целом.
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
😎 Майкл Ли - дизайнер, который любит делать прототипы с необычными подходами.
Недавно он заопенсорсил всю коллекцию (и обещает продолжать её наполнять).
🛠 Ознакомиться с примерами можно на Github.
Please open Telegram to view this post
VIEW IN TELEGRAM
Оптимизация процесса компиляции и выполнения тестов в Xcode
⏳ Компиляция проектов Xcode может занимать много времени (особенно после очистки кэша).
При этом время компиляции обычно растет динамически вместе с увеличением проекта, а скорость сборок часто повышается только за счёт обновления аппаратного обеспечения, что само по себе крайне дорогостоящий процесс.
На протяжении многих лет в Tuist вкладывали средства в решение этой проблемы, используя наиболее оригинальный и экономически эффективный подход с помощью фич Xcode.
📖 В этой статье разработчики из Tuist объясняют, что именно может замедлять скорость сборки проектов, какие шаги можно предпринять и почему превьюхи в SwiftUI могут отвалиться из-за проблем билд-системы самого Xcode.
😃 iOS Dev
⏳ Компиляция проектов Xcode может занимать много времени (особенно после очистки кэша).
При этом время компиляции обычно растет динамически вместе с увеличением проекта, а скорость сборок часто повышается только за счёт обновления аппаратного обеспечения, что само по себе крайне дорогостоящий процесс.
На протяжении многих лет в Tuist вкладывали средства в решение этой проблемы, используя наиболее оригинальный и экономически эффективный подход с помощью фич Xcode.
📖 В этой статье разработчики из Tuist объясняют, что именно может замедлять скорость сборки проектов, какие шаги можно предпринять и почему превьюхи в SwiftUI могут отвалиться из-за проблем билд-системы самого Xcode.
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
Его можно использовать, например, для определения языка, поиска сходства между фрагментами и т. д.
📖 В своей статье Артем Новичков рассматривает особенности использования фреймворка, приводит примеры и показывает возможное применение с использованием MeshGradient (в канале есть несколько разборов).
🛠 Код примера доступен на GitHub.
Please open Telegram to view this post
VIEW IN TELEGRAM
This media is not supported in your browser
VIEW IN TELEGRAM
Реализация поисковых подсказок в SwiftUI
🔎 Модификатор
В сочетании с отслеживанием истории поиска можно создать интуитивно понятный интерфейс, который поможет пользователям быстро найти то, что они ищут (и легко вернуться к ранее просмотренным элементам).
📖 В этом материале рассказано, как внедрить такую фичу в своё приложение поэтапно:
1️⃣ Реализация фильтрации поиска в режиме реального времени.
2️⃣ Внедрение подсказок.
3️⃣ Отслеживание истории поиска.
4️⃣ Создание удобной навигации.
😃 iOS Dev
🔎 Модификатор
searchSuggestions(_:)
- это полезная фича, которая улучшает работу поиска в приложениях для iOS. В сочетании с отслеживанием истории поиска можно создать интуитивно понятный интерфейс, который поможет пользователям быстро найти то, что они ищут (и легко вернуться к ранее просмотренным элементам).
📖 В этом материале рассказано, как внедрить такую фичу в своё приложение поэтапно:
1️⃣ Реализация фильтрации поиска в режиме реального времени.
2️⃣ Внедрение подсказок.
3️⃣ Отслеживание истории поиска.
4️⃣ Создание удобной навигации.
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
Каждый декабрь Эрик Вастл публикует Advent of Code — увлекательный набор заданий по написанию алгоритмов.
Каждый день с 1 по 25 декабря публикуется по одной задаче.
Задачи появляются постепенно, начиная с самых простых и постепенно усложняются.
А на скриншоте несколько советов, как упростить решение задач, используя Swift Algorithms.
Please open Telegram to view this post
VIEW IN TELEGRAM
This media is not supported in your browser
VIEW IN TELEGRAM
Создание кастомного Segmented Control в SwiftUI
Хотя многие примеры модификатора
📖 Наталья Панферова в своем блоге рассказывает о простом способе использования этого модификатора для создания собственного компонента со слайд-анимацией.
😃 iOS Dev
Хотя многие примеры модификатора
matchedGeometryEffect()
посвящены анимации, он может применяться и в других контекстах, например для создания своих контролов. 📖 Наталья Панферова в своем блоге рассказывает о простом способе использования этого модификатора для создания собственного компонента со слайд-анимацией.
Please open Telegram to view this post
VIEW IN TELEGRAM
Растягивание аудиофайла до нужной длины в Swift
Такая фича может быть полезной для устранения проблем синхронизации (например, при переводе исходного файла и генерации субтитров).
📖 Том Локхорст и Матейс Кадейк рассказывают, почему комбинации AVMutableComposition и AVAudioUnitTimePitch недостаточно. И описывают способ с дублированием конкретных фрагментов аудио в рассчитанных точках.
В рамках хакатона от RevenueCat я делал небольшую утилиту для генерации сабов, поэтому данный подход может оказаться весьма полезным. Да и для пополнения пула знаний решение довольно любопытное.
🛠 Код примера доступен на GitHub.
😃 iOS Dev
Такая фича может быть полезной для устранения проблем синхронизации (например, при переводе исходного файла и генерации субтитров).
📖 Том Локхорст и Матейс Кадейк рассказывают, почему комбинации AVMutableComposition и AVAudioUnitTimePitch недостаточно. И описывают способ с дублированием конкретных фрагментов аудио в рассчитанных точках.
В рамках хакатона от RevenueCat я делал небольшую утилиту для генерации сабов, поэтому данный подход может оказаться весьма полезным. Да и для пополнения пула знаний решение довольно любопытное.
🛠 Код примера доступен на GitHub.
Please open Telegram to view this post
VIEW IN TELEGRAM
Создание клона приложения Messages с помощью SwiftUI
📖 В статье автор делится своим подходом к вёрстке списка чатов, выборе аттачей и затрагивает особенности реализации баббла сообщений с помощью Path.
А посмотреть на реализацию эффекта отклеивания, как в нативном приложении, можно в этом посте.
😃 iOS Dev
📖 В статье автор делится своим подходом к вёрстке списка чатов, выборе аттачей и затрагивает особенности реализации баббла сообщений с помощью Path.
А посмотреть на реализацию эффекта отклеивания, как в нативном приложении, можно в этом посте.
Please open Telegram to view this post
VIEW IN TELEGRAM