Warning: Undefined array key 0 in /var/www/tgoop/function.php on line 65

Warning: Trying to access array offset on value of type null in /var/www/tgoop/function.php on line 65
2120 - Telegram Web
Telegram Web
🐥 Использование синглтонов в 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
📱 Рисование символов на холсте
Простая статья для начала недели про отрисовку символов на холсте. Холст - тип представления для рисования динамической графики в SwiftUI. Главная особенность - обработка рендеринга сложных фигур эффективнее, чем создание нескольких вьюх
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🐥 Объединение интерфейсов с помощью шаблона адаптер
Простой пример использования паттерна адаптер в повседневной жизни-адаптация интерфейсов к 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
🐥 От амфитеатров к приложениям: эволюция пользовательского опыта
Пока нахожусь в дороге, добавил себе несколько статей в самолет и эта единственная, которая меня зацепила, интересный взгляд на дизайн пользовательского опыта:
🟢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
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
🐥 Правильная обработка ошибок 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
📱➡️🧱 Одна строка кода для окирпичивания 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
🐥 Оптимизация отрисовки 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
2025/07/01 21:15:56
Back to Top
HTML Embed Code: