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

Новости Kotlin и мультиплатформы @kotlin_broadcast
Новости Android @android_broadcast
Реклама и прочее @android_broadcast_bot
Download Telegram
🐥 Использование синглтонов в Swift 6
Каким бы антипаттерном не был синглтон, но про него продолжают писать и спрашивать. Синглтоны вызывают проблемы, портят тестируемость и увеличивают связанность. Предпочтительнее явная передача зависимостей.
Проблемы синглтона:
🟢Swift 6 не любит отправляемые типы и глобальное изменяемое состояние.
🟢 В Swift 6 возникают проблемы с одиночными и совместно используемыми экземплярами
🟢Для устранения ошибок с глобальным изменяемым состоянием можно использовать изоляцию или неизолированные (небезопасные) свойства.
🟢Важно быть осторожным при использовании неизолированных (небезопасных) свойств и @unchecked Sendable для временного решения проблем

У вас есть синглтоны в продуктах? 👍👎
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
👍23👎52
📱 Рисование символов на холсте
Простая статья для начала недели про отрисовку символов на холсте. Холст - тип представления для рисования динамической графики в 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
🔥4🤔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