Telegram Web Link
🚀 Swift 6 официально анонсирован!

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

Swift 6 расширился ещё и за счёт новых функций низкоуровневого программирования, расширенной поддержки Linux и Windows, новых кроссплатформенным API, включая новую библиотеку тестирования Swift.

📖 На макро-уровне изменения разобраны в этой статье.

А в канале уже сейчас можно прочитать про:

🔗 Новый метод count(where:) в Swift 6
🔗 DebugDescription в Xcode 16: новый макрос для упрощения отладки
🔗 Обновлённый Foundation
🔗 Swift Testing: Разбор API и макроса #expect
🔗 Миграция на Swift 6. И ещё: Swift 6: подготовка ваших проектов Xcode к будущему

😃 iOS Dev
Please open Telegram to view this post
VIEW IN TELEGRAM
Создание секундомера и таймера на базе SystemFormatStyles в Xcode 16

Вкратце, стили форматирования (format styles) — это замена на Swift старых классов Objective-C Formatter от Apple.

Они позволяют быстро и легко создавать локализованные отображения различных типов данных.

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

Но документация Apple не всегда описывает все нововведения сразу же (или вообще никогда).

📖 В этом примере уже сейчас можно познакомиться с двумя новыми стилями SystemFormatStyle.Stopwatch и SystemFormatStyle.Timer.

😃 iOS Dev
Please open Telegram to view this post
VIEW IN TELEGRAM
AVAudioEffectNode: создание низкоуровневых аудиоэффектов в Swift

При создании аудиоэффектов можно использовать Audio Units.

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

Следуя аналогичному подходу из либы Novocaine, автор делится примером удобного API для создания аудиоэффектов в Swift с помощью AVFoundation.

📖 Исследование доступно здесь, а код — вот тут.

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

😃 iOS Dev
Please open Telegram to view this post
VIEW IN TELEGRAM
Создание крупномасштабных приложений на SwiftUI: Руководство по модульной архитектуре

Архитектура — это всегда тема для жарких споров, особенно когда у нас есть много вариантов.

В фундаментальной статье вы сможете найти:

🔗 Что представляет собой модульная архитектура?
🔗 Какие могут быть проблемы с MVVM со SwiftUI
🔗 Как можно понимать паттерн MV
🔗 Screens vs Views (плюсы и минусы наименований)
🔗 Примеры создания и использования моделей
🔗 View-специализированная логика
🔗 Валидация
🔗 Навигацияпример с TabView)
🔗 Отображение ошибок
🔗 Группировка событий
🔗 Форматирование
🔗 Тестирование

В канале уже были примеры и других реализаций, напомню про эти посты:

1️⃣ Реализация модульной архитектуры на примере Spotify

2️⃣ Опенсорсный клиент на SwiftUI для Mastodon: демонстрация реализованных методов и фич

3️⃣ Пример реализации модульной архитектуры в компании Just Eat

И, конечно, если вы хотите найти ещё больше информации, примеров и разборов конкретных архитектур, подписывайтесь:

💰 Boosty💬 Telegram

😃 iOS Dev
Please open Telegram to view this post
VIEW IN TELEGRAM
This media is not supported in your browser
VIEW IN TELEGRAM
Реализация перетаскивания элементов с помощью жестов в SwiftUI

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

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

😃 iOS Dev
Please open Telegram to view this post
VIEW IN TELEGRAM
Как делать великолепные приложения

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

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

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

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

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

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

😃 iOS Dev
Please open Telegram to view this post
VIEW IN TELEGRAM
Как работать с MeshGradient в iOS 18

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

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

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

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

😃 iOS Dev
Please open Telegram to view this post
VIEW IN TELEGRAM
Реализация загрузчика файлов в SwiftUI

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

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

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

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

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

😃 iOS Dev
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
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
Please open Telegram to view this post
VIEW IN TELEGRAM
ReviewBuddy — приложение для трекинга оценок в AppStore или как сменить регион, не внося изменения в Apple ID

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

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

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

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

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

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

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

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

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

😃 iOS Dev
Please open Telegram to view this post
VIEW IN TELEGRAM
Будьте внимательны к UserDefaults: история о труднодоступных ошибках и потерянных данных

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

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

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

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

😃 iOS Dev
Please open Telegram to view this post
VIEW IN TELEGRAM
Исследование причин зависаний приложений — серия уроков от Apple

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

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

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

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

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

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

😃 iOS Dev
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
Please open Telegram to view this post
VIEW IN TELEGRAM
Рисование кастомных фигур в SwiftUI: примеры и код

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

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

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

😃 iOS Dev
Please open Telegram to view this post
VIEW IN TELEGRAM
Как работать с passkeys в iOS-приложении

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

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

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

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

😃 iOS Dev
Please open Telegram to view this post
VIEW IN TELEGRAM
Проектирование сетевого слоя в iOS

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

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

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

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

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

😃 iOS Dev
Please open Telegram to view this post
VIEW IN TELEGRAM
Отрисовка графики на Apple Vision с помощью Metal Rendering API

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

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

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

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

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

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

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

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

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

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

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

😃 iOS Dev
Please open Telegram to view this post
VIEW IN TELEGRAM
2024/11/20 08:28:11
Back to Top
HTML Embed Code: