en
Feedback
AppFiles - Mobile Development

AppFiles - Mobile Development

Open in Telegram

Библиотеки, обучающие статьи, курсы и видео для (мобильных) разработчиков. Если есть вопросы - пишите @lbogolubov.

Show more
2 173
Subscribers
+224 hours
+47 days
+930 days
Posts Archive
BlazeDB - нативная для Swift встраиваемая база данных для локального хранения данных BlazeDB - встраиваемая зашифрованная одн
BlazeDB - нативная для Swift встраиваемая база данных для локального хранения данных BlazeDB - встраиваемая зашифрованная однопроцессная документная база данных для Swift с ACID-транзакциями, восстановлением после сбоев на основе журнала предзаписи и шифрованием AES-256-GCM при хранении. Для каждой базы данных создаётся отдельный зашифрованный файл. Не требует отдельного сервера и обязательных сетевых запросов. BlazeDB на GitHub: https://github.com/Mikedan37/BlazeDB Платформа: iOS ⭐️: 13 👨‍🦯‍➡️ AppFiles: код, инструменты, практики, производительность

Нам всем нужен такой учебник
Нам всем нужен такой учебник

Copy-on-Write в Swift: подготовка к собеседованию За годы я сидел по обе стороны стола: и как кандидат, и как собеседующий — в том числе на позиции в крупные продуктовые компании. И именно Copy-on-Write раз за разом оказывался той темой, на которой видно разницу между «слышал слово» и «понимаю механизм». Тема звучит обманчиво просто — «копируем только при записи», — но крупняк любит докапываться до формулировок: не «массив копируется по значению», а когда именно копируется буфер, что проверяется перед записью, почему у функции проверки именно такая сигнатура. Один неаккуратный оборот — и за него тут же цепляются уточняющим вопросом. Сразу скажу про планку ожиданий, чтобы снять тревогу: на практике от кандидата редко хотят академически точного описания рантайма Swift до последнего бита. Хотят, чтобы вы держали в голове рабочую модель («struct снаружи, общий буфер с refcount внутри, копия на первой записи в разделяемый буфер») и могли её развернуть на пару уровней вглубь, не плавая в базовых понятиях вроде семантики значения и ссылки. Сидя по другую сторону стола, я отсекаю не тех, кто не знает внутренностей компилятора, а тех, кто путается в фундаменте и выдаёт заученные фразы, под которыми ничего нет. Поэтому статья идёт от фундамента к деталям: сначала то, что обязательно надо понимать, потом то, чем можно приятно удивить. Статья: https://habr.com/ru/articles/1052522/ Платформа: iOS 👨‍🦯‍➡️ AppFiles: код, инструменты, практики, производительность

Искусственный интеллект провел со мной собеседование на должность iOS-разработчика Две недели назад я искал новые возможности
Искусственный интеллект провел со мной собеседование на должность iOS-разработчика Две недели назад я искал новые возможности для заработка и наткнулся на платформу экспертов micro1. Идея у неё простая: вы используете свои профессиональные знания, чтобы помогать в обучении нового поколения моделей искусственного интеллекта. Я ввёл в поиске «iOS» и нашёл две вакансии iOS-разработчика. Требования были вполне привычными: знание Swift, UIKit и SwiftUI, несколько лет опыта, почасовая оплата. Я отправил заявку. В тот момент я ещё не понимал, кто — или что именно — будет проводить со мной собеседование. Статья: https://apptractor.ru/info/articles/iskusstvennyy-intellekt-provel-so-mnoy-sobesedovanie-na-dolzhnost-ios-razrabotchika.html Платформа: собеседование 👨‍🦯‍➡️ AppFiles: код, инструменты, практики, производительность

Хардкорная агентская разработка под iOS, часть 1: отдельный Mac Mini для агентов Я не раз ловил себя на мысли, что я уже давн
Хардкорная агентская разработка под iOS, часть 1: отдельный Mac Mini для агентов Я не раз ловил себя на мысли, что я уже давно только и делаю, что жму “allow”, “allow everytime”, редко вникая в суть того, что спрашивает агент, но полностью доверить агенту делать всё, что ему заблагорассудится, мне как-то боязно. Всё-таки на основном макбуке много личных и рабочих данных, которые агент может случайно (или через prompt injection) удалить или слить в сеть. Стрёмно. Поэтому я какое-то время играл в игру “я типа читаю, что ты у меня спрашиваешь”. Хотя правильное решение — запуск агента в режиме YOLO (в случае claude — с флагом --dangerously-skip-permissions). И тогда при правильной постановке задачи агент может часами сам работать и делать то, что нужно, уведомляя меня только по выполнении. Это первая статья цикла. Здесь — базовая настройка Mac Mini и вся возня с SSH, чтобы YOLO-агент работал на отдельной машине без ручного ввода паролей и переживал разрывы сети. Специфику iOS-разработки (git worktree, параллельное тестирование, idb, прогон приложения, грабли симулятора и прочее) я вынес в следующие части, так что статья будет полезна не только iOS-разработчикам, но и всем, кто хочет запускать YOLO-агентов и не париться о безопасности. С некоторыми оговорками, разумеется, подробности ниже. Статья: https://habr.com/ru/articles/1052174/ Платформа: iOS 👨‍🦯‍➡️ AppFiles: код, инструменты, практики, производительность

Composables UI - коллекция компонентов для Jetpack Compose и Compose Multiplatform Composables UI — это набор современных, ac
Composables UI - коллекция компонентов для Jetpack Compose и Compose Multiplatform Composables UI — это набор современных, accessible компонентов для Jetpack Compose и Compose Multiplatform. Jetpack Compose построен на основе Material Compose, реализации языка дизайна Google Material Design в Compose. Material Compose — отличная отправная точка для создания приложений с помощью Compose. Но он также воспринимается как библиотека компонентов, разработанная для создания приложений Google. Его сложно настраивать как в плане стиля, так и в плане пользовательского опыта. Вам либо нужно принять дизайнерские решения Material, либо перестраивать те же компоненты самостоятельно.  В то же время Jetpack Compose развивается за пределами Android благодаря Compose Multiplatform от JetBrains. Но Material Design выглядит неуместно за пределами Android, особенно на iOS. Material Compose также не разработан с учетом использования курсора. В результате приложения могут казаться слишком большими на настольных компьютерах и в веб-браузере. Именно эту проблему решает Composables UI, используя следующие принципы: • Универсальность: компоненты автоматически адаптируются к возможностям устройства, таким как сенсорный ввод, ввод с мыши и клавиатуры. • Открытый исходный код: код под лицензией MIT, который легко модифицировать. • Красивые настройки по умолчанию: авторы тщательно продумывают дизайн, чтобы вы могли создавать современные приложения для всех платформ без специальных навыков проектирования. • Возможность копирования и вставки: каждый компонент находится в отдельном файле, поэтому вы можете скопировать его напрямую. Composables UI на GitHub: https://github.com/composablehorizons/composables-ui Платформа: Android/кроссплатформа ⭐️: 37 👨‍🦯‍➡️ AppFiles: код, инструменты, практики, производительность

📺 Видео и подкасты за неделю • (iOS Ru) Архитектура, перформанс, дебаг: как мы делали медиаленту • (iOS Ru) SwiftSyntax: пиш
📺 Видео и подкасты за неделю(iOS Ru) Архитектура, перформанс, дебаг: как мы делали медиаленту(iOS Ru) SwiftSyntax: пишем свой DI framework(iOS En) iOS 27 Style Glass Sliders Using SwiftUI(iOS En) What's new in Swift and SwiftUI (WWDC 2026)(iOS En) Setting up Gemini in Xcode's Coding Agent(iOS En) Swift Macros Demystified: Build a Freestanding Expression Macro(iOS En) Weather App Style Sticky Scroll Section Using SwiftUI(And En) How to understand Play’s expanded billing options and lower fees(And En) Is THIS How Android Apps Communicate In Future? - Exploring the NEW AppFunctions(And En) NEW Scoped ViewModels API in Jetpack Compose(Crs Ru) Как мы внедряли Compose Multiplatform в Я.Team(Crs Ru) yx_state + yx_scope + yx_navigation: единый стек Flutter-приложений(Dev Ru) T-Shape мобильный разработчик(Dev Ru) Найм в эпоху AI — собеседования, IT найм, рынок труда Прошлогодние видео: • (iOS Ru) Молот и наковальня iOS-разработчика(iOS Ru) А так ли нужны акторы в Swift Concurrency?(iOS Ru) Реактивный Swift Concurrency(And Ru) Эти фичи Kotlin меняют правила игры(And Ru) Что не так с Android разработкой?(And Ru) Эволюция Android тестов с Marathon Test Runner 👨‍🦯‍➡️ AppFiles: код, инструменты, практики, производительность

SwiftStreamingMarkdown - рендеринг Markdown с поддержкой стриминга SwiftStreamingMarkdown - библиотека от Microsoft для ренде
SwiftStreamingMarkdown - рендеринг Markdown с поддержкой стриминга SwiftStreamingMarkdown - библиотека от Microsoft для рендеринга Markdown текста, поддерживающая плавную потоковую обработку. • Плавные и производительные переходы при поступлении нового текста • Нативный рендеринг встроенных и блочных формул LaTeX • Интерфейс встроенных ссылок на источники для ответов LLM • Гибкая настройка типографики, тем оформления и контекстных меню iOS • Встроенные инструменты для аналитики и отслеживания взаимодействий SwiftStreamingMarkdown на GitHub: https://github.com/microsoft/SwiftStreamingMarkdown Платформа: iOS ⭐️: 223 👨‍🦯‍➡️ AppFiles: код, инструменты, практики, производительность [/vc_message]

Сетчатые градиенты в Jetpack Compose Долгие годы сетчатые (mesh) градиенты были той прекрасной вещью, которую мы постоянно за
Сетчатые градиенты в Jetpack Compose Долгие годы сетчатые (mesh) градиенты были той прекрасной вещью, которую мы постоянно заимствовали с других платформ. Вы видели их повсюду — в I****, на обоях Apple, на маркетинговых страницах Stripe, в каждом файле Figma, созданном после 2022 года. SwiftUI добавил MeshGradient ещё в iOS 18. На Android мы обходились хитрыми шейдерными хаками и отличными сторонними библиотеками. Сейчас это изменится. Jetpack Compose теперь имеет собственный API для создания сетчатых градиентов, встроенный прямо в androidx.compose.ui. В этой статье мы рассмотрим, что это такое, нарисуем несколько примеров и поговорим о том, чем он отличается как от SwiftUI, так и от решений сообщества, которые вы, возможно, уже используете. Статья: https://apptractor.ru/info/articles/setchatye-gradienty-v-jetpack-compose.html Платформа: Android 👨‍🦯‍➡️ AppFiles: код, инструменты, практики, производительность

Как нарисовать тысячи объектов на карте и не убить FPS: эволюция рендера на Mapbox GL В прошлой статье про нетривиальные анимации я обещал показать «ту самую карту с облаками, zoom и движением по кривой Безье». Пришло время. Начну, правда, не с самой анимации, а с того, что было до неё: прежде чем что-то красиво анимировать на карте, надо это что-то на карте хотя бы нарисовать. Контекст: я делал геолокационную соцсеть. На карте – «облака», посты, привязанные к точке на местности. Их может быть много. Очень много. И вся история ниже – про то, как я пять раз упёрся в производительность и что с каждым разом делал. Статья: https://habr.com/ru/articles/1051362/ Платформа: iOS 👨‍🦯‍➡️ AppFiles: код, инструменты, практики, производительность

Anti-Vocale - транскрибация голосовых сообщений на Android Anti-Vocale - приложение для Android, позволяющее расшифровывать г
+2
Anti-Vocale - транскрибация голосовых сообщений на Android Anti-Vocale - приложение для Android, позволяющее расшифровывать голосовые сообщения локально на устройстве без подключения к интернету. Anti-Vocale перехватывает аудиофайлы, которыми делятся пользователи (из WhatsApp, Telegram и т. д.), расшифровывает их с помощью встроенных моделей распознавания речи и выводит результат в виде уведомления с возможностью копирования и обратной отправки одним касанием. Фичи: • Полностью автономный режим — вся обработка происходит на устройстве, данные не покидают ваш телефон • Несколько движков ASR — выбирайте между моделями Gemma (LLM), Whisper, Parakeet TDT, Qwen3-ASR или Nemotron 3.5 (потоковая передача) • Интеграция с функцией обмена — делитесь аудио из любого мессенджера для транскрипции • Цели обмена для конкретных моделей — выбирайте конкретную модель непосредственно из меню обмена Android • Повторная транскрипция — повторите любую транскрипцию с другой моделью • Умные уведомления — скопируйте результат или отправьте его обратно в исходное приложение одним касанием • Индикатор достоверности — отображает обнаруженный язык и предупреждает о результатах с низкой достоверностью • Прогрессивное отображение — текст транскрипции отображается по сегментам, вместо ожидания полного результата • Действия с помощью жестов — проведите пальцем по записям лога, чтобы скопировать, поделиться или удалить • Постоянный журнал транскрипции — все транскрипции сохраняются в локальной базе данных с возможностью поиска • Обработка с учетом очереди — обрабатывает несколько одновременных запросов с отображением прогресса • Оценка времени выполнения на основе калибровки — оценки прогресса улучшаются по мере адаптации модели к вашему устройству • Статистика производительности — отслеживайте реальную скорость транскрипции для каждой модели на вашем устройстве • Удаление тихих сегментов VAD — при необходимости удаляйте тихие сегменты перед транскрипцией для более быстрых результатов • Настраиваемые потоки вывода — автоматическое определение или ручная установка количества потоков для оптимизации производительности • Настройки для каждого приложения — настройте поведение уведомлений для каждого мессенджера • Картинка в картинке — смотрите транскрипцию в реальном времени в плавающем окне при использовании других приложений • Многоязычный интерфейс — интерфейс приложения полностью переведен на английский и итальянский языки • Автоматическое копирование — при необходимости автоматически копируйте транскрипцию в буфер обмена • Поддержка задач/автоматизации — запускайте транскрипцию с помощью широковещательных интентов Anti-Vocale на GitHub: https://github.com/RisorseArtificiali/anti-vocale Платформа: Android ⭐️: 19 👨‍🦯‍➡️ AppFiles: код, инструменты, практики, производительность

Пять ошибок начинающих Android‑разработчиков при работе с жизненным циклом Начинающие разработчики про это забывают, и через
Пять ошибок начинающих Android‑разработчиков при работе с жизненным циклом Начинающие разработчики про это забывают, и через месяц после релиза накапливаются утечки, после поворота экрана теряются данные форм, а после возврата из фона приложение крашится с NullPointerException в неожиданных местах. Разберём пять типичных ошибок, на которых сыпется почти каждый первый Android‑проект, и покажем, какие инструменты появились в современном Android‑стеке для борьбы с этой болью Статья: https://habr.com/ru/companies/otus/articles/1049294/ Платформа: Android 👨‍🦯‍➡️ AppFiles: код, инструменты, практики, производительность

AetherEngine - медиаплеер для iOS, tvOS и macOS AetherEngine — это движок медиаплеера для платформ Apple. FFmpeg демультиплек
AetherEngine - медиаплеер для iOS, tvOS и macOS AetherEngine — это движок медиаплеера для платформ Apple. FFmpeg демультиплексирует, VideoToolbox декодирует, AVPlayer обрабатывает Dolby Atmos. Он правильно обрабатывает сложные компоненты (HDR, Dolby Vision, Dolby Atmos, покрытие контейнеров, покрытие кодеков) и предоставляет один AetherPlayerView (UIKit / AppKit) или AetherPlayerSurface (SwiftUI) плюс несколько асинхронных методов. Нет AVPlayerViewController, нет настраиваемых элементов управления, нет аналитики. Привяжите представление, вызовите play(), считывайте опубликованные свойства для получения состояния. На платформах Apple реальный выбор сводится к AVPlayer, обладающему глубокой интеграцией с ОС, но работающему только с форматами, поддерживаемыми Apple, и движку на основе VLC или mpv, который воспроизводит практически всё, но обрабатывает собственные кадры и обходит встроенную обработку Dolby Vision, Atmos и HDR. AetherEngine создан для того, чтобы предоставить вам оба варианта: широкий спектр форматов FFmpeg, наложенный поверх VideoToolbox и AVPlayer, благодаря чему Dolby Vision, Atmos и Match Content продолжают работать. KSPlayer — ближайший аналог, он достигает того же результата тем же путём, что и AVPlayer, но поставляется как полноценный плеер со своим собственным пользовательским интерфейсом и ограничивает доступ к MKV, Dolby Vision и Atmos платным уровнем лицензии LGPL (бесплатная версия — GPL). AetherEngine — это встраиваемый движок, управляемый из вашего SwiftUI, с широким спектром кодеков и HDR в ядре с открытым исходным кодом. AetherEngine на GitHub: https://github.com/superuser404notfound/AetherEngine Платформа: iOS ⭐️: 84 👨‍🦯‍➡️ AppFiles: код, инструменты, практики, производительность

Preview-Driven скриншот тестирование для локалей, ключей и масштабов шрифта Некоторые работы в тестировании начинаются с ошиб
Preview-Driven скриншот тестирование для локалей, ключей и масштабов шрифта Некоторые работы в тестировании начинаются с ошибки. В данном случае всё началось с требования клиента. У них уже был внутренний процесс перевода, и частью этого процесса на веб-стороне была возможность видеть не только отрендеренный текст, но и его ключ. Таким образом, когда переводчик изменяет строку, ему гораздо понятнее, где она появляется и используется ли этот же ключ где-то ещё. Они хотели такой же видимости и на Android. На первый взгляд, это звучит как узкоспециализированное требование. На практике же это оказалось одним из самых полезных элементов UI инфраструктуры, которые я добавил за последнее время, потому что это перестало быть просто переводом и быстро стало полезным и для дизайнеров. Статья: https://apptractor.ru/info/articles/preview-driven-skrinshot-testirovanie-dlya-lokaley-klyuchey-i-masshtabov-shrifta.html Платформа: Android/тестирование 👨‍🦯‍➡️ AppFiles: код, инструменты, практики, производительность

Пять ошибок при работе с Jetpack Compose, из-за которых тормозит recomposition Jetpack Compose в 2026 году стал стандартом ра
Пять ошибок при работе с Jetpack Compose, из-за которых тормозит recomposition Jetpack Compose в 2026 году стал стандартом разработки UI на Android, но в проектах регулярно повторяется одна и та же история: на экране со списком в пару сотен элементов прокрутка идёт рывками, профайлер показывает скачки кадров до 200 миллисекунд, а команда чешет голову и предлагает откатиться обратно на RecyclerView. Проблема почти всегда не в Compose, а в том, как написан UI: recomposition спроектирован как дешёвая операция, но эта дешевизна работает только при соблюдении ряда правил, которые в документации описаны рассыпанно и часто игнорируются. Разберём пять ошибок, из-за которых производительность Compose-экранов проседает заметно для глаза, и покажем, как их находить и чинить. Статья: https://habr.com/ru/companies/otus/articles/1049282/ Платформа: Android 👨‍🦯‍➡️ AppFiles: код, инструменты, практики, производительность

Hydra - защита Android-приложения Hydra - Gradle-плагин RASP (Runtime Application Self-Protection) для Android. Добавьте его,
Hydra - защита Android-приложения Hydra - Gradle-плагин RASP (Runtime Application Self-Protection) для Android.  Добавьте его, как любой другой плагин сборки, и он динамически внедрит усиленный нативный слой защиты прямо в ваш APK — без кода, без вызовов SDK, без серверов. Примените плагин, соберите приложение, и полученный APK-файл будет защищенным. «Под капотом» применение Hydra добавляет в ваш APK сильно обфусцированное с помощью OLLVM нативное ядро (libdicore.so), уникальную для каждой сборки эталонную базу проверки целостности и рандомизированный загрузчик. Защита запускается в момент создания процесса и полностью работает на устройстве — в нативном коде. Задача Hydra — повысить стоимость атаки. Большинство атак носят массовый и оппортунистический характер и выполняются с помощью готовых инструментов. Если приложение не удаётся взломать за пять минут привычными средствами, злоумышленники часто переключаются на другую цель. Незащищённое приложение можно без труда перепаковать, перехватить его работу с помощью хуков и клонировать. В случае приложения, защищённого Hydra, атакующему сначала придётся разобраться с обфусцированным нативным кодом, механизмами самопроверки и безусловным применением защитных мер. Это не делает взлом невозможным, но задерживает его — а для большинства приложений именно такая задержка меняет экономику атаки. При этом защита не усложняет процесс разработки. Защита, которую можно включить одной строкой в конфигурации плагина, с большей вероятностью действительно попадёт в релиз. Поэтому Hydra придерживается принципа: лучше хорошая защита, которая реально применяется, чем идеальная защита, от которой отказались из-за сложности внедрения. Hydra на GitHub: https://github.com/iamjosephmj/hydra Платформа: Android ⭐️: 28 👨‍🦯‍➡️ AppFiles: код, инструменты, практики, производительность

Как мне удалось уменьшить размер классификатора болезней растений с 16 до 5 МБ с потерей точности менее 1% Я работал над прое
Как мне удалось уменьшить размер классификатора болезней растений с 16 до 5 МБ с потерей точности менее 1% Я работал над проектом по обнаружению болезней растений в рамках своих исследований в области периферийного ИИ, над проектом, где модель должна работать на Android-смартфоне фермера в деревне без интернета. Довольно быстро я столкнулся с проблемой, с которой рано или поздно сталкивается каждый специалист по машинному обучению. Модель точная, но слишком большая и медленная для реального мира. Обученная мной модель EfficientNetB0 достигла точности 96,33% на наборе данных PlantVillage с 15 классами. Отличный результат. Но модель весила около 16 МБ в формате float32. Для Android-смартфона среднего класса с нестабильным 4G-соединением и ограниченным объемом памяти это не идеально. В этой статье я расскажу о том, что я сделал дальше. Я пропустил модель через три конвейера квантизации: FP16, INT8 и экспорт ONNX, измерил изменения точности, размера и задержки, а затем развернул лучший формат в Android-приложении, работающем полностью в автономном режиме. Главный результат: квантизация INT8 уменьшила размер модели с 16 МБ до 5,25 МБ — снижение на 67% при потере всего 0,62% точности. Это тот компромисс, который делает реальное развертывание жизнеспособным. Статья: https://apptractor.ru/info/articles/kak-mne-udalos-umenshit-razmer-klassifikatora-bolezney-rasteniy-s-16-do-5-mb-s-poterey-tochnosti-menee-1.html Платформа: Android 👨‍🦯‍➡️ AppFiles: код, инструменты, практики, производительность

Как мы научились видеть иерархию корутин в Android‑приложении: Coroutine Tracer в библиотеке Demeter Отладка корутин в Androi
Как мы научились видеть иерархию корутин в Android‑приложении: Coroutine Tracer в библиотеке Demeter Отладка корутин в Android — задача, с которой сталкивается каждый разработчик, использующий Kotlin. На один экран могут приходиться десятки вызовов launch и async, но стандартные инструменты показывают потоки, а не корутины. В итоге, когда одна из корутин зависает, разработчик оказывается в тупике: отладчик показывает живой поток, но не показывает, какая корутина на нём выполнялась, в каком suspend‑вызове она остановилась и кто её запустил. Приходится искать причину вслепую — расставлять логи и пытаться воспроизвести проблему вручную.  Статья: https://habr.com/ru/companies/yandex/articles/1045576/ Платформа: Android 👨‍🦯‍➡️ AppFiles: код, инструменты, практики, производительность

«Это уже тысячу раз делали»: как мы добавили медиаленту в Яндекс Еду для iOS. А потом переделали Самое интересное в таких зад
«Это уже тысячу раз делали»: как мы добавили медиаленту в Яндекс Еду для iOS. А потом переделали Самое интересное в таких задачах начинается не на этапе «как добавить медиаленту», а на этапе ограничений и деградаций. В статье я разберу именно эту сторону задачи на примере приложения Яндекс Еды: как мы проектировали медиаленту, какие архитектурные решения не сработали, какие баги всплыли только на реальных данных, как мы строили observability для дебага и какие компромиссы в итоге оказались эффективнее красивой реализации. Статья: https://habr.com/ru/companies/yandex/articles/1048718/ Платформа: iOS 👨‍🦯‍➡️ AppFiles: код, инструменты, практики, производительность

JBird - быстрая, типобезопасная библиотека для работы с JSON в Swift Работа с JSON в Swift обычно означает выбор между двумя
JBird - быстрая, типобезопасная библиотека для работы с JSON в Swift Работа с JSON в Swift обычно означает выбор между двумя крайностями. JSONSerialization из Foundation предоставляет вам тип Any и заставляет вас приводить и распаковывать данные на каждом шаге. Codable типобезопасен, но негибок: он ожидает, что ваши типы Swift будут точно соответствовать данным, и доступ к одному полю произвольного документа неудобен. JBird закрывает этот пробел. Он моделирует JSON как первоклассное значение Swift, которое вы можете читать, обрабатывать и изменять напрямую — без потери типобезопасности — и сочетает эту модель с быстрым ядром парсинга на основе C. А когда вам нужно работать с конкретными типами Swift, JBird чисто преобразует их туда и обратно, подключая встроенный кодировщик и декодер Codable. JBird на GitHub: https://github.com/vsanthanam/JBird Платформа: iOS ⭐️: 18 👨‍🦯‍➡️ AppFiles: код, инструменты, практики, производительность