Конечно, у большинства ещё не начались рабочие дни, но часть из нас понемногу вкатывается в новый отрезок.
В этом году есть несколько вещей, на которых хотелось бы сконцентрироваться детальнее:
1. Развитие контента будет не только вширь, но и вглубь. Постараюсь расставлять акценты на том, что полезно в нашей работе.
2. Приоритеты как всегда будут на качество постов, статей, исследований и советов, а не на их количество.
3. Максимально полезные вещи в базе знаний.
4. Новые проекты и развитие приложения (или даже приложений).
И поскольку это только начало года, возможно вы сами планируете все-таки начать или довести какой-то проект из своих до конца. Мне кажется, это лучшее время для старта.
Делюсь небольшой подборкой постов из канала (в том числе для тех, кто присоединился к нам недавно):
🔗 Мой опыт разработки пет-проектов - советы, ошибки, идеи.
🔗 Декомпозиция задачи или почему добавить одно поле это приключение НЕ на одну минуту?
🔗 Инструментарий. Полезные советы при работе с Xcode, терминалом и симулятором
🔗 Есть ли место творчеству в разработке?
⭐️ А для более глубокого и вдумчивого изучения сложных тем (и подготовки к собеседованиям с любой из сторон) вы можете подписаться на бусти и в телеграм (действует вводное предложение).
😃 iOS Dev
В этом году есть несколько вещей, на которых хотелось бы сконцентрироваться детальнее:
1. Развитие контента будет не только вширь, но и вглубь. Постараюсь расставлять акценты на том, что полезно в нашей работе.
2. Приоритеты как всегда будут на качество постов, статей, исследований и советов, а не на их количество.
3. Максимально полезные вещи в базе знаний.
4. Новые проекты и развитие приложения (или даже приложений).
И поскольку это только начало года, возможно вы сами планируете все-таки начать или довести какой-то проект из своих до конца. Мне кажется, это лучшее время для старта.
Делюсь небольшой подборкой постов из канала (в том числе для тех, кто присоединился к нам недавно):
🔗 Мой опыт разработки пет-проектов - советы, ошибки, идеи.
🔗 Декомпозиция задачи или почему добавить одно поле это приключение НЕ на одну минуту?
🔗 Инструментарий. Полезные советы при работе с Xcode, терминалом и симулятором
🔗 Есть ли место творчеству в разработке?
Please open Telegram to view this post
VIEW IN TELEGRAM
This media is not supported in your browser
VIEW IN TELEGRAM
YUI — галерея плавных интерактивных переходов на UIKit
Хотя SwiftUI отлично подходит для быстрого создания интерфейсов и приложений, однотипные контролы повторяют друг друга, и впечатление от использования может оказаться далеко не самым приятным (особенно учитывая отзывчивость интерфейса).
Разработчик поделился репозиторием, в котором попытался воссоздать несколько классических эффектов, которые мы можем видеть в популярных приложениях.
Будет полезно взглянуть на использование
🛠 Ссылка на репозиторий с эффектами и описанием подхода доступна вот здесь.
✅ Больше подходов к реализации анимаций в базе.
😃 iOS Dev
Хотя SwiftUI отлично подходит для быстрого создания интерфейсов и приложений, однотипные контролы повторяют друг друга, и впечатление от использования может оказаться далеко не самым приятным (особенно учитывая отзывчивость интерфейса).
Разработчик поделился репозиторием, в котором попытался воссоздать несколько классических эффектов, которые мы можем видеть в популярных приложениях.
Будет полезно взглянуть на использование
UIViewControllerTransitioningDelegate
/UIViewControllerInteractiveTransitioning
и UIPercentDrivenInteractiveTransition
.🛠 Ссылка на репозиторий с эффектами и описанием подхода доступна вот здесь.
Please open Telegram to view this post
VIEW IN TELEGRAM
Пора ли переходить на Swift 6 в 2025 году?
Donny Wals задаётся этим вопросом и приводит несколько важных моментов, на которые стоит обратить внимание.
И хотя ответ для каждого зависит от множества переменных: проект, над которым вы работаете, команда, с которой вы работаете, и знания Swift Concurrency в целом, Донни сосредоточился на разборе проблем и существующих вызовах.
📖 Полностью статью можно прочесть здесь.
Краткие выводы, стоит ли переходить на Swift 6:
1. Да, если у вас небольшая кодовая база.
2. Да, если вы хорошо разбираетесь в концепциях параллелизма (и у вас достаточно времени).
О существующих проблемах можно посмотреть и в докладе из этого поста.
😃 iOS Dev
Donny Wals задаётся этим вопросом и приводит несколько важных моментов, на которые стоит обратить внимание.
И хотя ответ для каждого зависит от множества переменных: проект, над которым вы работаете, команда, с которой вы работаете, и знания Swift Concurrency в целом, Донни сосредоточился на разборе проблем и существующих вызовах.
📖 Полностью статью можно прочесть здесь.
Краткие выводы, стоит ли переходить на Swift 6:
2. Да, если вы хорошо разбираетесь в концепциях параллелизма (и у вас достаточно времени).
О существующих проблемах можно посмотреть и в докладе из этого поста.
Please open Telegram to view this post
VIEW IN TELEGRAM
Зачем нужен init(coder:) для View Controllers?
Наверняка, если вы только недавно начали работать с UIKit или просто перешли к верстке кодом, то могли встретить ошибку
Эта ошибка обычно возникает при создании контроллеров с помощью кода (а не с XIB или, если кто-то использует до сих пор, storyboard).
Так почему это происходит?
Класс UIViewController соответствует протоколу NSCoding.
Поскольку мы создаём его программно, то должны также соответствовать его протоколу, который включает реализацию необходимого инициализатора, даже если мы не используем его напрямую.
На примере Storyboard: в рантайме UIStoryboard создает контроллер программно, кодируя его как раз с помощью протокола NSCoding.
Storyboard передает архив данных контроллера в метод init(coder:), который затем и использует эти данные для воссоздания состояния контроллера.
📖 Понятный и несложный разбор доступен в этой статье.
😃 iOS Dev
Наверняка, если вы только недавно начали работать с UIKit или просто перешли к верстке кодом, то могли встретить ошибку
'required' initializer 'init(coder:)' must be provided by subclass of 'UIViewController'
Эта ошибка обычно возникает при создании контроллеров с помощью кода (а не с XIB или, если кто-то использует до сих пор, storyboard).
Так почему это происходит?
Класс UIViewController соответствует протоколу NSCoding.
Поскольку мы создаём его программно, то должны также соответствовать его протоколу, который включает реализацию необходимого инициализатора, даже если мы не используем его напрямую.
На примере Storyboard: в рантайме UIStoryboard создает контроллер программно, кодируя его как раз с помощью протокола NSCoding.
Storyboard передает архив данных контроллера в метод init(coder:), который затем и использует эти данные для воссоздания состояния контроллера.
📖 Понятный и несложный разбор доступен в этой статье.
Please open Telegram to view this post
VIEW IN TELEGRAM
Работа с Lists в SwiftUI: виды, примеры и кастомизация
Это один из наиболее часто используемых элементов при создании приложений (и практически повсеместно используются при реализации навигации).
Нам доступны различные стили и опции (цвет фона, поддержка возможности выбора и добавление секций).
📖 В этом материале разобраны некоторые варианты верстки и показано на примерах, как можно применять кастомизацию.
😃 iOS Dev
Это один из наиболее часто используемых элементов при создании приложений (и практически повсеместно используются при реализации навигации).
Нам доступны различные стили и опции (цвет фона, поддержка возможности выбора и добавление секций).
📖 В этом материале разобраны некоторые варианты верстки и показано на примерах, как можно применять кастомизацию.
Please open Telegram to view this post
VIEW IN TELEGRAM
Для чего нужен
Многие функции возвращают значения, но иногда для нас совершенно неважно, какое значение прилетает. В таком случае хочется игнорировать эти предупреждения (например, при логировании).
В таком случае может пригодиться
📖 Вы можете взглянуть на два примера использования: здесь и в этой статье.
😃 iOS Dev
@discardableResult
в Swift?Многие функции возвращают значения, но иногда для нас совершенно неважно, какое значение прилетает. В таком случае хочется игнорировать эти предупреждения (например, при логировании).
В таком случае может пригодиться
@discardableResult
. Но если значения будут нужны чаще, то возможно эта практика не будет оптимальной (тогда лучше использовать нижнее подчёркивание _
, чтобы отключить назойливый ворнинг).📖 Вы можете взглянуть на два примера использования: здесь и в этой статье.
Please open Telegram to view this post
VIEW IN TELEGRAM
Apple напомнили, что начиная с 17 февраля 2025 года приложения без статуса трейдера будут удаляться из App Store в странах Европейского Союза до тех пор, пока статус трейдера не будет предоставлен и, при необходимости, подтвержден.
Please open Telegram to view this post
VIEW IN TELEGRAM
This media is not supported in your browser
VIEW IN TELEGRAM
Создание стикеров в Swift с помощью удаления фона
📖 В этой статье можно узнать, как повторить системный эффект и создать стикер с помощью Vision и двух основных классов:
🛠 Код проекта доступен на GitHub.
А в этом посте можно посмотреть, как реализовать эффект переливающегося стикера на Metal+Swift.
✅ В базе знаний есть и другие нетривиальные анимации и реализации эффектов.
😃 iOS Dev
📖 В этой статье можно узнать, как повторить системный эффект и создать стикер с помощью Vision и двух основных классов:
VNImageRequestHandler
и VNGenerateForegroundInstanceMaskRequest
.🛠 Код проекта доступен на GitHub.
А в этом посте можно посмотреть, как реализовать эффект переливающегося стикера на Metal+Swift.
Please open Telegram to view this post
VIEW IN TELEGRAM
Создание универсального компонента для меню в SwiftUI
📖 Автор рассказывает о плюсах создания переиспользуемых компонентов на примере меню с действиями и показывает, как его можно кастомизировать.
В частности, затронуты следующие аспекты:
🔘 Прототипирование.
🔘 Кастомные view modfiers (как создавать и интегрировать).
🔘 Работа с View Builders (и как отделять вью от бизнес-логики).
🔘 Стили для вью (и их настройка).
😃 iOS Dev
📖 Автор рассказывает о плюсах создания переиспользуемых компонентов на примере меню с действиями и показывает, как его можно кастомизировать.
В частности, затронуты следующие аспекты:
🔘 Прототипирование.
🔘 Кастомные view modfiers (как создавать и интегрировать).
🔘 Работа с View Builders (и как отделять вью от бизнес-логики).
🔘 Стили для вью (и их настройка).
Please open Telegram to view this post
VIEW IN TELEGRAM
This media is not supported in your browser
VIEW IN TELEGRAM
Отладка приложения при ограниченном доступе
Bryce Bostwick, исследования которого часто можно встретить в нашем канале (про анимированную иконку приложения, например), поделился любопытным взглядом на возможность отладки внешнего приложения.
Вводные данные приложения:
1. Блокирует подключение дебаггера.
2. Закрывается, если вы пытаетесь внедрить какой-либо код.
3. Крашит телефон, если на нём есть джейлбрейк.
📖 Что из этого получилось, можно посмотреть в этом видео или прочитать в статье.
Будет полезно разработчикам защищённых приложений (в том числе, чтобы проверить ещё раз, готов ли ваш продукт к таким сценариям).
😃 iOS Dev
Bryce Bostwick, исследования которого часто можно встретить в нашем канале (про анимированную иконку приложения, например), поделился любопытным взглядом на возможность отладки внешнего приложения.
Вводные данные приложения:
1. Блокирует подключение дебаггера.
2. Закрывается, если вы пытаетесь внедрить какой-либо код.
3. Крашит телефон, если на нём есть джейлбрейк.
📖 Что из этого получилось, можно посмотреть в этом видео или прочитать в статье.
Будет полезно разработчикам защищённых приложений (в том числе, чтобы проверить ещё раз, готов ли ваш продукт к таким сценариям).
Please open Telegram to view this post
VIEW IN TELEGRAM
This media is not supported in your browser
VIEW IN TELEGRAM
Эксперименты с Metal - шейдер, имитирующий портал
Под капотом используется комбинация шума + emission shader.
📖 У celestialmaze в твиттере можно чекнуть, какие параметры можно заюзать для дальнейшей кастомизации.
Периодически я пробую силы в адаптации известных решений (на любом языке программирования или с помощью формул) на Swift.
Например:
🔗 Warp-эффект на metal-шейдере
🔗 Beauty infinite loop
🔗 Огненный шейдер
Код всех реализаций есть💰 тут и ⭐️ тут.
😃 iOS Dev
Под капотом используется комбинация шума + emission shader.
📖 У celestialmaze в твиттере можно чекнуть, какие параметры можно заюзать для дальнейшей кастомизации.
Периодически я пробую силы в адаптации известных решений (на любом языке программирования или с помощью формул) на Swift.
Например:
Код всех реализаций есть
Please open Telegram to view this post
VIEW IN TELEGRAM
This media is not supported in your browser
VIEW IN TELEGRAM
Исследование создания анимаций в Spotify
📖 В техническом блоге можно узнать, как именно генерировались анимации итогов года за последние несколько лет.
В частности, почему от стандартной комбинации трансформа+bezier path они перешли на сочетание традиционных анимаций вместе с Lottie.
🎶 Например, для «Ауры аудио» пару лет назад сопоставлялась частота прослушивания того или иного жанра с интенсивностью цвета. В другом примере базой анимации служили координаты на карте, которые отражают местоположение предпочтений пользователя в прослушивании.
А начиная с 2023 года разработчики учли сочетание нативной анимации и Lottie. Нативная анимация отвечает за визуализацию данных и взаимодействие, а Lottie — за визуализацию брендов и анимацию с большим количеством кейфреймов, не требующих дополнительной параметризации.
😃 iOS Dev
📖 В техническом блоге можно узнать, как именно генерировались анимации итогов года за последние несколько лет.
В частности, почему от стандартной комбинации трансформа+bezier path они перешли на сочетание традиционных анимаций вместе с Lottie.
А начиная с 2023 года разработчики учли сочетание нативной анимации и Lottie. Нативная анимация отвечает за визуализацию данных и взаимодействие, а Lottie — за визуализацию брендов и анимацию с большим количеством кейфреймов, не требующих дополнительной параметризации.
Please open Telegram to view this post
VIEW IN TELEGRAM
Глоссарий по Swift Concurrency
Matt Massicotte, выпуск с которым был в нашем канале, решил собрать в одном месте все самые важные термины Swift Concurrency.
📖 По каждому из них (не только по
А проверить себя на серии вопросов и узнать, какие могут быть подводные камни при использовании, вы можете💰 в базе и ⭐️ телеграме.
😃 iOS Dev
Matt Massicotte, выпуск с которым был в нашем канале, решил собрать в одном месте все самые важные термины Swift Concurrency.
📖 По каждому из них (не только по
actor/async
, но и, например, по @unchecked
, for-await
) можно получить небольшую справку, что это такое, для чего используется и в каком пропозале он был реализован.А проверить себя на серии вопросов и узнать, какие могут быть подводные камни при использовании, вы можете
Please open Telegram to view this post
VIEW IN TELEGRAM
Понимание и повторение
Если решать одно и то же на протяжении многих дней в надежде на то, что область знаний изменится, то максимум, чего можно достигнуть — повторения теглайна из третьей части Far Cry.
Навык понимания, а не повторения увиденного — один из ценнейших не только в разработке, но и в жизни. Можно прорешать 1000 задач на одну тему, но если не научиться видеть паттерны применения, то, к глубочайшему сожалению, роста как специалиста не произойдёт.
Поэтому мне импонирует стиль профессионалов, стремящихся к practice first: стоит отталкиваться от задачи, от целей, от необходимости оптимизации, и только после этого следовать за алгоритмической составляющей.
Понимание, для чего нужно ускорить тот или иной кусок кода выгодно отличает любого специалиста.
На собеседованиях, которые мне доверяют проводить в компании, я часто слышу от кандидатов, что процессы отличаются в лучшую сторону. Чаще всего я не спрашиваю глубоко теорию, вместо этого, диалог формируется на основе уже решенного тестового задания и ветвится в сторону тех вещей, которые пригодятся в работе. Это совсем не означает, что знание теории не нужно, скорее наоборот, осознание человеком того, какая часть того или иного тестового задания не является достаточно быстрой или архитектурно выверенной, показывает возможность дальнейшего развития.
Важнее знать, почему стоит оптимизировать раздел, в котором происходят сотни обновлений в секунду, вместо того, чтобы сосредоточить усилия нескольких человек, а иногда и команд на вещах, тепловая карта которых не меняется на протяжении десятков версий. Это относится к проектам любого уровня и любой внутренней структуры.
Парадоксально, но хотя мы работаем по спринтам, процесс создания больших проектов — марафон. И хотя Фидиппид в итоге донёс благую весть до афинян, по одной из легенд, для этого он пожертвовал собой из-за слишком высокой загрузки. Именно поэтому важно разобрать задачу и понимать, на чём необходимо расставить акценты, чтобы справиться с дистанцией любого уровня.
Главное помнить, что правильно заданный вопрос это уже половина решения задачи.
😃 iOS Dev
Если решать одно и то же на протяжении многих дней в надежде на то, что область знаний изменится, то максимум, чего можно достигнуть — повторения теглайна из третьей части Far Cry.
Навык понимания, а не повторения увиденного — один из ценнейших не только в разработке, но и в жизни. Можно прорешать 1000 задач на одну тему, но если не научиться видеть паттерны применения, то, к глубочайшему сожалению, роста как специалиста не произойдёт.
Поэтому мне импонирует стиль профессионалов, стремящихся к practice first: стоит отталкиваться от задачи, от целей, от необходимости оптимизации, и только после этого следовать за алгоритмической составляющей.
Понимание, для чего нужно ускорить тот или иной кусок кода выгодно отличает любого специалиста.
На собеседованиях, которые мне доверяют проводить в компании, я часто слышу от кандидатов, что процессы отличаются в лучшую сторону. Чаще всего я не спрашиваю глубоко теорию, вместо этого, диалог формируется на основе уже решенного тестового задания и ветвится в сторону тех вещей, которые пригодятся в работе. Это совсем не означает, что знание теории не нужно, скорее наоборот, осознание человеком того, какая часть того или иного тестового задания не является достаточно быстрой или архитектурно выверенной, показывает возможность дальнейшего развития.
Важнее знать, почему стоит оптимизировать раздел, в котором происходят сотни обновлений в секунду, вместо того, чтобы сосредоточить усилия нескольких человек, а иногда и команд на вещах, тепловая карта которых не меняется на протяжении десятков версий. Это относится к проектам любого уровня и любой внутренней структуры.
Парадоксально, но хотя мы работаем по спринтам, процесс создания больших проектов — марафон. И хотя Фидиппид в итоге донёс благую весть до афинян, по одной из легенд, для этого он пожертвовал собой из-за слишком высокой загрузки. Именно поэтому важно разобрать задачу и понимать, на чём необходимо расставить акценты, чтобы справиться с дистанцией любого уровня.
Главное помнить, что правильно заданный вопрос это уже половина решения задачи.
Please open Telegram to view this post
VIEW IN TELEGRAM
А поделитесь книгами в комментариях, которые на ваш взгляд, необходимы для разработчика 🧠
Не только же банду четырёх читать.
При этом совсем необязательно это должна быть книга, напрямую связанная с IT (кругозор формируется благодаря широте взглядов).
Не только же банду четырёх читать.
При этом совсем необязательно это должна быть книга, напрямую связанная с IT (кругозор формируется благодаря широте взглядов).
SwiftUI и Firebase: создание приложения «Напоминания»
📖 В этом пошаговом туториале показано, как с нуля можно создать to-do приложение, используя SwiftUI и возможности Firebase.
Обучение разбито на следующие разделы:
1️⃣ Создание простого интерфейса (и пример MVVM-архитектуры)
2️⃣ Создание кастомизируемых компонентов
3️⃣ Подключение и работа с Firebase (настройка проекта и локальное тестирование)
4️⃣ Хранение данных в Cloud (настройка, обновление и удаление данных)
5️⃣ Dependency Injection (для разных частей приложения)
6️⃣ Аутентификация пользователей (анонимные аккаунты, регистрация через Apple и линк аккаунтов)
😃 iOS Dev
📖 В этом пошаговом туториале показано, как с нуля можно создать to-do приложение, используя SwiftUI и возможности Firebase.
Обучение разбито на следующие разделы:
1️⃣ Создание простого интерфейса (и пример MVVM-архитектуры)
2️⃣ Создание кастомизируемых компонентов
3️⃣ Подключение и работа с Firebase (настройка проекта и локальное тестирование)
4️⃣ Хранение данных в Cloud (настройка, обновление и удаление данных)
5️⃣ Dependency Injection (для разных частей приложения)
6️⃣ Аутентификация пользователей (анонимные аккаунты, регистрация через Apple и линк аккаунтов)
Please open Telegram to view this post
VIEW IN TELEGRAM
The System Design Primer — огромная коллекция ресурсов для создания сложных систем
Навык масштабируемых проектов приходит с опытом. Пожалуй, это одна из тех частей, которую без практики прокачать необычайно сложно.
Даже на собеседованиях, если вас просят спроектировать что-то, обычно не ожидают разбора структуры проекта на несколько уровней вглубь (либо это будет очень долгое собеседование, а не приключение на 15 минут).
Нашёл замечательный опенсорсный репозиторий (288 000 звёзд), в котором комьюнити не только разбирает сложные (и популярные) приложения, но и делится примерами для проектирования таких систем.
🛠 Фантастический ресурс на GitHub.
😃 iOS Dev
Навык масштабируемых проектов приходит с опытом. Пожалуй, это одна из тех частей, которую без практики прокачать необычайно сложно.
Даже на собеседованиях, если вас просят спроектировать что-то, обычно не ожидают разбора структуры проекта на несколько уровней вглубь (либо это будет очень долгое собеседование, а не приключение на 15 минут).
Нашёл замечательный опенсорсный репозиторий (288 000 звёзд), в котором комьюнити не только разбирает сложные (и популярные) приложения, но и делится примерами для проектирования таких систем.
🛠 Фантастический ресурс на GitHub.
Please open Telegram to view this post
VIEW IN TELEGRAM
📖 Apple открыла исходный код swift-build — движка, используемого в Xcode! По сути, с его помощью выполняется сборка проектов и пакетов Swift, а также работает Swift Playground.
Если проще, теперь любая компания может создать свой GUI в качестве замены стандартному Xcode.
Ждём возобновления разработки AppCode?
P.S. Уже выкатили анонс roadmap (и приглашение поучаствовать в развитии) на официальном сайте.
Please open Telegram to view this post
VIEW IN TELEGRAM