iOS Dev
Відкрити в Telegram
👨💻Автор: Виктор Грушевский (@Viktorianec) ⚒️ База: https://boosty.to/ios_dev | 🤖 @iOSIQBot | https://iosiq.ru 🍏Канал об iOS-разработке, алгоритмах и архитектурах ⭐️ Подготовка к собесам ⭐️ Код. Много кода. #ios #mobile #swift
Показати більше8 003
Підписники
-124 години
+457 днів
+7630 день
Архів дописів
8 003
Холодный и тёплый запуск приложения — о чём речь?
Для начала пара слов о том, что такое «активация приложения». Она происходит, когда пользователь нажимает на иконку или иным образом возвращается в ваше приложение.
ℹ️ В iOS активация может быть либо запуском (
launch), либо возобновлением (resume).
Launch — начало процесса, а resume — это когда в вашем приложении уже есть активный процесс, даже если он приостановлен.
Resume, как правило, намного быстрее, и работа по оптимизации запуска и возобновления отличается. В macOS система, например, не завершает ваш процесс в рамках обычного использования.
Что же такое холодный и тёплый запуски?
Активация вашего приложения значительно зависит от предыдущих действий на устройстве.
Например, в iOS, если вы свайпаете до хоумскрина и сразу же снова входите в приложение, то получите самую быструю возможную активацию. Вероятнее всего, это будет resume.
Когда система определяет, что нужен запуск, это обычно называют «теплым запуском».
В iOS ваше приложение обычно вытесняется из памяти, чтобы предоставить foreground-приложению больше ресурсов.
Фреймворки также могут потребовать повторного запуска. Этот сценарий или запуск сразу после загрузки часто называют «холодным запуском».
Более корректно размышлять о тёплом и холодном запусках как о спектре.
Многое зависит и от состояния девайса, и именно из-за этого спектра тестирование в различных условиях необходимо для прогнозирования производительности в реальном мире.
📺 Для большего погружения рекомендую это видео с WWDC.
@iOS Dev8 003
Я всё-таки принял участие в конкурсе Telegram, но к сожалению, остался за чертой призёров. Ниже мои мысли по поводу конкурса.
Часть первая или что сделано
Реализовал расчёт контрольных точек в фоновом режиме для плавных скруглений и собственно расчёта скорости (ширины линии).
Собственный colorpicker (с цветами, кастомными слайдерами и так далее). Плюс магнифаер (когда увеличиваем объект под пальцем, условно, и выбираем оттуда цвет).
Карандаш сделан с помощью текстуры и cashapelayer, по факту это маска, которой происходит отрисовка.
Есть размытие, при этом не смешное для последнего слоя, а для всех в стэке. И очистка тоже.
Реализовал текстовый редактор с помощью catextlayer и кучи сложных моментов (как мне показалось). Типа отрисовка переходов между строками и скруглений (layoutmanager и кто с ним работал, поймёт о чём речь).
Адски страдал над анимацией карандашей и таймингов (ну чтобы они все нормально скрывались и увеличивался выбранный). Ах да, там же ещё ширина выбранного инструмента (толщина)... Это дополнительный элемент на объекте карандаша, ну и очень много всяких мелочей чисто по анимациям.
Undo manager можно было пилить с помощью системного, но я бы по времени не уложился. Поэтому по факту добавляется/удаляется последний слой (и всё на слоях).
Запилил сохранение изменений и с видео тоже. Думаю, жюри даже не посмотрело (но кто знает).
Ну и множество всего, кроме этого.
Часть вторая, что сказали жюри.
Конкурсное задание не выполнено, работа над приложением не окончена.
Приложение не соответствует минимальным требованиям, предусмотренным условиями конкурсного задания.
Текущая реализация приложения не обеспечивает пользователю возможность отрисовки высококачественной, плавной, четкой линии – при отрисовке линия появляется с задержкой, рывком.
Часть третья, что думаю я.
Работ было очень много, срезали, если линия не рисуется мгновенно.
Финал.
Конечно, я немного разочарован таким итогом. Но в целом опыта у меня прибавилось, и когда-нибудь, надеюсь, мне всё это пригодится.
8 003
Невозможная отрисовка элементов в сетках на SwiftUI: код и примеры
Пусть в канале я практически всегда рассказываю о приёмах в UIKit, но в редких случаях хочется показать и то, что можно делать на SwiftUI.
📖 В этой статье рассматриваются основы, а затем автор выходит за рамки обычных сеток с однородными строками и столбцами.
Рассказывается, как получить информацию о лэйауте, а также создаётся специальный тип грида (как на гифке), в котором ячейка может охватывать область двух или более ячеек.
Если вы уже знакомы с тем, как работают сетки, и хотите перейти к самым сложным темам, можно сразу перейти к разделу «Невозможное начинается».
@iOS Dev
8 003
Apple Wallet: поддерживаемые типы штрих-кодов и обходные пути
К сожалению, Apple Wallet поддерживает только ограниченный набор типов штрих-кодов.
Конечно, поддержка более современных 2D-штрих-кодов лучше, но ограничения Apple ведут к сложностям.
📖 В этом материале автор делится найденной информацией об Apple Wallet и о том, почему программы членства/лояльности могут не предлагать добавить цифровую карту в Apple Wallet.
@iOS Dev
8 003
Разбор различных политик кэширования при работе с URLRequest в Swift
Когда дело доходит до связи с сервером в iOS, система предлагает различные стратегии кэширования для повышения производительности и снижения сетевого трафика.
В зависимости от выбранной политики поведение может и правила управления контентом изменяются.
📖 В этой статье описано немного больше деталей, чем в доке эпла и рассказывается, какую из политик лучше использовать в определённых условиях.
@iOS Dev
8 003
Архитектура приложения и композиция объектов в Swift
Композиция объектов — это основная концепция объектно-ориентированного программирования.
Объекты могут содержать другие объекты, иногда создавая сложные иерархии.
📖 В этой статье автор рассказывает, как спроектировать такую архитектуру.
На реальном примере вы увидите, что работать со сложной иерархией просто, а объекты и иерархии можно использовать повторно.
@iOS Dev
8 003
Заполнение столбцов градиентом с использованием Swift Charts
🆕 С новыми
Swift Charts очень легко создавать простые диаграммы для визуализации данных в наших приложениях.
Фреймворк также предоставляет множество вариантов настройки, чтобы наши диаграммы по-настоящему выделялись.
📖 В этом посте описано, как построить диаграмму для визуализации среднесуточной температуры для каждого месяца года.
Кроме этого, используется линейный градиент, чтобы подчеркнуть холодную и теплую температуру.
Важным моментом является то, что градиент растягивается сверху вниз на всю область графика, а не заполняет каждый столбец по отдельности для достижения желаемого эффекта.
@iOS Dev
Вже доступно! Дослідження Telegram за 2025 — головні інсайти року 
