Как работать с MeshGradient в iOS 18
В iOS 18 появилась возможность создавать mesh-градиенты.
В целом, это лёгкий в использовании способ создания необычных эффектов.
Например, вы можете посмотреть на мою реализацию или на вариант создания анимации в стиле Siri.
📖 В этом посте довольно подробно описано, что из себя представляют mesh-градиенты, как их можно использовать и анимировать, чтобы они выглядели действительно приятно.
😃 iOS Dev
В iOS 18 появилась возможность создавать mesh-градиенты.
В целом, это лёгкий в использовании способ создания необычных эффектов.
Например, вы можете посмотреть на мою реализацию или на вариант создания анимации в стиле Siri.
📖 В этом посте довольно подробно описано, что из себя представляют mesh-градиенты, как их можно использовать и анимировать, чтобы они выглядели действительно приятно.
Please open Telegram to view this post
VIEW IN TELEGRAM
Реализация загрузчика файлов в SwiftUI
Вполне вероятно, что вам приходилось решать задачу отслеживания прогресса загрузки нескольких файлов.
📖 Маттео Манфердини в своём блоге написал огромный материал о своём подходе к созданию загрузчика файлов (и дополнил свою прошлую реализацию).
Статья разбита на несколько частей:
1️⃣ Загрузка файлов и как трекать прогресс скачивания.
2️⃣ Реализация архитектуры для загрузки нескольких файлов.
3️⃣ Трекаем прогресс с помощью Swift Concurrency.
4️⃣ Создание интерфейса SwiftUI для управления загрузкой.
🛠 Код проекта доступен на github
😃 iOS Dev
Вполне вероятно, что вам приходилось решать задачу отслеживания прогресса загрузки нескольких файлов.
📖 Маттео Манфердини в своём блоге написал огромный материал о своём подходе к созданию загрузчика файлов (и дополнил свою прошлую реализацию).
Статья разбита на несколько частей:
1️⃣ Загрузка файлов и как трекать прогресс скачивания.
2️⃣ Реализация архитектуры для загрузки нескольких файлов.
3️⃣ Трекаем прогресс с помощью Swift Concurrency.
4️⃣ Создание интерфейса SwiftUI для управления загрузкой.
🛠 Код проекта доступен на github
Please open Telegram to view this post
VIEW IN TELEGRAM
Подборка докладов с 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
📺 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
Please open Telegram to view this post
VIEW IN TELEGRAM
Утечка памяти: детектив в Xcode
Недавно Джейкоб Бартлетт столкнулся с забавной ошибкой, связанной с диплинками.
🔎 Суть проблемы была в том, что при нажатии на push-уведомление некоторые пользователи сообщали, что экран пушился дважды (приложение открывалось, но сам переход дублировался).
📖 В итоге разработчик провел целое расследование, а к чему оно привело, можно прочитать тут.
Спойлер:для поиска пригодится этот пост .
😃 iOS Dev
Недавно Джейкоб Бартлетт столкнулся с забавной ошибкой, связанной с диплинками.
📖 В итоге разработчик провел целое расследование, а к чему оно привело, можно прочитать тут.
Спойлер:
Please open Telegram to view this post
VIEW IN TELEGRAM
Расширенный поиск с помощью AI по сессиям WWDC
🤩 Неплохая идея (автор - Мэтт Спир), с помощью которой можно сразу получить саммари по фичам и посмотреть доступные сессии по теме.
📖 А вот тут можно посмотреть на подборку лучших сессий с WWDC24 (Swift, Perfomance, Debugging).
😃 iOS Dev
📖 А вот тут можно посмотреть на подборку лучших сессий с WWDC24 (Swift, Perfomance, Debugging).
Please open Telegram to view this post
VIEW IN TELEGRAM
ReviewBuddy — приложение для трекинга оценок в AppStore или как сменить регион, не внося изменения в Apple ID
Время от времени я стараюсь облегчить жизнь в разработке и для своих проектов, и для целей компании (раз, два).
Иногда необходимо видеть, как приложение выглядит в том или ином аппсторе, но нативной опции для переключения у нас нет (либо можно чекать в браузере каждый раз через несколько действий).
Поэтому около месяца назад я решил потратить выходные и часть отпуска на исследование возможностей, как же можно переключать аппстор (и вообще, что на это говорит Apple, спойлер — можно, но со скрипом).
Наверняка, многие знают про опцию поиска приложений (и способ для проверки доступности новой версии через
Поэтому я внедрил несложный механизм запросов с помощью уже не такого новомодного async/await и написал алгоритм трекинга оценок для любого приложения в аппсторе. Бонусом впилил историю, просмотр отзывов (а отвечать на них можно в Starly), копирование айдишников и урлов и возможность шаринга оценок по любому приложению.
А вот с переключением аппсторов вышло интереснее (для этого можно использовать кастомные схемы, если кому интересно — покопайте вот тут) и с помощью этого можно переключать дефолтный стор (но, конечно, без возможности скачивания приложений или покупок). Цель — для девелоперов чекнуть их (и не только их приложения) в других странах.
В итоге поставленных целей удалось добиться, для хранения истории юзал SwiftData, а самый сложный момент — было биться с ревью-командой, в итоге потратил на переписку около месяца, чтобы показать, как именно запрашиваются рейтинги и что происходит внутри.
🔗 Скачать приложение можно здесь.
🎆 Поддержать — вот тут.
💸 Промокод (для инди-разработчиков и тех, кому нужно — можно использовать этот на фулл-версию на год).
😃 iOS Dev
Время от времени я стараюсь облегчить жизнь в разработке и для своих проектов, и для целей компании (раз, два).
Иногда необходимо видеть, как приложение выглядит в том или ином аппсторе, но нативной опции для переключения у нас нет (либо можно чекать в браузере каждый раз через несколько действий).
Поэтому около месяца назад я решил потратить выходные и часть отпуска на исследование возможностей, как же можно переключать аппстор (и вообще, что на это говорит Apple, спойлер — можно, но со скрипом).
Наверняка, многие знают про опцию поиска приложений (и способ для проверки доступности новой версии через
https://itunes.apple.com/search
). Но ведь её можно использовать и для поиска оценок/формирования средневзвешенной.Поэтому я внедрил несложный механизм запросов с помощью уже не такого новомодного async/await и написал алгоритм трекинга оценок для любого приложения в аппсторе. Бонусом впилил историю, просмотр отзывов (а отвечать на них можно в Starly), копирование айдишников и урлов и возможность шаринга оценок по любому приложению.
А вот с переключением аппсторов вышло интереснее (для этого можно использовать кастомные схемы, если кому интересно — покопайте вот тут) и с помощью этого можно переключать дефолтный стор (но, конечно, без возможности скачивания приложений или покупок). Цель — для девелоперов чекнуть их (и не только их приложения) в других странах.
В итоге поставленных целей удалось добиться, для хранения истории юзал SwiftData, а самый сложный момент — было биться с ревью-командой, в итоге потратил на переписку около месяца, чтобы показать, как именно запрашиваются рейтинги и что происходит внутри.
💸 Промокод (для инди-разработчиков и тех, кому нужно — можно использовать этот на фулл-версию на год).
Please open Telegram to view this post
VIEW IN TELEGRAM
Будьте внимательны к UserDefaults: история о труднодоступных ошибках и потерянных данных
Хотя UserDefaults и удобный инструмент (и стандарт, который использует все или почти все) с массой удобных фич (просто обмениваться данными, автоматическая сериализация/десериализация и так далее), есть кейсы, когда стоит использовать что-то ещё.
Например, два пункта, при которых точно стоит избегать использования UserDefaults:
🔘 Не нужно хранить конфиденциальные данные в UserDefaults (для этого есть кейчейн).
🔘 Следует избегать больших объемов данных в UserDefaults (правильнее юзать Core Data или Swift Data, или Realm, хотя поддержка большей части экосистемы остановлена).
📖 Вышла отличная статья от Кристиана Селига с разбором таких примеров, а ещё там есть интересные ситуации, когда данные могут быть недоступны (и при чём тут prewarming), и как предотвратить потерю вашей информации в UserDefaults.
😃 iOS Dev
Хотя UserDefaults и удобный инструмент (и стандарт, который использует все или почти все) с массой удобных фич (просто обмениваться данными, автоматическая сериализация/десериализация и так далее), есть кейсы, когда стоит использовать что-то ещё.
Например, два пункта, при которых точно стоит избегать использования UserDefaults:
📖 Вышла отличная статья от Кристиана Селига с разбором таких примеров, а ещё там есть интересные ситуации, когда данные могут быть недоступны (и при чём тут prewarming), и как предотвратить потерю вашей информации в UserDefaults.
Please open Telegram to view this post
VIEW IN TELEGRAM
Исследование причин зависаний приложений — серия уроков от Apple
📖 Вышла новая серия туториалов от Apple, в которой новички могут узнать, как использовать Instruments для анализа производительности, ресурсов и поведения приложений.
Затронуты темы, связанные с улучшением как отзывчивости, потребления памяти и анализ сложных ситуаций во время работы приложения.
Для удобства отметил главы в формате теории (📖) и практики (🛠)
Первая часть
📖 Начало работы с инструментами
🛠 Идентификация причины зависания
Вторая часть
🛠 Анализ активности главного потока
📖 Определение частоты выполнения
🛠 Сокращение нагрузки на основной поток
🛠 Выполнение работы асинхронно
📖 Понимание синхронных (и асинхронных зависаний)
🛠 Обеспечение выполнения работы в фоновом потоке
✅ Кстати, в закрытой базе знаний есть большой раздел, в котором можно посмотреть на разные подходы к отладке приложений (и узнать про некоторые приёмы и советы).
😃 iOS Dev
📖 Вышла новая серия туториалов от Apple, в которой новички могут узнать, как использовать Instruments для анализа производительности, ресурсов и поведения приложений.
Затронуты темы, связанные с улучшением как отзывчивости, потребления памяти и анализ сложных ситуаций во время работы приложения.
Для удобства отметил главы в формате теории (📖) и практики (🛠)
Первая часть
📖 Начало работы с инструментами
🛠 Идентификация причины зависания
Вторая часть
🛠 Анализ активности главного потока
📖 Определение частоты выполнения
🛠 Сокращение нагрузки на основной поток
🛠 Выполнение работы асинхронно
📖 Понимание синхронных (и асинхронных зависаний)
🛠 Обеспечение выполнения работы в фоновом потоке
Please open Telegram to view this post
VIEW IN TELEGRAM
Как работать со Swift Data и Core Data в фоновом режиме
Хотя SwiftData намного проще в настройке, фреймворк унаследовал многие проблемы Core Data (включая те, которые останавливали многих разработчиков от использования Core Data в своих приложениях).
Одна из самых больших проблем — управление моделями в различных контекстах. Модели Swift Data и Core Data небезопасно использовать совместно в разных потоках (они не Sendable и не thread-safe). Apple даже указывает на это в своем руководстве.
📖 Пол в своем блоге рассматривает эту проблему с различных сторон и приводит свой вариант решения с использованием одного контейнера и выполнением всей нужной работы в бэкграунде.
Большой гайд по работе со Swift Data есть в нашем канале и вот тут.
😃 iOS Dev
Хотя SwiftData намного проще в настройке, фреймворк унаследовал многие проблемы Core Data (включая те, которые останавливали многих разработчиков от использования Core Data в своих приложениях).
Одна из самых больших проблем — управление моделями в различных контекстах. Модели Swift Data и Core Data небезопасно использовать совместно в разных потоках (они не Sendable и не thread-safe). Apple даже указывает на это в своем руководстве.
📖 Пол в своем блоге рассматривает эту проблему с различных сторон и приводит свой вариант решения с использованием одного контейнера и выполнением всей нужной работы в бэкграунде.
Большой гайд по работе со Swift Data есть в нашем канале и вот тут.
Please open Telegram to view this post
VIEW IN TELEGRAM
Рисование кастомных фигур в SwiftUI: примеры и код
В SwiftUI Shape-протокол опредеяет контур нашей вью.
Он используется для рисования и проектирования своих собственных фигур или контролов разной сложности
📖 В этом материале можно познакомиться с созданием не только простых вещей (вроде треугольников), но и с гораздо более интересными примерами с анимациями.
😃 iOS Dev
В SwiftUI Shape-протокол опредеяет контур нашей вью.
Он используется для рисования и проектирования своих собственных фигур или контролов разной сложности
📖 В этом материале можно познакомиться с созданием не только простых вещей (вроде треугольников), но и с гораздо более интересными примерами с анимациями.
Please open Telegram to view this post
VIEW IN TELEGRAM
Как работать с passkeys в iOS-приложении
Passkeys используются для аутентификации пользователей без использования пароля (после WWDC 23 Apple даже добавила фразу:
Сама пара public + private ключ создается каждый раз при генерации новой учетки.
Чтобы получить доступ к контенту пользователи могут использовать PIN-код или биометрию.
📖 Здесь есть полезный материал о том, как настроить passkeys в вашем приложении и пример реализации на github.
😃 iOS Dev
Passkeys используются для аутентификации пользователей без использования пароля (после WWDC 23 Apple даже добавила фразу:
При использовании passkey с сервера нечего красть
).Сама пара public + private ключ создается каждый раз при генерации новой учетки.
Чтобы получить доступ к контенту пользователи могут использовать PIN-код или биометрию.
📖 Здесь есть полезный материал о том, как настроить passkeys в вашем приложении и пример реализации на github.
Please open Telegram to view this post
VIEW IN TELEGRAM
Проектирование сетевого слоя в iOS
Конечно, идеального решения не существует.
Но есть несколько хороших примеров (отправных точек) для создания модульного, расширяемого и тестируемого сетевого слоя в iOS.
В двух больших статьях автор рассказывает о своём подходе к реализации на примерах:
📖 Проектирование API-клиента (создание запросов, пример реального варианта использования, авторизация + логирование).
📖 Вторая часть посвящена модульным и интеграционным тестам.
😃 iOS Dev
Конечно, идеального решения не существует.
Но есть несколько хороших примеров (отправных точек) для создания модульного, расширяемого и тестируемого сетевого слоя в iOS.
В двух больших статьях автор рассказывает о своём подходе к реализации на примерах:
📖 Проектирование API-клиента (создание запросов, пример реального варианта использования, авторизация + логирование).
📖 Вторая часть посвящена модульным и интеграционным тестам.
Please open Telegram to view this post
VIEW IN TELEGRAM
Отрисовка графики на Apple Vision с помощью Metal Rendering API
Материалов по Apple Vision Pro очень мало (а приложений чуть больше, но если вы что-то делали, поделитесь в комментариях, очень интересно).
Когда дело доходит до рендеринга, большинство разработчиков выбирают уже известные игровые движки вроде Unity или высокоуровневые API Apple (чекайте
Однако есть и другой вариант, который был доступен с самого начала: создание собственного движка рендеринга с помощью Metal API.
Несмотря на сложность, такой подход позволяет получить полный контроль над конвейером рендеринга, вплоть до каждого байта.
Нашёл любопытную статью (которую сохранил и себе для будущих экспериментов), в которой рассматривается множество интересных моментов:
📖 Создание и настройка LayerRenderer.
📖 Vertex Amplification (и описание примеров с Vertex/Fragment шейдерами).
📖 Обновление и энкодинг для кадров.
📖 Поддержка стереоскопического и не-VR рендеринга дисплея.
📖 Рекомендации и советы.
Если сейчас это кажется не слишком актуальным, то через несколько лет, на мой взгляд, подобные устройства будут повсеместно (например, для медицины или работы с высокотехнологичными процессами в целом, да даже ремонтировать авто на продвинутых с сервисах с авто-подсказками чем не бизнес-идея).
😃 iOS Dev
Материалов по Apple Vision Pro очень мало (а приложений чуть больше, но если вы что-то делали, поделитесь в комментариях, очень интересно).
Когда дело доходит до рендеринга, большинство разработчиков выбирают уже известные игровые движки вроде Unity или высокоуровневые API Apple (чекайте
RealityKit
). Однако есть и другой вариант, который был доступен с самого начала: создание собственного движка рендеринга с помощью Metal API.
Несмотря на сложность, такой подход позволяет получить полный контроль над конвейером рендеринга, вплоть до каждого байта.
Нашёл любопытную статью (которую сохранил и себе для будущих экспериментов), в которой рассматривается множество интересных моментов:
📖 Создание и настройка LayerRenderer.
📖 Vertex Amplification (и описание примеров с Vertex/Fragment шейдерами).
📖 Обновление и энкодинг для кадров.
📖 Поддержка стереоскопического и не-VR рендеринга дисплея.
📖 Рекомендации и советы.
Если сейчас это кажется не слишком актуальным, то через несколько лет, на мой взгляд, подобные устройства будут повсеместно (например, для медицины или работы с высокотехнологичными процессами в целом, да даже ремонтировать авто на продвинутых с сервисах с авто-подсказками чем не бизнес-идея).
Please open Telegram to view this post
VIEW IN TELEGRAM
Что вы используете для хранения данных на клиенте (можно несколько вариантов)
Anonymous Poll
49%
Core Data
14%
SwiftData
22%
Realm
14%
SQLite
61%
UserDefaults
7%
Другое (напишу в комментариях)
ℹ️ Новое требование к обновлениям приложений в ЕС
Начиная с сегодняшнего дня, для отправки обновлений приложений в App Store на территории Европейского Союза (ЕС) владельцам аккаунтов или администраторам программы Apple Developer Program необходимо ввести статус трейдера в App Store Connect.
Если вы являетесь трейдером, вам нужно будет предоставить информацию о себе, прежде чем вы сможете отправить свое приложение на проверку.
Начиная с 17 февраля 2025 года, приложения без статуса трейдера будут удаляться из App Store в ЕС до тех пор, пока статус трейдера не будет предоставлен и проверен в целях соблюдения Закона о цифровых услугах.
Несколько рекомендаций по заполнению статуса - здесь.
😃 iOS Dev
Начиная с сегодняшнего дня, для отправки обновлений приложений в App Store на территории Европейского Союза (ЕС) владельцам аккаунтов или администраторам программы Apple Developer Program необходимо ввести статус трейдера в App Store Connect.
Если вы являетесь трейдером, вам нужно будет предоставить информацию о себе, прежде чем вы сможете отправить свое приложение на проверку.
Начиная с 17 февраля 2025 года, приложения без статуса трейдера будут удаляться из App Store в ЕС до тех пор, пока статус трейдера не будет предоставлен и проверен в целях соблюдения Закона о цифровых услугах.
Несколько рекомендаций по заполнению статуса - здесь.
Please open Telegram to view this post
VIEW IN TELEGRAM
И ещё одно нововведение (более приятное) в App Store Connect
Будет полезным для инди-разработчиков (и для команд маркетинга/оптимизации и так далее).
В sales и trends всегда была опция для статистики по приложениям за все время (lifetime), а вот в аналитике добавили только сегодня.
Можно отследить всё количество показов по приложениям, выручку, лайф-тайм краши и так далее. Полезно для составления отчётов и в целом любопытно посмотреть на то, какой путь проделало то или иное приложение.
🤩 Посмотреть можно на вкладке аналитики в списке пресетов.
😃 iOS Dev
Будет полезным для инди-разработчиков (и для команд маркетинга/оптимизации и так далее).
В sales и trends всегда была опция для статистики по приложениям за все время (lifetime), а вот в аналитике добавили только сегодня.
Можно отследить всё количество показов по приложениям, выручку, лайф-тайм краши и так далее. Полезно для составления отчётов и в целом любопытно посмотреть на то, какой путь проделало то или иное приложение.
Please open Telegram to view this post
VIEW IN TELEGRAM
Какую минимальную версию iOS вы поддерживаете на вашем рабочем проекте?
Anonymous Poll
4%
18
6%
17
19%
16
36%
15
19%
14
16%
13 (или ниже)
Как начать использовать Swift Testing
📖 В этой статье автор делится своим взглядом на то, что нужно знать для начала работы с новым фреймворком Swift Testing.
Рассмотрены основные возможности Swift Testing (а ещё его отличия и улучшения по сравнению с XCTest).
📺 А вот здесь этот материал представлен в формате видео.
📖 Кстати, в канале есть ещё один вариант разбора отличий и преимуществ по сравнению с XCTest.
😃 iOS Dev
📖 В этой статье автор делится своим взглядом на то, что нужно знать для начала работы с новым фреймворком Swift Testing.
Рассмотрены основные возможности Swift Testing (а ещё его отличия и улучшения по сравнению с XCTest).
📺 А вот здесь этот материал представлен в формате видео.
📖 Кстати, в канале есть ещё один вариант разбора отличий и преимуществ по сравнению с XCTest.
Please open Telegram to view this post
VIEW IN TELEGRAM
This media is not supported in your browser
VIEW IN TELEGRAM
Как создавать привлекательные анимации
Люди все чаще выбирают инструменты, ориентируясь на общие впечатления, а не только на функциональность.
Приложение, которое делает то, что вы ждёте и так, как вы хотели бы видеть — вот что выделяет продукт.
В частности, это одна из основных причин, почему компании инвестируют в дизайн-инженеров.
Умение создавать приятные анимации — сложная задача (для которой нужен опыт и знания).
📖 Эмиль Ковальски рассказывает о таких анимациях, приводит примеры (не только для iOS-платформы) и даёт советы, как можно улучшить впечатление пользователей.
✅ В свою очередь, самыми интересными примерами я делюсь здесь.
😃 iOS Dev
Люди все чаще выбирают инструменты, ориентируясь на общие впечатления, а не только на функциональность.
Приложение, которое делает то, что вы ждёте и так, как вы хотели бы видеть — вот что выделяет продукт.
В частности, это одна из основных причин, почему компании инвестируют в дизайн-инженеров.
Умение создавать приятные анимации — сложная задача (для которой нужен опыт и знания).
📖 Эмиль Ковальски рассказывает о таких анимациях, приводит примеры (не только для iOS-платформы) и даёт советы, как можно улучшить впечатление пользователей.
Please open Telegram to view this post
VIEW IN TELEGRAM