iOS Dev @iosdev Channel on Telegram

iOS Dev

@iosdev


🍏Канал об iOS-разработке, необычных подходах и решениях.
👨‍💻Автор: Виктор Грушевский (@Viktorianec)
Темы:
⭐️ Подготовка к собеседованиям.
⭐️ Архитектуры и алгоритмы.
⭐️ Код. Много кода.

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

#ios #mobile #swift

iOS Dev (Russian)

🍏Канал об iOS-разработке, необычных подходах и решениях. Автор: Виктор Грушевский (@Viktorianec) Темы: ⭐️ Подготовка к собеседованиям. ⭐️ Архитектуры и алгоритмы. ⭐️ Код. Много кода. База знаний: https://boosty.to/ios_dev #ios #mobile #swiftnniOS Dev - это канал для всех, кто интересуется миром iOS-разработки. Здесь вы найдете не только новые и необычные подходы к созданию приложений, но и практические советы от опытного автора Виктора Грушевского. В канале обсуждаются различные темы, начиная от подготовки к собеседованиям по iOS-разработке, до более глубоких изучений архитектур и алгоритмов. А если вам нужен пример кода, здесь также представлено много полезных примеров. Более подробную информацию и статьи вы можете найти в базе знаний по ссылке. Присоединяйтесь к каналу iOS Dev и узнавайте все о мобильной разработке на платформе iOS!

iOS Dev

20 Nov, 08:23


Есть ли место творчеству в разработке?

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

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

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

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

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

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

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

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

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

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

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

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

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

😃 iOS Dev

iOS Dev

19 Nov, 08:47


Подробное объяснение работы с Environment в SwiftUI

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

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

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

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

😃 iOS Dev

iOS Dev

18 Nov, 07:59


TextEditor в SwiftUI: возможности, ограничения и советы

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

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

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

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

😃 iOS Dev

iOS Dev

15 Nov, 09:13


Эффект переливающегося стикера на Metal+Swift

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

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

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

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

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

😃 iOS Dev

iOS Dev

14 Nov, 08:10


Обнаружение лиц на изображениях с помощью фреймворка Vision

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

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

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

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

😃 iOS Dev

iOS Dev

13 Nov, 07:28


Большое обновление App Store Connect — версия 2.0

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

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

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

😃 iOS Dev

iOS Dev

12 Nov, 13:24


Что такое краш в iOS: детальный разбор

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

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

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

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

😃 iOS Dev

iOS Dev

11 Nov, 15:09


Вакансия iOS-разработчика в VK Видео

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

Задачи, которые нужно будет решать:

🔘Разработка приложения ВКонтакте и VK Видео для iOS и tvOS.
🔘Создание важных инструментов: загрузчик и редактор видео.
🔘Участие во всех этапах разработки — от проектирования до запуска.

Что ждут от кандидата:

🔘Отличное знание Swift и платформы iOS в целом, уровня middle+ и выше.
🔘Опыт работы с Objective-C или готовность его изучить.
🔘Знание классических алгоритмов и структур данных.

🔗 Откликнуться можно здесь.

iOS Dev

11 Nov, 13:45


Реализация приложения для игры в шахматы на SwiftUI

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

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

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

😃 iOS Dev

iOS Dev

08 Nov, 07:39


Невозможно всё знать

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

Вкратце: весь объём знаний, всё, что придумало человечество на данный момент можно представить в виде круга. Всё, что есть — технологии, идеи и накопленный опыт внутри. И наша задача (тех, кто пытается создать что-то новое), это не выпрыгнуть из него, не изобрести телепорт или какую-то качественно новую технологию, а всего лишь добавить одну точку на окружности. Одну — за которую можно зацепиться всем другим исследователям, которые добавят свои маленькие точки, и дальше может пройти большое количество времени, но принцип станет понятным. С помощью таких маленьких шагов вперёд всегда можно видеть чуть большую картину, а это означает, что и большее количество перспектив.

В разработке также, особенно когда мы сталкиваемся с широким полем неизвестности.

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

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

В таком случае придётся искать (и создавать что-то новое). Со стороны для тестировщиков (или для заказчика проекта, или для вашего ПМ) это будет выглядеть, как просто ещё один решённый баг. Но для вас — это маленькая победа, помните о ней. Из таких решённых задач и будет складываться тот пул знаний, который в будущем позволит вам легче справиться с более сложными вещами.

Что-то всегда будет ломаться. Объём, нагрузка, требования, новые SDK, новые технологии будут заставлять настраивать проект напильником (по этой причине стоит помнить о подводных камнях сторонних зависимостей).

Знать всё невозможно.

Но хочется вспомнить о словах человека, который придумал соцсеть с миллиардом (уже двумя) человек:

«Move fast and break things» (двигайтесь быстро и ломайте вещи)

И если у вас ничего не ломается, то возможно, ваш проект развивается недостаточно быстро?

😃 iOS Dev

iOS Dev

07 Nov, 09:21


Создание адаптивной верстки в SwiftUI с использованим Layout-протокола

Комбинация UICollectionView и UICollectionViewFlowLayout в UIKit дает много гибкости и контроля для создания любых нужных нам макетов, но вот в SwiftUI с этим могут быть сложности.

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

📖 В этом материале разбирается подход с использованием протокола Layout (доступного с 16 iOS).

😃 iOS Dev

iOS Dev

06 Nov, 08:34


Как запретить создание скриншотов для важных экранов в Swift

Для этого пригодится элегантное решение с применением свойства isSecureTextEntry с помощью кастомного модификатора.

📖 В этой статье автор делится необходимыми шагами с примером кода.

😎 Кстати, способ актуален и для записи видео с экрана девайса.

⭐️ Больше примеров и необычных решений здесь.

😃 iOS Dev

iOS Dev

05 Nov, 08:32


Шифр Виженера или приключение на одну минуту

Наверняка вы знаете про шифр Цезаря (даже если никогда не думали про Римскую империю).

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

Для шифрования нужню юзать таблицу алфавитов (она же tabula recta или квадрат Виженера).

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

Таким образом, в таблице получится 26 различных шифров Цезаря.

🚀 Но давайте к делу!

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

В канале я спрятал ключевое слово, подсказка — этот пост.

Используйте ключевое слово к этой строке: qck_fvzy_14_UYxpuF и вы получите код билета на конференцию.

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

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

😃 iOS Dev

iOS Dev

31 Oct, 09:22


🔥 Огненный шейдер на Swift (нативное решение на Metal)

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

В этом году под 31 октября я решил повторить опыт, уже с использованием Metal, и вышло, как мне кажется, гораздо лучше.

На видео не используются никакие текстуры, только натив.

Описал весь опыт, источники и привёл пример кода на Swift эксклюзивно здесь.

😃 iOS Dev

iOS Dev

30 Oct, 09:46


Реализация размытия экрана в режиме многозадачности

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

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

😃 iOS Dev

iOS Dev

29 Oct, 10:36


Работа с таймерами в Swift

Таймеры в Swift используются постоянно: для планирования отложенных или повторяющихся задач.

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

🔘 Зачем вообще нужны таймеры в Swift.
🔘 Повторяющиеся (и не повторяющиеся) таймеры.
🔘 Как запланировать повторяющиеся задачи.
🔘 Что такое tolerance и как runloop modes влияют на работу таймера.

📖 В канале есть ещё один неплохой разбор таймеров (ведь как известно, даже Apple допускает ошибки).

😃 iOS Dev

iOS Dev

28 Oct, 09:49


Комплексное руководство по работе с KeyPath в Swift

В мире Swift KeyPath - это мощная, но часто недооцениваемая функция.

Цель этой статьи — глубоко изучить функциональные особенности KeyPath, раскрыть возможности и помочь использовать её в процессе разработки.

📖 В материале описаны свойства, приведены примеры как читать/устанавливать значения через KeyPath и использовать KeyPath в качестве параметра.

5 вещей, которые вы могли не знать о KeyPaths можно проверить в этом посте.

😃 iOS Dev

iOS Dev

25 Oct, 07:26


Анимация переходов между view в SwiftUI

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

При смене интерфейса визуально подчеркивается связь между различными элементами пользовательского интерфейса.

В качестве примеров, где используются такие анимации, можно привести:

🔘Навигация между экранами.
🔘Добавление (или удаление) элементов из списка.
🔘Показ модальных вьюх.

📖 Разбор создания таких эффектов (и их комбинаций) можно почитать в этой статье.

🔗В канале есть ещё и пример таких переходов с использованием Metal.

😃 iOS Dev

iOS Dev

24 Oct, 08:35


🤩 Image Playground в действии

Пока мы ждём выкатки API для разработчиков, некоторые счастливчики на бете успели потестить функциональность.

Похвалитесь, кто был в листе ожидания, получили ли доступ? В Европе пока все эти фичи (даже в бете) недоступны.

😃 iOS Dev

iOS Dev

23 Oct, 10:04


Как создавать привлекательные анимации

Люди все чаще выбирают инструменты, ориентируясь на общие впечатления, а не только на функциональность.

Приложение, которое делает то, что вы ждёте и так, как вы хотели бы видеть — вот что выделяет продукт.

В частности, это одна из основных причин, почему компании инвестируют в дизайн-инженеров.

Умение создавать приятные анимации — сложная задача (для которой нужен опыт и знания).

📖 Эмиль Ковальски рассказывает о таких анимациях, приводит примеры (не только для iOS-платформы) и даёт советы, как можно улучшить впечатление пользователей.

В свою очередь, самыми интересными примерами я делюсь здесь.

😃 iOS Dev

iOS Dev

22 Oct, 09:16


Как начать использовать Swift Testing

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

Рассмотрены основные возможности Swift Testing (а ещё его отличия и улучшения по сравнению с XCTest).

📺 А вот здесь этот материал представлен в формате видео.

📖 Кстати, в канале есть ещё один вариант разбора отличий и преимуществ по сравнению с XCTest.

😃 iOS Dev

iOS Dev

18 Oct, 07:31


И ещё одно нововведение (более приятное) в App Store Connect

Будет полезным для инди-разработчиков (и для команд маркетинга/оптимизации и так далее).

В sales и trends всегда была опция для статистики по приложениям за все время (lifetime), а вот в аналитике добавили только сегодня.

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

🤩 Посмотреть можно на вкладке аналитики в списке пресетов.

😃 iOS Dev

iOS Dev

18 Oct, 07:18


ℹ️ Новое требование к обновлениям приложений в ЕС

Начиная с сегодняшнего дня, для отправки обновлений приложений в App Store на территории Европейского Союза (ЕС) владельцам аккаунтов или администраторам программы Apple Developer Program необходимо ввести статус трейдера в App Store Connect.

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

Начиная с 17 февраля 2025 года, приложения без статуса трейдера будут удаляться из App Store в ЕС до тех пор, пока статус трейдера не будет предоставлен и проверен в целях соблюдения Закона о цифровых услугах.

Несколько рекомендаций по заполнению статуса - здесь.

😃 iOS Dev

iOS Dev

16 Oct, 08:03


Отрисовка графики на Apple Vision с помощью Metal Rendering API

Материалов по Apple Vision Pro очень мало (а приложений чуть больше, но если вы что-то делали, поделитесь в комментариях, очень интересно).

Когда дело доходит до рендеринга, большинство разработчиков выбирают уже известные игровые движки вроде Unity или высокоуровневые API Apple (чекайте RealityKit).

Однако есть и другой вариант, который был доступен с самого начала: создание собственного движка рендеринга с помощью Metal API.

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

Нашёл любопытную статью (которую сохранил и себе для будущих экспериментов), в которой рассматривается множество интересных моментов:

📖 Создание и настройка LayerRenderer.

📖 Vertex Amplification (и описание примеров с Vertex/Fragment шейдерами).

📖 Обновление и энкодинг для кадров.

📖 Поддержка стереоскопического и не-VR рендеринга дисплея.

📖 Рекомендации и советы.

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

😃 iOS Dev

iOS Dev

15 Oct, 10:01


Проектирование сетевого слоя в iOS

Конечно, идеального решения не существует.

Но есть несколько хороших примеров (отправных точек) для создания модульного, расширяемого и тестируемого сетевого слоя в iOS.

В двух больших статьях автор рассказывает о своём подходе к реализации на примерах:

📖 Проектирование API-клиента (создание запросов, пример реального варианта использования, авторизация + логирование).

📖 Вторая часть посвящена модульным и интеграционным тестам.

😃 iOS Dev

iOS Dev

14 Oct, 08:36


Как работать с passkeys в iOS-приложении

Passkeys используются для аутентификации пользователей без использования пароля (после WWDC 23 Apple даже добавила фразу: При использовании passkey с сервера нечего красть).

Сама пара public + private ключ создается каждый раз при генерации новой учетки.

Чтобы получить доступ к контенту пользователи могут использовать PIN-код или биометрию.

📖 Здесь есть полезный материал о том, как настроить passkeys в вашем приложении и пример реализации на github.

😃 iOS Dev

iOS Dev

11 Oct, 08:28


Рисование кастомных фигур в SwiftUI: примеры и код

В SwiftUI Shape-протокол опредеяет контур нашей вью.

Он используется для рисования и проектирования своих собственных фигур или контролов разной сложности

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

😃 iOS Dev

iOS Dev

10 Oct, 09:43


Как работать со Swift Data и Core Data в фоновом режиме

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

Одна из самых больших проблем — управление моделями в различных контекстах. Модели Swift Data и Core Data небезопасно использовать совместно в разных потоках (они не Sendable и не thread-safe). Apple даже указывает на это в своем руководстве.

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

Большой гайд по работе со Swift Data есть в нашем канале и вот тут.

😃 iOS Dev

iOS Dev

08 Oct, 12:52


Исследование причин зависаний приложений — серия уроков от Apple

📖
Вышла новая серия туториалов от Apple, в которой новички могут узнать, как использовать Instruments для анализа производительности, ресурсов и поведения приложений.

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

Для удобства отметил главы в формате теории (📖) и практики (🛠)

Первая часть
📖 Начало работы с инструментами
🛠 Идентификация причины зависания

Вторая часть
🛠 Анализ активности главного потока
📖 Определение частоты выполнения
🛠 Сокращение нагрузки на основной поток
🛠 Выполнение работы асинхронно
📖 Понимание синхронных (и асинхронных зависаний)
🛠 Обеспечение выполнения работы в фоновом потоке

Кстати, в закрытой базе знаний есть большой раздел, в котором можно посмотреть на разные подходы к отладке приложений (и узнать про некоторые приёмы и советы).

😃 iOS Dev

iOS Dev

07 Oct, 07:20


Будьте внимательны к UserDefaults: история о труднодоступных ошибках и потерянных данных

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

Например, два пункта, при которых точно стоит избегать использования UserDefaults:

🔘 Не нужно хранить конфиденциальные данные в UserDefaults (для этого есть кейчейн).
🔘 Следует избегать больших объемов данных в UserDefaults (правильнее юзать Core Data или Swift Data, или Realm, хотя поддержка большей части экосистемы остановлена).

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

😃 iOS Dev

iOS Dev

04 Oct, 07:06


ReviewBuddy — приложение для трекинга оценок в AppStore или как сменить регион, не внося изменения в Apple ID

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

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

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

Наверняка, многие знают про опцию поиска приложений (и способ для проверки доступности новой версии через https://itunes.apple.com/search). Но ведь её можно использовать и для поиска оценок/формирования средневзвешенной.

Поэтому я внедрил несложный механизм запросов с помощью уже не такого новомодного async/await и написал алгоритм трекинга оценок для любого приложения в аппсторе. Бонусом впилил историю, просмотр отзывов (а отвечать на них можно в Starly), копирование айдишников и урлов и возможность шаринга оценок по любому приложению.

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

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

🔗Скачать приложение можно здесь.
🎆 Поддержать — вот тут.

💸 Промокод (для инди-разработчиков и тех, кому нужно — можно использовать этот на фулл-версию на год).

😃 iOS Dev

iOS Dev

03 Oct, 10:50


Расширенный поиск с помощью AI по сессиям WWDC

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

📖 А вот тут можно посмотреть на подборку лучших сессий с WWDC24 (Swift, Perfomance, Debugging).

😃 iOS Dev

iOS Dev

02 Oct, 08:42


Утечка памяти: детектив в Xcode

Недавно Джейкоб Бартлетт столкнулся с забавной ошибкой, связанной с диплинками.

🔎Суть проблемы была в том, что при нажатии на push-уведомление некоторые пользователи сообщали, что экран пушился дважды (приложение открывалось, но сам переход дублировался).

📖 В итоге разработчик провел целое расследование, а к чему оно привело, можно прочитать тут.

Спойлер: для поиска пригодится этот пост.

😃 iOS Dev

iOS Dev

01 Oct, 08:21


Подборка докладов с iOS Conf SG 2024

🤩 Наш читатель посетил iOS-конференцию в Сингапуре и поделился своим топом лучших докладов:

📺 Understanding our users – полезное видео, в котором разбираются основы того, что спрашивать у пользователей, чтобы развивать продукт в нужном направлении.

📺 Swift beyond Apple platforms — о возможностях и проблемах использования Swift от веб-разработки до работы во embedded-системах.

📺 The Swift Actor Pitfall: Understanding and Managing Reentrancy – разбор неочевидной и простой ошибки, связанной со swift concurrency.

Нельзя пройти стороной и миграцию кодовой базы на async/await.

🔗 А весь плейлист с докладами доступен вот тут.

Кстати, в канале есть обзоры и других конференций:
🔗 Подборка докладов с конференции Swift Craft
🔗 Доклады с конференции try! Swift Tokyo 2024

😃 iOS Dev

iOS Dev

30 Sep, 08:59


Реализация загрузчика файлов в SwiftUI

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

📖 Маттео Манфердини в своём блоге написал огромный материал о своём подходе к созданию загрузчика файлов (и дополнил свою прошлую реализацию).

Статья разбита на несколько частей:

1️⃣ Загрузка файлов и как трекать прогресс скачивания.
2️⃣ Реализация архитектуры для загрузки нескольких файлов.
3️⃣ Трекаем прогресс с помощью Swift Concurrency.
4️⃣ Создание интерфейса SwiftUI для управления загрузкой.

🛠 Код проекта доступен на github

😃 iOS Dev

iOS Dev

27 Sep, 09:16


Как работать с MeshGradient в iOS 18

В iOS 18 появилась возможность создавать mesh-градиенты.

В целом, это лёгкий в использовании способ создания необычных эффектов.

Например, вы можете посмотреть на мою реализацию или на вариант создания анимации в стиле Siri.

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

😃 iOS Dev

iOS Dev

26 Sep, 09:44


Как делать великолепные приложения

Я очень редко делюсь роликами c интервью (только если речь не про персон калибра Барбары Лисков).

В канале очень много примеров анимаций, поэтому пройти мимо автора вот этого протипа (и этого, и многих других) нельзя.

📺 В этом видео Джанум делится многими деталями (и своим опытом в Apple, Netflix, Airbnb), в том числе:

- Уровни анимации.
- Почему шейдеры имеют большое значение (и как они работают)
- Как реализована анимация загрузки для Arc.
- Про собственный анимационный движок Wave (есть обзорный пост в канале).
- Изучение принципов флюидного дизайна при работе на iPad и многим другим.

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

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

😃 iOS Dev

iOS Dev

25 Sep, 10:58


Реализация перетаскивания элементов с помощью жестов в SwiftUI

📖 Несложный пример, в котором показан один из возможных подходов, как работать с перетаскиванием элементов интерфейса с помощью жестов в SwiftUI.

🛠 Само решение доступно на github.

😃 iOS Dev