iOS Broadcast
3.31K subscribers
1.7K photos
84 videos
973 links
Подборка новостей и статей для iOS разработчиков.

Новости Kotlin и мультиплатформы @kotlin_broadcast
Новости Android @android_broadcast
Реклама и прочее @android_broadcast_bot
Download Telegram
📱 Рисование символов на холсте
Простая статья для начала недели про отрисовку символов на холсте. Холст - тип представления для рисования динамической графики в SwiftUI. Главная особенность - обработка рендеринга сложных фигур эффективнее, чем создание нескольких вьюх
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
3
🐥 Объединение интерфейсов с помощью шаблона адаптер
Простой пример использования паттерна адаптер в повседневной жизни-адаптация интерфейсов к Swift Concurrency. Шаблон помогает интегрировать сторонние API-интерфейсы или устаревший код без полной переделки.

Пример интеграции стороннего SDK:
🟢Приложение ожидает протокол SearchService с async
🟢Интегрируется сторонний SDK с интерфейсом с комплишн хэндлером
🟢API SDK использует разные имена методов и возвращает нетипизированные результаты.
Создание адаптера
🟢Создается класс - адаптер, удовлетворяющий протоколу сервиса.
🟢Адаптер преобразует результаты в формат, ожидаемый приложением.

Преимущества:
➡️Шаблон адаптера сохраняет инкапсуляцию и четкое разделение доменов.
➡️Код остается устойчивым к изменениям
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3
🐥 От амфитеатров к приложениям: эволюция пользовательского опыта
Пока нахожусь в дороге, добавил себе несколько статей в самолет и эта единственная, которая меня зацепила, интересный взгляд на дизайн пользовательского опыта:
🟢UX развивался от древнеримских архитекторов до современных цифровых интерфейсов.
🟢Римский Колизей был примером продуманного пользовательского опыта.
UX всегда был ориентирован на людей
🟢Люди разрабатывали дизайн с учетом потребностей пользователей с древних времен.
🟢Средневековые соборы строились с учетом эмпирического мышления.

Цифровой сдвиг
🟢В середине 20-го века развитие авиации и вычислительной техники привело к формализации подхода к удобству использования.
🟢В 1980-х годах появились графические пользовательские интерфейсы.

UX приобретает стратегический характер
🟢В начале 2000-х годов UX заняла свое место за столом переговоров.
🟢Джесси Джеймс Гарретт выделил уровни UX, подчеркнув важность стратегии.
UX против всего остального
🟢UX включает дизайн пользовательского интерфейса, дизайн продуктов, дизайн услуг и другие дисциплины.
🟢UX находится на переднем плане сцены, создавая полноценный опыт для пользователей.

Перспективы UX
➡️UX должен улучшать не только интерфейсы, но и организацию.
➡️Проблемы с ресурсами и недооценкой UX мешают организациям предоставлять исключительный опыт.
➡️Важно понимать, как ваше предложение услуг согласуется с пониманием UX клиентами.
➡️Клиенты могут просить "редизайн веб-сайта", но на самом деле им нужен полный пересмотр клиентского опыта.
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3
Forwarded from Android Broadcast
📹 Яндекс выпустила бесплатный видео курс по DivKit - Backend Drive UI Framework с открытым исходным кодом

Смотреть на 📹 YouTube или 📹 VK Video

#android #ios #bdui #sdui
Please open Telegram to view this post
VIEW IN TELEGRAM
3
🐥 Правильная обработка ошибок Swift: борьба с наследием Objective-C
Несмотря на то что Swift Error избавился от приставки NS, под капотом часто оказывается старый "добрый" NSError. Если не понимать как с ним правильно работать, сообщения об ошибках будут отображаться не корректно. Почти в каждом проекте есть набор утилит для того чтобы решить эту проблему, в статье же рассматривается готовое опенсорсное решение

Причина проблемы: мост NSError
🔴Протокол Error в Swift связан с Objective-C NSError
🔴Swift создает NSError с доменом и кодом, игнорируя локализованное описание

Официальное решение: LocalizedError
🟢Протокол LocalizedError предоставляет локализованные сообщения. Но тут тоже есть проблемы: необязательные свойства, игнорирование других свойств, устаревший подход

Альтернативное решение: Протокол Throwable
🔵Опенсорсная библиотека ErrorKit предоставляет протокол Throwable, который устраняет проблемы LocalizedError
🔵ErrorKit включает встроенные типы ошибок для распространенных сценариев, например NetworkError, FileError, DatabaseError, ValidationError, PermissionError

Не буду приводить тут выводы из статьи, она явно расхваливает конкретную библиотеку. Но посмотреть в исходники и модифицировать свои обработчики ошибок, может быть полезно.
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
4🔥1
📱➡️🧱 Одна строка кода для окирпичивания iPhone
Очень интересный обзор уязвимости в iOS, стоимостью в 17,500$ которая окирпичивала iPhone. Внедрение эксплойта происходит через устаревший API уведомлений Darwin. Уведомления Darwin используются для обмена сообщениями между процессами в операционных системах Apple. Уязвимость позволяет любому процессу в системе регистрироваться для получения уведомлений из своей "песочницы". Очень советую почитать, интересна не сама уязвимость, а пример того как происходит воспроизведение и исправление уязвимости. Apple получила отчет об уязвимости и выпустила фикс, ограничивающий права на отправку конфиденциальных уведомлений Darwin.
➡️ 26 июня: Начальный репорт с демо приложением "окирпичивателем"
➡️ 27 сентября: Репорт взят в работу
➡️ 11 марта: Репорт отмечен как исправленный в iOS 18.3
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥3🤔21
🐥 Оптимизация отрисовки SwiftUI
Понимание работы SwiftUI, инвалидации View, процесса диффа вьюх очень важно, но не менее важно уметь это профайлить. Пример слева демонстрирует распространенные ошибки в SwiftUI:
➡️ Прокрутка списка с более 20 пунктами вызывает фризы
➡️ Профилируем проблемы с рендерингом
➡️ Обнаруживаем, что каждый элемент пересчитывается несколько раз при прокрутке

Оптимизация View:
➡️ Извлечение отдельных View для уменьшения повторных вычислений
➡️ Использование EquatableView для пропуска ненужных рендеров.

Волшебство EquatableView и транзакций:
🟢SwiftUI использует Equatable view для оптимизации обновлений не изменившихся элементов
🟢Управление транзакциями предотвращает ненужные повторные вычисления
🟢Оптимизация привела к уменьшению обновлений на 40% и плавной прокрутке

Вывод
Лучше сразу делать с минимальной гигиеной (Equatable) и уже при появлении проблем профилировать бутылочные горлышки со знанием дела и мест пристального внимания.
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥13👍21
Forwarded from Compose Broadcast
🔥⚙️ Compose iOS теперь Stable

Самый громкий и важный анонс в истории Compose Multiplatform с выходом версии 1.8.0

Что именно готово для продакшен применения
👉 Все основные фичи из Jetpack Compose работают на iOS
👉 Типобезопасная навигация с поддержкой deep link
👉 Гибкое управление ресурсами
👉 Поддержка iOS Accessibility API
👉 Ощущения от UI приложения как нативного (скрол, редактирование текста, drag-and-drop, адаптивный UI, навигация жестами и пр)
👉 Производительность UI на Compose близка к SwiftUI, но пока немного уступает

Новая эра мобильной разработки уже тут!

#compose #ios
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
👍12🤔9