iOS Broadcast
3.32K subscribers
1.71K photos
85 videos
976 links
Подборка новостей и статей для iOS разработчиков.

Новости Kotlin и мультиплатформы @kotlin_broadcast
Новости Android @android_broadcast
Реклама и прочее @ab_manager
Download Telegram
Улучшите архитектуру Вашего Кода с помощью принципов SOLID (с примерами Swift)
Начинаем неделю с моей любимой рубрики, статья от подписчика Maxim Egorov. Тема статьи никогда не устареет, понимание применения SOLID принципов поможет вам улучшить ваш код. SOLID помогает писать чистый, масштабируемый и поддерживаемый код. Следование принципам уменьшает зависимости, повышает гибкость и упрощает расширение и тестирование.
⌨️ Принцип единой ответственности. Каждый объект должен выполнять только одну задачу и иметь только одну причину для изменения
⌨️ Принцип открытия/закрытия. Код должен быть открыт для расширения, но закрыт для модификации
⌨️ Принцип замещения - Лисков. Подклассы должны заменять родительский класс без изменения логики программы
⌨️ Принцип разделения интерфейсов. Классы не должны принуждаться к реализации методов, которые им не нужны
⌨️ Принцип инверсии зависимостей. Модули высокого уровня не должны зависеть от модулей низкого уровня

Выводы
🔵Применение принципов SOLID делает код стабильным, адаптируемым и устойчивым к сложности
🔵SOLID помогает предотвратить хаос в проектах
🔵Улучшает организацию, поддержку, тестирование и расширение кода
🔵SOLID помогает создавать масштабируемые и гибкие архитектуры
#solid
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
👍7🔥1
🔨 CryptoKit. Криптография с открытым ключом
Базовое понимание принципов криптографии помогает понять как работает защита информации, как совершаются атаки и что такое доверительные цепочки. Проще всего разобраться в теории с примерами и данная статья как раз про это. Криптография с открытым ключом основана на паре связанных ключей: открытый и закрытый. Открытый ключ используется для шифрования, закрытый — для расшифровки. Получение закрытого ключа из открытого невозможно с точки зрения вычислений.
Варианты использования криптографии с открытым ключом:
🟣Шифрование: открытые ключи используются для безопасного обмена ключами с симметричным шифрованием.
🟣Цифровые подписи: подтверждают подлинность сообщения, хэшируя его и шифруя с помощью закрытого ключа.

Алгоритмы с открытым ключом, поддерживаемые CryptoKit:
🟡P256/P384/P521 (NIST curves) — стандартизированы и соответствуют государственным стандартам безопасности.
🟡Curve25519 — более эффективна и устойчива к атакам, рекомендуется для современных применений.
#CryptoKit
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥3
This media is not supported in your browser
VIEW IN TELEGRAM
⚡️🧑‍💻⚡️ Объявлены даты #WWDC25
В этом году WWDC пройдёт с 9 по 13 июня, начало в 20:00 GMT+3. Анимация как всегда содержит намек, похоже, утечки про редизайн в стиле VisionOS были правдивы

📹 AppleDeveloper - трансляция так же будет на ютубе
🈸 Apple Developer - приложение с дополнительным контентом и трансляциями

🗓 Добавить в календарь WWDC чтобы не забыть
Please open Telegram to view this post
VIEW IN TELEGRAM
2
🐥 Под капотом асинхронных функций. Как работает Swift Concurrency
Swift Concurrency становится неотъемлемой частью iOS-приложений. Но сессии WWDC часто оставляют вопросы о деталях реализации без ответов. Статья поможет понять, как работает параллелизм Swift

Асинхронные функции
🔵Асинхронный контекст означает, что функция находится внутри асинхронной функции или замыкания
🔵Синхронный контекст по умолчанию, большая часть кода выполняется в нем
🔵Для переключения на асинхронный контекст используются неструктурированные параллельные задачи

Async → await
🔵Ожидание позволяет писать асинхронный код в более последовательном виде
🔵Ожидание освобождает поток для других задач
🔵Продолжение хранит состояние выполнения асинхронной функции

Tasks
🔵Задачи выполняют асинхронные функции, как потоки выполняют синхронные
🔵Задачи могут быть созданы явно или неявно
🔵Задачи могут находиться в трех состояниях: приостановленный, запущенный, планируемый

Jobs
🔵Работы происходят между точками приостановки в рамках задачи.
🔵Каждое асинхронное задание состоит из трех частей: перед работой, ожидание асинхронной работы, после работы
🔵Асинхронная работа разбивает функции на синхронные блоки, каждый из которых представляет собой асинхронную работу
🔵Задания создаются во время выполнения, но их структура определяется при компиляции
🔵Задания выполняются последовательно, с возможностью приостановки

Actors
🔵Акторы изолируют вызовы асинхронных функций, позволяя безопасно делиться состоянием с другими задачами
🔵Акторы обеспечивают потокобезопасный доступ к изменяемому состоянию
🔵Исполнители управляют приоритетами работы и организуют потоки для выполнения заданий

Executors
🔵Swift не предоставляет явный планировщик, но среда выполнения неявно ставит задания в очередь к исполнителям
🔵Контекст выполнения определяет, какой исполнитель должен выполнять задание
🔵Фактическая точка приостановки возникает при переключении контекстов выполнения

Совместный пул потоков (CTP)
🔵CTP ограничивает количество потоков количеством ядер процессора, что предотвращает перегрузку ресурсов
🔵Основной поток обрабатывает обновления пользовательского интерфейса и может быть переведен в спящий режим при отсутствии работы

Параллелизм Swift устраняет проблемы с обратным вызовом и предлагает более понятный синтаксис. Для полного понимания параллелизма в Swift требуется время и практика
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
👍6🔥2
📚 ModelActor - это просто странно
Продолжаю внимательно смотреть с забора на использование SwiftData на проде. Если в pet-проектах всегда все хорошо, то на проде совсем не так. ModelActor вызывает много вопросов и проблем. Он защищает контекст модели, но не является потокобезопасным. ModelActor использует пользовательский actor executor, что необходимо для совместимости с Core Data.

Странное поведение ModelActor
🔴ModelActor может выполнять код в основном потоке, что не соответствует ожиданиям.
🔴ModelActor не имеет явного доступа к основному потоку, что делает его использование сложным.

Контекст создания ModelActor
🔴Модель Actor зависит от контекста создания.
🔴Создание в основном потоке приводит к использованию основного потока для изоляции.
🔴Создание в фоновом режиме приводит к обычному поведению.

Фоновый доступ к ModelActor
🔴Для фонового доступа к ModelActor необходимо использовать неизолированную асинхронную функцию.
🔴Модель Actor не является Sendable, что требует переноса работы в actor.

Все детали того как можно обойти эти проблемы детально рассмотрены в статье.
#SwiftData
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
1
🐥 Представляем Swiftly 1.0
Пока мы спали, команда Apple представила в своем блоге новый инструмент - swiftly. Это первая стабильная версия менеджера версий Swift. Он избавляет от необходимости устанавливать и обновлять набор инструментов Swift вручную. Поддерживает macOS и Linux. Разработан командой SPM на swift и использует Foundation, Async HTTP Client и Swift OpenAPI для взаимодействия с блогом swift.org. Можно посмотреть реализацию в репе.

Особенности
🟢Установка и обновление Swift toolchain
🟢Поддержка ночных снапшотов и старых версий swift
🟢Переключение между установленными наборами инструментов
🟢Установка через swift.org/install
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥10👍3
🐥 Ожидание нескольких асинхронных задач в Swift
Группы задач позволяют выполнять несколько параллельных задач и ждать их завершения. async let синтаксис предлагает неявный способ работы с группами задач.

1️⃣Пример использования асинхронного запуска
🔵Две асинхронные задачи taskA и taskB
🔵Вам нужно обработать результат выполнения двух задач
🔵При использовании await дважды выполнение будет приостановлено дважды

2️⃣Реализация через withTaskGroup
🔵Создаём группу задач с двумя дочерними задачами taskA и taskB
🔵Задачи A и B выполняются одновременно
🔵Код стал оптимальнее но сложнее в восприятии

3️⃣Упрощение через async let
🔵В Swift есть синтаксический сахар для API групп задач - async let
🔵Задачи A и B выполняются одновременно
🔵Код остался оптимальным и простым
🔵Нет ключевого слова await, async let отложено инициализирует значения, как только асинхронная задача вернёт свой результат
Please open Telegram to view this post
VIEW IN TELEGRAM
👍93