Будьте внимательны к 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
20%
16
35%
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
This media is not supported in your browser
VIEW IN TELEGRAM
Пока мы ждём выкатки API для разработчиков, некоторые счастливчики на бете успели потестить функциональность.
Похвалитесь, кто был в листе ожидания, получили ли доступ? В Европе пока все эти фичи (даже в бете) недоступны.
Please open Telegram to view this post
VIEW IN TELEGRAM
This media is not supported in your browser
VIEW IN TELEGRAM
Анимация переходов между view в SwiftUI
Transitions (или переходы) улучшают пользовательский опыт, делая взаимодействие более плавным и приятным.
При смене интерфейса визуально подчеркивается связь между различными элементами пользовательского интерфейса.
В качестве примеров, где используются такие анимации, можно привести:
🔘 Навигация между экранами.
🔘 Добавление (или удаление) элементов из списка.
🔘 Показ модальных вьюх.
📖 Разбор создания таких эффектов (и их комбинаций) можно почитать в этой статье.
🔗 В канале есть ещё и пример таких переходов с использованием Metal.
😃 iOS Dev
Transitions (или переходы) улучшают пользовательский опыт, делая взаимодействие более плавным и приятным.
При смене интерфейса визуально подчеркивается связь между различными элементами пользовательского интерфейса.
В качестве примеров, где используются такие анимации, можно привести:
📖 Разбор создания таких эффектов (и их комбинаций) можно почитать в этой статье.
Please open Telegram to view this post
VIEW IN TELEGRAM
Комплексное руководство по работе с KeyPath в Swift
В мире Swift KeyPath - это мощная, но часто недооцениваемая функция.
Цель этой статьи — глубоко изучить функциональные особенности KeyPath, раскрыть возможности и помочь использовать её в процессе разработки.
📖 В материале описаны свойства, приведены примеры как читать/устанавливать значения через KeyPath и использовать KeyPath в качестве параметра.
5 вещей, которые вы могли не знать о KeyPaths можно проверить в этом посте.
😃 iOS Dev
В мире Swift KeyPath - это мощная, но часто недооцениваемая функция.
Цель этой статьи — глубоко изучить функциональные особенности KeyPath, раскрыть возможности и помочь использовать её в процессе разработки.
📖 В материале описаны свойства, приведены примеры как читать/устанавливать значения через KeyPath и использовать KeyPath в качестве параметра.
5 вещей, которые вы могли не знать о KeyPaths можно проверить в этом посте.
Please open Telegram to view this post
VIEW IN TELEGRAM
Работа с таймерами в Swift
Таймеры в Swift используются постоянно: для планирования отложенных или повторяющихся задач.
В статье, затрагивающей моменты создания и работы с таймерами, автор напоминает несколько важных моментов:
🔘 Зачем вообще нужны таймеры в Swift.
🔘 Повторяющиеся (и не повторяющиеся) таймеры.
🔘 Как запланировать повторяющиеся задачи.
🔘 Что такое tolerance и как runloop modes влияют на работу таймера.
📖 В канале есть ещё один неплохой разбор таймеров (ведь как известно, даже Apple допускает ошибки).
😃 iOS Dev
Таймеры в Swift используются постоянно: для планирования отложенных или повторяющихся задач.
В статье, затрагивающей моменты создания и работы с таймерами, автор напоминает несколько важных моментов:
📖 В канале есть ещё один неплохой разбор таймеров (ведь как известно, даже Apple допускает ошибки).
Please open Telegram to view this post
VIEW IN TELEGRAM
This media is not supported in your browser
VIEW IN TELEGRAM
Реализация размытия экрана в режиме многозадачности
🔑 Повышение уровня конфиденциальности важно при разработке современных приложений (особенно мессенджеров или банковских приложений).
📖 В этой статье показан простой способ размытия контента, когда пользователь переходит в многозадачный (или фоновый режим).
😃 iOS Dev
📖 В этой статье показан простой способ размытия контента, когда пользователь переходит в многозадачный (или фоновый режим).
Please open Telegram to view this post
VIEW IN TELEGRAM