Масштабное руководство по анимациям в SwiftUI
При первом знакомстве со SwiftUI можно только удивляться лёгкости, с которой возможно добиться различных анимационных эффектов.
❗️ Но после более глубокого рассмотрения можно заметить ряд сложностей.
Основная причина этих проблем — отсутствие детального понимания логики обработки анимации в SwiftUI.
📖 В этой статье можно узнать о тонкостях в механизме анимации и научиться создавать более продвинутые эффекты.
😃 iOS Dev
При первом знакомстве со SwiftUI можно только удивляться лёгкости, с которой возможно добиться различных анимационных эффектов.
Основная причина этих проблем — отсутствие детального понимания логики обработки анимации в SwiftUI.
📖 В этой статье можно узнать о тонкостях в механизме анимации и научиться создавать более продвинутые эффекты.
Please open Telegram to view this post
VIEW IN TELEGRAM
Собственная обёртка для SQLite с нуля
В своём канале я периодически пишу и делюсь вещами, которые можно назвать вечными, они будут всегда находиться на пике хайпа и важности в наших проектах (анимации, многопоточность, память).
Но иногда очень хочется рассказать и про необычные решения, которые может не так популярны и не собирают тысячи звёзд на Github, но за которыми стоит преодоление внутренних вызовов, порой сложных и обделённых вниманием публики.
Например, уверен, что многие использовали FMDB — возможно, самый известный враппер для SQLite.
А многие тир-1 компании пишут свои собственные для обработки кейсов, связаных с производительностью и даже шарят какие-то исследования.
Например, как ВК реализовал кэш сообщений (общая инфа и для iOS, и для Android). В своё время я вдохновлялся этим подходом, и мы даже что-то использовали в работе над продуктом нашей компании.
Так вот, сегодня я хочу пошарить работу Джека Морриса, который не только делает, но и рассказывает об этапах создания собственного враппера с поддержкой Swift Concurrency, а также о проблемах, с которыми сталкивается.
1️⃣ Обертка для Swift SQLite, часть 1: Создание соединения.
2️⃣ Часть 2: Привязка и получение значений.
3️⃣ Часть 3: Пул соединений.
😃 iOS Dev
В своём канале я периодически пишу и делюсь вещами, которые можно назвать вечными, они будут всегда находиться на пике хайпа и важности в наших проектах (анимации, многопоточность, память).
Но иногда очень хочется рассказать и про необычные решения, которые может не так популярны и не собирают тысячи звёзд на Github, но за которыми стоит преодоление внутренних вызовов, порой сложных и обделённых вниманием публики.
Например, уверен, что многие использовали FMDB — возможно, самый известный враппер для SQLite.
А многие тир-1 компании пишут свои собственные для обработки кейсов, связаных с производительностью и даже шарят какие-то исследования.
Например, как ВК реализовал кэш сообщений (общая инфа и для iOS, и для Android). В своё время я вдохновлялся этим подходом, и мы даже что-то использовали в работе над продуктом нашей компании.
Так вот, сегодня я хочу пошарить работу Джека Морриса, который не только делает, но и рассказывает об этапах создания собственного враппера с поддержкой Swift Concurrency, а также о проблемах, с которыми сталкивается.
1️⃣ Обертка для Swift SQLite, часть 1: Создание соединения.
2️⃣ Часть 2: Привязка и получение значений.
3️⃣ Часть 3: Пул соединений.
Please open Telegram to view this post
VIEW IN TELEGRAM
Разбор кнопок SwiftUI: создание и возможности кастомизации
Безусловно, кнопки играют важнейшую роль в мобильных приложениях, ведь это основной способ взаимодействия и навигации в наших продуктах для пользователей.
Нам доступно множество опций для настройки, а ещё возможностей создания такиех элементов с выпадающими списками и разными стилями.
📖 В этом посте объясняется,как красить кнопки как добавить кастомные стили и несколько анимаций.
😃 iOS Dev
Безусловно, кнопки играют важнейшую роль в мобильных приложениях, ведь это основной способ взаимодействия и навигации в наших продуктах для пользователей.
Нам доступно множество опций для настройки, а ещё возможностей создания такиех элементов с выпадающими списками и разными стилями.
📖 В этом посте объясняется,
Please open Telegram to view this post
VIEW IN TELEGRAM
Предотвращение гонок данных при использовании глобальных переменных
Мы всегда должны предотвращать потенциальные гонки данных, поскольку они могут привести к самым неожиданным крашам.
Если при использовании Swift 6 в build settings включить настройку concurrency, то можно получить соответствующие предупреждения.
📖 В этом материале автор рассказывает, как избежать таких ворнингов при обращении к глобальным переменным из любого контекста.
😃 iOS Dev
Мы всегда должны предотвращать потенциальные гонки данных, поскольку они могут привести к самым неожиданным крашам.
Если при использовании Swift 6 в build settings включить настройку concurrency, то можно получить соответствующие предупреждения.
📖 В этом материале автор рассказывает, как избежать таких ворнингов при обращении к глобальным переменным из любого контекста.
Please open Telegram to view this post
VIEW IN TELEGRAM
Погружение в управление памятью в Swift
Статей по управлению памятью в Swift не так много, но это одна из тем базы при любом собеседовании на позицию iOS-разработчика.
В нашем канале есть отличная подборка, которая будет пополнена и этим материалом.
📖 В своём посте Александр Дремов рассказывает о том, как работает управление памятью в Swift, и как модификаторы памяти:
😃 iOS Dev
Статей по управлению памятью в Swift не так много, но это одна из тем базы при любом собеседовании на позицию iOS-разработчика.
В нашем канале есть отличная подборка, которая будет пополнена и этим материалом.
📖 В своём посте Александр Дремов рассказывает о том, как работает управление памятью в Swift, и как модификаторы памяти:
unowned
и weak
- влияют на время жизни объекта.Please open Telegram to view this post
VIEW IN TELEGRAM
Изучение акторов и расширений протоколов
В этом посте автор решил поэкспериментировать с использованием Actors. И, как оказалось, существует несколько тонкостей, которые полезно знать.
📖 Более детально можно познакомиться здесь. Основные темы:
1️⃣ Как проверить ошибки в вашем многопоточном коде с помощью юнит-тестов.
2️⃣ Что может пойти не так, когда вы используете расширения протоколов на Actors.
3️⃣ Как безопасно использовать расширения протоколов на акторах.
😃 iOS Dev
В этом посте автор решил поэкспериментировать с использованием Actors. И, как оказалось, существует несколько тонкостей, которые полезно знать.
📖 Более детально можно познакомиться здесь. Основные темы:
1️⃣ Как проверить ошибки в вашем многопоточном коде с помощью юнит-тестов.
2️⃣ Что может пойти не так, когда вы используете расширения протоколов на Actors.
3️⃣ Как безопасно использовать расширения протоколов на акторах.
Please open Telegram to view this post
VIEW IN TELEGRAM
Реализация модульной архитектуры на примере Spotify
В каждом крупном проекте при увеличении количества требований архитектура приложения подвергается испытаниям.
Даже если используются модули, могут возникнуть проблемы с такими вещами, как классы с кучей параметров, неявные зависимости, нединамичность и увеличение времени сборки.
📺 В этом докладе объясняется, как практика модульной архитектуры Spotify может быть использована при росте проекта и как при этом попробовать сохранить тестируемость и скорость сборки независимо от размера.
😃 iOS Dev
В каждом крупном проекте при увеличении количества требований архитектура приложения подвергается испытаниям.
Даже если используются модули, могут возникнуть проблемы с такими вещами, как классы с кучей параметров, неявные зависимости, нединамичность и увеличение времени сборки.
📺 В этом докладе объясняется, как практика модульной архитектуры Spotify может быть использована при росте проекта и как при этом попробовать сохранить тестируемость и скорость сборки независимо от размера.
Please open Telegram to view this post
VIEW IN TELEGRAM
Разбор и разрешение мерж-конфликтов (продолжение работы с Git)
В большинстве случаев при понимании принципов работы Git вы уже будете готовы к подобным проблемам.
Но если вы видите это в первый или второй раз, то не всегда понятно, что делать в таких ситуациях.
📖 Вот тут можно познакомиться с основными причинами мерж-конфликтов и посмотреть на варианты их разрешения.
😃 iOS Dev
В большинстве случаев при понимании принципов работы Git вы уже будете готовы к подобным проблемам.
Но если вы видите это в первый или второй раз, то не всегда понятно, что делать в таких ситуациях.
📖 Вот тут можно познакомиться с основными причинами мерж-конфликтов и посмотреть на варианты их разрешения.
Please open Telegram to view this post
VIEW IN TELEGRAM
SwiftUI LazyVGrid и LazyHGrid: обзор возможностей
🤩 В отличие от обычных сеток,
Они отлично подходят, например, для галереи изображений (где необходимо представить данные в нескольких строках или столбцах, адаптируясь к различным размерам и ориентации экрана).
📖 В этом обзоре приводятся примеры использования и опции кастомизации.
😃 iOS Dev
LazyVGrid
и LazyHGrid
предлагают более динамичные и гибкие способы отображения контента. Они отлично подходят, например, для галереи изображений (где необходимо представить данные в нескольких строках или столбцах, адаптируясь к различным размерам и ориентации экрана).
📖 В этом обзоре приводятся примеры использования и опции кастомизации.
Please open Telegram to view this post
VIEW IN TELEGRAM
‼️ Альтернативные магазины приложений уже доступны для разработчиков!
Apple анонсировала долгожданные изменения в политике распространения приложений для ЕС.
Для разработчиков появились новые варианты распространения приложений и создания своих сторов.
Обещают более 600 новых API и расширенную аналитику, сниженную комиссию и новые способы оплаты внутри приложений.
🛠 Разработчики могут попробовать опции уже в бете 17.4, доступной сегодня.
💻 Для пользователей ЕС магазины будут доступны с марта 2024 года.
😃 iOS Dev
Apple анонсировала долгожданные изменения в политике распространения приложений для ЕС.
Для разработчиков появились новые варианты распространения приложений и создания своих сторов.
Обещают более 600 новых API и расширенную аналитику, сниженную комиссию и новые способы оплаты внутри приложений.
🛠 Разработчики могут попробовать опции уже в бете 17.4, доступной сегодня.
💻 Для пользователей ЕС магазины будут доступны с марта 2024 года.
Please open Telegram to view this post
VIEW IN TELEGRAM
В соответствии с изменениями DMA (законе о цифровых рынках), Apple расширит аналитику, доступную для приложений разработчиков как в ЕС, так и по всему миру.
Обещают, что через API App Store Connect будет доступно более 50 новых видов отчетов для анализа эффективности, среди которых:
1️⃣ Engagement — доп. инфа о количестве пользователей в App Store, которые взаимодействуют с приложением разработчика или делятся им.
2️⃣ Commerce — информация о загрузках, продажах и выручке, предзаказах и транзакциях In-App Purchase.
3️⃣ App usage — покажут новые отчёты о крашах, активных девайсах, инсталлах, удалениях и так далее.
4️⃣ Frameworks usage — о взаимодействии юзеров с с PhotoPicker, Widgets и CarPlay.
Кстати, появится Analytics Reports API для доступа к этим отчётам (может и я добавлю в Starly
📖 Дополнительные детали будут в марте.
Please open Telegram to view this post
VIEW IN TELEGRAM
Реализация эффектов ScrollView в iOS 17
🤩 В iOS 17 у нас появились новые возможности анимации.
Существует ряд атрибутов, которые можно изменять при скролле: размер, видимость, а ещё можно поработать со вращением элементов.
📖 Вот тут можно посмотреть, как работать с такими эффектами, но важно учитывать, что слишком большого количества анимаций следует избегать.
😃 iOS Dev
Существует ряд атрибутов, которые можно изменять при скролле: размер, видимость, а ещё можно поработать со вращением элементов.
📖 Вот тут можно посмотреть, как работать с такими эффектами, но важно учитывать, что слишком большого количества анимаций следует избегать.
Please open Telegram to view this post
VIEW IN TELEGRAM
This media is not supported in your browser
VIEW IN TELEGRAM
Шикарный эффект с использованием SpriteKit
Конечно, при должном умении Metal может удивить даже самых скилловых разработчиков, но и на SpriteKit можно делать красоту.
🤩 Как, например, это сделал Toni Lijic в гифке, которую вы видите.
🛠 Приятный бонус для подписчиков нашего канала — исходный код, где показано, как это можно настроить.
😃 iOS Dev
Конечно, при должном умении Metal может удивить даже самых скилловых разработчиков, но и на SpriteKit можно делать красоту.
🛠 Приятный бонус для подписчиков нашего канала — исходный код, где показано, как это можно настроить.
Please open Telegram to view this post
VIEW IN TELEGRAM
Так ли плохи курсы?
Ключевой момент любого обучения в том, какую долю времени и под какой нагрузкой вы занимаетесь самостоятельно.
В ВУЗе львиную долю процесса занимает поиск инструментов и то, как вы приспосабливаетесь к незнакомым глобальным направлениям (например, начертательная геометрия или электротехника).
Безусловно, социализация, да и в целом вырабатываемые навыки общения это огромный плюс по сравнению с курсами, которые чаще всего происходят в онлайне.
Несмотря на это, при значимой базе преподавателей и тех, кто непосредственно формирует учебный план, некоторые курсы могут дать фору по количеству концентрированного материала по сравнению с двумя (иногда и тремя) семестрами в университетах.
Основной минус при этом — отсутствие государственной аккредитации (очень часто), и обучение одной ветви навыков.
Поэтому, например, для того, чтобы узнать что-то новое в интересующем направлении — короткий спринт обучения будет с более высоким приоритетом.
И в этом случае выбор между курсами (в том числе онлайновыми) и 4 годами обучения (минимум) очевиден.
Однако если вы только в начале пути, даже средний ВУЗ будет лучшим вариантом, так как преподаватели там улучшали свою учебную программу годами, если не десятилетиями.
И даже программирование микроконтроллеров на ассемблере это не зря и не так страшно, так как именно в этом случае и можно понять, как многое работает под капотом на самом деле.
😃 iOS Dev • 🐱 Доступ к алгоритмам
Ключевой момент любого обучения в том, какую долю времени и под какой нагрузкой вы занимаетесь самостоятельно.
В ВУЗе львиную долю процесса занимает поиск инструментов и то, как вы приспосабливаетесь к незнакомым глобальным направлениям (например, начертательная геометрия или электротехника).
Безусловно, социализация, да и в целом вырабатываемые навыки общения это огромный плюс по сравнению с курсами, которые чаще всего происходят в онлайне.
Несмотря на это, при значимой базе преподавателей и тех, кто непосредственно формирует учебный план, некоторые курсы могут дать фору по количеству концентрированного материала по сравнению с двумя (иногда и тремя) семестрами в университетах.
Основной минус при этом — отсутствие государственной аккредитации (очень часто), и обучение одной ветви навыков.
Поэтому, например, для того, чтобы узнать что-то новое в интересующем направлении — короткий спринт обучения будет с более высоким приоритетом.
И в этом случае выбор между курсами (в том числе онлайновыми) и 4 годами обучения (минимум) очевиден.
Однако если вы только в начале пути, даже средний ВУЗ будет лучшим вариантом, так как преподаватели там улучшали свою учебную программу годами, если не десятилетиями.
И даже программирование микроконтроллеров на ассемблере это не зря и не так страшно, так как именно в этом случае и можно понять, как многое работает под капотом на самом деле.
Please open Telegram to view this post
VIEW IN TELEGRAM
This media is not supported in your browser
VIEW IN TELEGRAM
Интеграция интерактивных 2D/3D-объектов в iOS-приложение
В этой статье Степан из SimbirSoft разбирает, как можно реализовать интерактивный логотип целыми тремя способами (от плоского изображения к объёмному объекту).
Полезно ещё и потому, что здесь отличный пример работы с жестами.
🛠 Код проекта доступен здесь.
📖 Ознакомиться с материалом можно на хабре.
😃 iOS Dev
В этой статье Степан из SimbirSoft разбирает, как можно реализовать интерактивный логотип целыми тремя способами (от плоского изображения к объёмному объекту).
Полезно ещё и потому, что здесь отличный пример работы с жестами.
🛠 Код проекта доступен здесь.
📖 Ознакомиться с материалом можно на хабре.
Please open Telegram to view this post
VIEW IN TELEGRAM
Во втором полугодии 2023 года зарплаты выросли в большей части языков программирования.
При этом, для Swift-разработчиков в медиане всё осталось по-старому, произошло только незначительное снижение на 2%, до 245 000 ₽.
В среднем больше всего в компаниях платят в Авито (медиана 325 000 ₽), в пятёрке также Лаборатория Касперского и VK.
📖 Больше аналитики доступно здесь.
⏳ А вот тут можно сравнить размеры зарплат полугодовой давности.
Please open Telegram to view this post
VIEW IN TELEGRAM
Пока сообщество обсуждает новый язык пикл (ему в будущем ещё будет уделено должное внимание) и особенности Vision Pro, я хочу рассказать о действительно крутой инновации, которая может кардинально изменить процесс создания скриншотов.
В общем, в бете Xcode 15.3 появилась опция создания скрина прямо в режиме превью (как же долго мы это ждали).
Для этого достаточно перейти в
Editor > Canvas > Export Preview Screenshot
(или можно скопировать напрямую, не верю, что Apple и это сделала). Супер-удобно (и да, сохранить можно сразу в нужном разрешении).Please open Telegram to view this post
VIEW IN TELEGRAM
Подробное описание диспетчеризации в Swift
Понимание, как Swift выполняет вызовы функций — один из необходимых навыков в нашей работе.
Как и следует из определения, Method Dispatch — это то, как программа выбирает, какие инструкции нужно выполнить при вызове метода, и это то, что происходит каждый раз, когда вызывается тот или иной метод.
Знание видов и характеристик важно для повышения производительности кода.
Поэтому хорошо бы разбираться в том, чем, например, отличается Static dispatch от Dynamic dispatch.
Кстати, диспетчеризация методов добавляет уникальности Swift: если большинство языков поддерживают несколько подходов к диспетчеризации, то Swift поддерживает их все (⚪️ ).
📖 Делюсь потрясающим разбором типов диспетчеризаций, примеров и отличий.
Из этой статьи вы также узнаете, зачем для Realm (которая сейчас называется Atlas Device SDK) для свойств объектов нужно добавлять
😃 iOS Dev • 🐱 Доступ к алгоритмам
Понимание, как Swift выполняет вызовы функций — один из необходимых навыков в нашей работе.
Как и следует из определения, Method Dispatch — это то, как программа выбирает, какие инструкции нужно выполнить при вызове метода, и это то, что происходит каждый раз, когда вызывается тот или иной метод.
Знание видов и характеристик важно для повышения производительности кода.
Поэтому хорошо бы разбираться в том, чем, например, отличается Static dispatch от Dynamic dispatch.
Кстати, диспетчеризация методов добавляет уникальности Swift: если большинство языков поддерживают несколько подходов к диспетчеризации, то Swift поддерживает их все (
📖 Делюсь потрясающим разбором типов диспетчеризаций, примеров и отличий.
Из этой статьи вы также узнаете, зачем для Realm (которая сейчас называется Atlas Device SDK) для свойств объектов нужно добавлять
@objc dynamic
.Please open Telegram to view this post
VIEW IN TELEGRAM
Делегирование в Swift: определение и примеры
Паттерн «делегат» уже давно занимает одно из важнейших мест на платформах Apple.
Делегирование используется для всего, начиная от обработки событий таблицы с помощью
Основная цель паттерна — позволить объекту общаться со своим владельцем в свободном (можно сказать, что отсоединённом) виде.
Не требуя от объекта знать конкретный тип его владельца, мы можем писать код, который гораздо проще повторно использовать и поддерживать.
Хотя это довольно простая в использовании концепция, у новичков могут быть вопросы по использованию.
📖 Рекомендую ознакомиться с этой статьёй, чтобы узнать больше о примерах использования (и возможных минусах).
😃 iOS Dev • 🐱 Доступ к алгоритмам
Паттерн «делегат» уже давно занимает одно из важнейших мест на платформах Apple.
Делегирование используется для всего, начиная от обработки событий таблицы с помощью
UITableViewDelegate
и заканчивая изменением поведения кэша с помощью NSCacheDelegate
. Основная цель паттерна — позволить объекту общаться со своим владельцем в свободном (можно сказать, что отсоединённом) виде.
Не требуя от объекта знать конкретный тип его владельца, мы можем писать код, который гораздо проще повторно использовать и поддерживать.
Хотя это довольно простая в использовании концепция, у новичков могут быть вопросы по использованию.
📖 Рекомендую ознакомиться с этой статьёй, чтобы узнать больше о примерах использования (и возможных минусах).
Please open Telegram to view this post
VIEW IN TELEGRAM