AppFiles - Mobile Development
2.17K subscribers
3.27K photos
48 videos
13 files
4.28K links
Библиотеки, обучающие статьи, курсы и видео для (мобильных) разработчиков. Если есть вопросы - пишите @lbogolubov.
Download Telegram
Как эффективно отлаживать код, когда вы перестали его понимать

С развитием AI-кодинга возникает новая проблема: нейросети способны писать тысячи строк кода за день, но кто будет разбираться во всём этом, когда что-то сломается? Инженер Синди Шридхаран поделилась опытом отладки сложных систем с помощью Claude Code. В основе статьи — три реальные проблемы: рост задержек, утечка памяти и зависание сервиса.

Главная мысль: для эффективной отладки больше не обязательно понимать каждую строку кода. Важнее уметь проверять гипотезы ИИ.

Автор предлагает несколько принципов:

• Факты важнее объяснений. Логи, метрики, трассировки и результаты экспериментов надёжнее, чем убедительная история, которую рассказывает AI-агент.
• Разделяйте факты и гипотезы. Модель может предложить правдоподобную причину ошибки, но это ещё не доказательство.
• Сравнивайте работающую и сломанную системы. Иногда одно различие в поведении даёт больше информации, чем изучение тысяч строк исходников.
• Заставляйте ИИ опровергать собственные выводы. Хорошая гипотеза должна объяснять все наблюдаемые факты, а не только часть симптомов.
• Меняйте роль разработчика. Вместо ручного анализа каждой функции — проектирование проверок, сбор данных и контроль достоверности выводов AI-агентов.

Самый интересный вывод: программирование постепенно превращается из процесса написания и понимания кода в процесс управления его созданием и проверки корректности. И, возможно, главным навыком разработчика будущего станет не умение читать чужой код, а умение доказать, что он работает правильно.

Статья: https://copyconstruct.medium.com/how-to-effectively-debug-when-you-no-longer-understand-the-code-bd3dcb2c5f7b 🇺🇸
Платформа: разработка

👨‍🦯‍➡️ AppFiles: код, инструменты, практики, производительность
Please open Telegram to view this post
VIEW IN TELEGRAM
Куда девается место на диске: Xcode, рабочие деревья и ИИ-агенты

Несколько недель назад мои сборки начали странным образом падать. Сначала сломался этап линковки. Потом lipo. Затем кэш модулей начал жаловаться, что файл «был изменён после того, как был собран module file». Чистые сборки не помогали.

Оказалось, диск был заполнен. И ни одна из этих ошибок прямо об этом не говорила.

Такое начинает происходить гораздо чаще, когда в рабочем процессе появляются ИИ-агенты. Я запускаю по два-три агента одновременно, каждый в своём git worktree, каждый собирает приложение и запускает тесты. Каждое рабочее дерево также получает собственные копии симуляторов. Если агенты используют один и тот же симулятор, они начинают устанавливать свои сборки поверх чужих и нажимать кнопки на чужих экранах. Каждая сборка, каждый прогон тестов и каждая копия симулятора оставляют после себя гигабайты данных, и ничего из этого автоматически не очищается.

Статья: https://apptractor.ru/info/articles/kuda-devaetsya-mesto-na-diske-xcode-rabochie-derevya-i-ii-agenty.html
Платформа: iOS

👨‍🦯‍➡️ AppFiles: код, инструменты, практики, производительность
Please open Telegram to view this post
VIEW IN TELEGRAM
AsoBeast - self-hosted ASO-инструмент для отслеживания ключевых слов в App Store и Google Play

AsoBeast — это инструмент для App Store Optimization (ASO) и отслеживания позиций по ключевым словам в Apple App Store и Google Play. Он импортирует страницу приложения, ежедневно отслеживает позиции по ключевым словам до 200-го места, следит за конкурентами, отзывами и метаданными, а затем превращает накопленную историю в приоритетную очередь задач по ASO. Этот репозиторий содержит бесплатную версию с открытым исходным кодом, которую можно запустить на собственном сервере.

Каждый запрос к магазину выполняется непосредственно на машине, где размещён AsoBeast, как обычный публичный поисковый запрос или запрос страницы, поэтому Apple и Google видят каждую отслеживаемую фразу так же, как любой другой поисковый запрос. Вам не нужно регистрироваться у стороннего ASO-провайдера, покупать API-ключ или передавать стороннему ASO-сервису информацию о том, какие ключевые слова вы отслеживаете. За исключением этих запросов к магазинам, ваши данные остаются внутри вашего развёртывания, если только вы явно не включите внешнюю интеграцию, например webhook-уведомления, электронную почту, помощь OpenAI, данные о популярности запросов из Apple Ads или обновления статуса магазинов.

AsoBeast на GitHub: https://github.com/AsoBeast/asobeast
Платформа: ASO
⭐️: 53

👨‍🦯‍➡️ AppFiles: код, инструменты, практики, производительность
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1
This media is not supported in your browser
VIEW IN TELEGRAM
Dari — инспектор взаимодействия WebView bridge для Android

Dari — это библиотека-инспектор для отладки взаимодействия через Android WebView bridge, вдохновлённая Chucker. Она перехватывает и отображает все сообщения WebView ↔️ App bridge в постоянном уведомлении и во встроенном интерфейсе приложения, не требуя изменений существующей логики бриджа.

Возможности:

• Перехват в реальном времени сообщений Web→App и App→Web
• Отслеживание трёх состояний: IN_PROGRESS, SUCCESS, ERROR
• Поддержка тёмной темы
• Жест встряхивания для открытия инспектора
• Фильтр по статусу, чтобы сосредоточиться на ошибках или незавершённых вызовах
• Экспорт перехваченных сообщений в JSON
• Опциональная инспекция Protocol Buffers с декодером, предоставляемым приложением
• No-op модуль (dari-noop) для release-сборок без дополнительных затрат во время выполнения
• Поддержка вызовов fire-and-forget для одностороннего взаимодействия через бридж
• Одинаковый публичный API для debug- и release-артефактов

Dari на GitHub: https://github.com/easyhooon/dari
Платформа: Android
⭐️: 35

👨‍🦯‍➡️ AppFiles: код, инструменты, практики, производительность
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2
Измеряя незримое: что и как измерять в мобильной разработке (часть 2)

В прошлой статье мы рассмотрели несколько базовых метрик. В этой части поговорим о менее очевидных, но не менее полезных критериях и способах измерения различных аспектов мобильной разработки. Тема не новая, однако получила новый импульс благодаря развитию и широкому внедрению искусственного интеллекта (ИИ).

Статья: https://habr.com/ru/companies/domclick/articles/1090382/
Платформа: Android

👨‍🦯‍➡️ AppFiles: код, инструменты, практики, производительность
Please open Telegram to view this post
VIEW IN TELEGRAM
📺 Видео и подкасты за неделю

• (iOS Ru) Анатомия LazyVStack. Проблемы, скрытые возможности, оптимизации
• (iOS Ru) Влияние температурного режима на UX в iOS-приложениях
• (iOS En) iPhone Duo Group Lab + iPhone Duo Group Lab
• (iOS En) Top 6 Swift Concurrency Interview Questions Explained
• (iOS En) Animated Launch Screen With OnBoarding View Using SwiftU
• (iOS En) AI is now really good at building iOS apps
• (iOS En) iPhone Duo Is Here - What Happens to Your Existing iOS
• (iOS En) SwiftUI Animated App Theme Switcher
• (And Ru) 1 байт вместо 32: анатомия ScatterMap
• (And Ru) 15 лет Kotlin: ретроспектива
• (And Ru) А вы можете сказать, что все-таки такое «корутина» в Kotlin?
• (And En) From Android to QuakeCon: What 90s Game Engines Teach Us About Extreme Optimization
• (Crs Ru) Как превратить абстрактную задачу в оптимизационную на примере KMP-движка коллажей
• (Crs Ru) Swift для Android и кроссплатформы. Разбираем на практике
• (Crs Ru) CMP на ОС Аврора: с нуля до альфы
• (Crs Ru) Пробуем Сompose-alpha для ОС Аврора
• (Crs Ru) Под капотом изолятов и Garbage Collector Dart VM
• (Crs Ru) KMP Contest Winners | KotlinConfersations 2026
• (Dev Ru) Метрики плавности мобильных приложений
• (Dev Ru) Первый бескомпромиссный SDUI
• (Dev Ru) Разработчик вышел из кода
• (Dev Ru) Вуз в эпоху ИИ — развод на 4 года?
• (Dev Ru) Koog — твой друг: специализированный агент на Kotlin
• (Dev En) Line-by-line review of AI code is a mistake
• (Dev En) I didn't know I needed this new AI model so badly
• (Dev En) Design Software Systems Like a Senior Engineer – Complete Course

Прошлогодние видео:

• (And Ru) Семантический Gradle: публикуем артефакты со спокойствием и уверенностью
• (Dev Ru) Собеседование DS инженера в Авито: ML system design (все собеседования)

👨‍🦯‍➡️ AppFiles: код, инструменты, практики, производительность
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥1
Как фронтенд‑команде сделать мобильное приложение без нативных разработчиков

Нашей команде поставили задачу разработать мобильное приложение для iOS и Android. Нативных разработчиков на Swift и Kotlin в команде нет, зато половина хорошо знает Vue. Поэтому я как лид выбрал Vue и Capacitor — фреймворк, который упаковывает обычное веб‑приложение в нативную оболочку и даёт доступ к функциям телефона через JavaScript‑плагины.

Статья: https://habr.com/ru/articles/1094782/
Платформа: разработка

👨‍🦯‍➡️ AppFiles: код, инструменты, практики, производительность
Please open Telegram to view this post
VIEW IN TELEGRAM
Blueprint - генерация отладочных иконок

Blueprint - небольшая CLI-утилита для iOS/macOS-разработки, которая автоматически превращает обычную иконку приложения в blueprint-версию для Debug-сборок, примерно в стиле иконки Xcode. Главная идея: чтобы тестовую/отладочную сборку на устройстве было сразу видно и не перепутать с продакшеном.

Она умеет работать как с новыми файлами Icon Composer .icon, так и с обычными AppIcon.appiconset. На выходе она создаёт отдельную иконку вроде AppIconDebug.icon или AppIconDebug.appiconset, после чего её можно назначить для Debug-конфигурации через ASSETCATALOG_COMPILER_APPICON_NAME. Исходную иконку библиотека не перезаписывает. 

Blueprint на GitHub: https://github.com/MustafaNatur/blueprint
Платформа: iOS
⭐️: 114

👨‍🦯‍➡️ AppFiles: код, инструменты, практики, производительность
Please open Telegram to view this post
VIEW IN TELEGRAM
Как я проектирую SwiftUI-приложения с Swift Concurrency, чтобы компилятор не выдавал предупреждений

Структурирование SwiftUI-приложения для меня всегда сводилось к одним и тем же целям: хорошо организованный код, компоненты, каждый из которых выполняет одну задачу, и приложение, которое остаётся поддерживаемым по мере роста. Я хочу быстро находить нужные вещи, менять одну функцию, не ломая остальные, и использовать превью без зависимости от сервера.

Swift concurrency добавила ко всему этому ещё одну проблему, и довольно болезненную. Как только появляются сеть, кэширование или аутентификация, компилятор начинает жаловаться. Ошибки Sendable, ошибки изоляции main actor, предупреждения о гонках данных. Добавляешь где-нибудь @MainActor, и новая ошибка появляется уже в другом месте. В какой-то момент начинаешь задаваться вопросом: Swift concurrency вообще нормально работает со SwiftUI? И если да, то как нужно структурировать приложение, чтобы они не конфликтовали друг с другом?

Работает. В этой статье я покажу, как структурирую свои SwiftUI-приложения, чтобы они оставались организованными и удобными в поддержке, а SwiftUI и Swift concurrency работали вместе, а не друг против друга.

Статья: https://apptractor.ru/info/articles/kak-ya-proektiruyu-swiftui-prilozheniya-s-swift-concurrency.html
Платформа: iOS

👨‍🦯‍➡️ AppFiles: код, инструменты, практики, производительность
Please open Telegram to view this post
VIEW IN TELEGRAM
Mac.apk - запуск Android-приложений нативно на Apple Silicon

Mac.apk запускает Android-приложения непосредственно на Apple Silicon. Приложения стартуют как обычные процессы macOS, отрисовывают графику через GPU Mac и выполняются на CPU с нативной скоростью. Они появляются в Dock, получают собственные окна с кнопкой «Назад» рядом со стандартными кнопками управления окном, могут менять размер и ориентацию как обычные окна macOS и автоматически переключаются между светлой и тёмной темой вместе с Mac. Android TV-приложениями можно управлять с клавиатуры, а игровые лаунчеры способны запускать другие установленные приложения.

Здесь нет ни эмулятора, ни виртуальной машины. В фоне не загружается Android, под системой не работает ядро Linux, а инструкции не интерпретируются одна за другой. Mac.apk напрямую реализует среду выполнения Android-приложений поверх macOS.

Mac.apk на GitHub: https://github.com/kksimp/Mac.apk
Платформа: Android
⭐️: 901

👨‍🦯‍➡️ AppFiles: код, инструменты, практики, производительность
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1
Swift на Android: путь к сингулярности. От анонса SwiftJava до полноценного приложения

Сегодня мы с вами обсудим наработки от Apple. Какую технологию они представили еще в 2025 году, что изменилось со времени, как Apple выпустили официальный релиз Swift SDK для Android. А также мы посмотрим, как написать настоящее приложение, где вся бизнес-логика живёт на Swift, а UI на Compose.

Статья в двух частях: первая и вторая
Платформа: кроссплатформа

👨‍🦯‍➡️ AppFiles: код, инструменты, практики, производительность
Please open Telegram to view this post
VIEW IN TELEGRAM
This media is not supported in your browser
VIEW IN TELEGRAM
Гравицапа для GPU: OpenGL ES на Kotlin DSL на примере 3D‑«Жизни» Конвея

Наконец‑то я закончил работу над новым большим блоком RedByteFX, тем самым, который в планах звучал скромно: «а ещё было бы неплохо OpenGL ES». «Неплохо» растянулось на много вечеров и вылилось в версию 1.2.0, которая уже лежит в Maven Central. Если коротко: теперь на Kotlin DSL можно писать не только эффекты для Compose, но и полноценную 3D‑графику и вычисления на GPU. Если подробно, то читайте дальше: я покажу всё на живом примере и сравню с тем, как пришлось бы писать без библиотеки.

Статья: https://habr.com/ru/articles/1095948/
Платформа: Android

👨‍🦯‍➡️ AppFiles: код, инструменты, практики, производительность
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥2
Производительность SwiftUI: как находить перерисовки в Xcode Instruments

Проблемы с производительностью SwiftUI часто сводятся к двум вещам: представления либо перерисовываются слишком часто, либо их body выполняется слишком долго. Прежде чем что-то исправлять, нужно понять, какие именно представления виноваты и что вызывает их обновление. Xcode Instruments способен показать это довольно точно — если знать, где смотреть.

В этой статье я покажу, как находить перерисовки SwiftUI и измерять их стоимость в Xcode Instruments. Мы запишем трассировку с шаблоном SwiftUI, изучим дорожку SwiftUI и представления View Body Updates, чтобы увидеть, какое представление сколько раз обновляется, сколько занимает каждое обновление и что именно его вызвало. Если вы раньше пользовались Self._printChanges(), то Instruments — следующий шаг, когда нужно понять, сколько эти перерисовки реально стоят.

Статья: https://apptractor.ru/info/articles/proizvoditelnost-swiftui-kak-nahodit-pererisovki-v-xcode-instruments.html
Платформа: iOS

👨‍🦯‍➡️ AppFiles: код, инструменты, практики, производительность
Please open Telegram to view this post
VIEW IN TELEGRAM
SimulatorCamera - камера для iOS-симулятора

У iOS Simulator никогда не было настоящей камеры. AVCaptureDevice возвращает nil. Любое приложение, которое работает с камерой — сканеры QR-кодов, считыватели штрихкодов, захват документов, ML-конвейеры, AR-прототипы, видеозвонки, — либо подменяет работу камеры заглушкой, либо запускается только на физических устройствах, либо содержит ненадёжный запасной вариант вроде «использовать фото вместо камеры».

SimulatorCamera регистрирует виртуальную камеру на системном уровне macOS с помощью API Apple CMIOExtension. iOS Simulator в Xcode 16+ видит эту виртуальную камеру через стандартный AVFoundation. Ваш существующий код с AVCaptureSessionпросто работает. Никакой интеграции SDK. Никаких изменений в Info.plist. Никаких веток #if targetEnvironment(simulator).

Что вы получаете:

• Веб-камера Mac → iOS Simulator — существующее приложение получает кадры с частотой 30 FPS и разрешением 1280×720
• Видео как источник — можно использовать любой MP4 / MOV / HEVC, воспроизведение зацикливается без разрывов
• Статичное изображение как источник — выберите PNG / JPG, и оно станет видеопотоком камеры
• Генератор QR-кодов — программная генерация QR для тестирования сканеров
• Тестовый шаблон — встроенные цветные полосы / движущаяся полоса, всегда доступны
• CLI simcamctl — например, simcamctl set-source --qr "TOKEN" для CI и ИИ-агентов
• Никакого SDK — вашему iOS-приложению не нужно импортировать или линковать что-либо из этого проекта
• Физическое устройство не требуется — всё работает целиком внутри iOS Simulator
• Бесплатно, открытый исходный код, лицензия MIT — можно форкать, распространять, продавать, никаких отчислений

SimulatorCamera на GitHub: https://github.com/dautovri/SimulatorCamera
Платформа: iOS
⭐️: 59

👨‍🦯‍➡️ AppFiles: код, инструменты, практики, производительность
Please open Telegram to view this post
VIEW IN TELEGRAM
Как Grab сократил ANR на 32% и улучшил время запуска на 35% благодаря R8

Grab — ведущий суперапп Юго-Восточной Азии, который предлагает доставку, транспортные и финансовые услуги миллионам пользователей в восьми странах через одно приложение. За 10 лет кодовая база выросла до более чем 10 млн строк кода и сотен сторонних библиотек, а сборка использовала гибридную связку Bazel и Gradle. В итоге команда столкнулась с тремя растущими проблемами: высоким уровнем ошибок Application Not Responding (ANR), постоянно увеличивающимся размером приложения и постепенно ухудшающимся временем запуска. Включив оптимизацию R8, доработав keep rules и внедрив Baseline Profiles и Startup Profiles, Grab снизил воспринимаемый пользователями уровень ANR на 32%, уменьшил размер загрузки приложения примерно на 30% и ускорил запуск на 35%.

Статья: https://apptractor.ru/info/articles/kak-grab-sokratil-anr-na-32-i-uluchshil-vremya-zapuska-na-35-blagodarya-r8.html
Платформа: Android

👨‍🦯‍➡️ AppFiles: код, инструменты, практики, производительность
Please open Telegram to view this post
VIEW IN TELEGRAM
This media is not supported in your browser
VIEW IN TELEGRAM
Sketchy - рисованные анимированные иллюстрации и empty states для Compose Multiplatform

Sketchy — это библиотека Kotlin Multiplatform с иллюстрациями в стиле набросков и линейной графики — тёплыми, «человечными» изображениями, которые хорошо подходят для онбординга и пустых состояний. Все они полностью рисуются через Canvas, изначально поддерживают анимацию и полностью настраиваются под тему вашего приложения. Библиотека работает на Android, iOS, desktop и web из одного source set commonMain.

Sketchy на GitHub: https://github.com/Ali0092/Sketchy
Платформа: Android/кроссплатформа
⭐️: 39

👨‍🦯‍➡️ AppFiles: код, инструменты, практики, производительность
Please open Telegram to view this post
VIEW IN TELEGRAM
😱1
UIKit говорит, что интерфейс уже RTL. Почему тогда половина экрана осталась LTR?

Представьте: пользователь переключает язык приложения с английского на арабский. Интерфейс перестраивается, кнопки меняются местами, навигация переезжает на другую сторону. Вроде всё работает.

Но затем открываешь следующий экран и замечаешь, что стрелка Back смотрит не туда. Возвращаешься назад, открываешь форму, а текстовое поле ведёт себя странно при вводе латиницы. Ещё одно переключение языка, и часть интерфейса снова оказывается в LTR.

Статья: https://habr.com/ru/articles/1097336/
Платформа: iOS

👨‍🦯‍➡️ AppFiles: код, инструменты, практики, производительность
Please open Telegram to view this post
VIEW IN TELEGRAM
Прощай, project.pbxproj, здравствуй, JSON: крупнейшее изменение Xcode за 30 лет

Apple наконец заменила самый пугающий файл в каждом iOS-репозитории. Вот что изменилось, как перейти на новый формат и стоит ли это делать — с объяснениями для джунов, сеньоров и тимлидов.

Статья: https://apptractor.ru/info/articles/proschay-project-pbxproj-zdravstvuy-json-krupneyshee-izmenenie-xcode-za-30-let.html
Платформа: iOS

👨‍🦯‍➡️ AppFiles: код, инструменты, практики, производительность
Please open Telegram to view this post
VIEW IN TELEGRAM
Jetpack Compose 1.12: как я наконец отказался от «ненастоящих» градиентов

Я не могу сосчитать, сколько раз дизайнер присылал мне красивый мягкий градиент, а я отвечал тремя наложенными radialGradient, blur и молитвой. На эмуляторе всё выглядело отлично; на настоящем OLED-экране — блекло. Compose 1.12 решает обе проблемы.

Статья: https://apptractor.ru/info/articles/jetpack-compose-1-12-kak-ya-nakonets-otkazalsya-ot-nenastoyaschih-gradientov.html
Платформа: Android

👨‍🦯‍➡️ AppFiles: код, инструменты, практики, производительность
Please open Telegram to view this post
VIEW IN TELEGRAM
HackiOS - запуск iOS на Linux

HackiOS загружает открытое ядро Apple XNU (xnu-8796.121.2, ядро iOS 16.5) на аппаратном обеспечении Android-смартфона и запускает поверх него неизменённое пользовательское пространство iOS 16.5: launchd → backboardd → SpringBoard → приложения. Это стало возможным благодаря собственному EFI-загрузчику, собственным заменам закрытых драйверов Apple, порту UEFI и Linux-драйверу Wi-Fi, работающему через слой совместимости.

Система работает в двух вариантах:

• POCO X5 Pro 5G (redwood, Snapdragon 778G) — ничего не прошивается: UEFI запускается через fastboot boot, вся система работает из оперативной памяти, а после перезагрузки телефон возвращается к Android;
• QEMU (virt, aarch64) — то же самое можно запустить на любом Linux-компьютере, телефон для этого не нужен.

Пока не работают сотовая связь, Bluetooth, зарядка под собственным ядром, запись видео и Live Photo, вход в Apple ID и содержимое App Store. Причина последних ограничений связана в том числе с отсутствием Secure Enclave и тем, что FairPlay daemon завершается.

Главное техническое ограничение сейчас — Metal для приложений. Работа уже идёт: 293 из 456 системных шейдеров удалось запустить на Adreno. Поэтому HackiOS уже выглядит как достаточно функциональная iOS-среда на Android-железе, но до полноценной замены обычного iPhone ей пока далеко.

HackiOS на GitHub: https://github.com/oosexgang/hackios-xnu-kernel
Платформа: iOS/Android
⭐️: 654

👨‍🦯‍➡️ AppFiles: код, инструменты, практики, производительность
Please open Telegram to view this post
VIEW IN TELEGRAM
📺 Видео и подкасты за неделю

• (iOS Ru) Metal без магии — когда GPU ускоряет, а не мешает
• (iOS Ru) Как легально опубликоваться вне App Store
• (iOS Ru) Как и зачем писать игровой движок на Swift
• (iOS En) Instagram's Swipeable Feed-to-Camera Interaction Using SwiftUI
• (iOS En) Your iPhone App Needs This Before Supporting iPhone Duo
• (And Ru) Явное лучше неявного, или Shift left в Android-сборке
• (And Ru) Как читать метрику памяти и искать прожорливые экраны
• (Dev Ru) Как подружить мобильное приложение с JS и прокачать свой SDUI
• (Dev Ru) Разделяй и властвуй: распил мобильного приложения на микросервисы
• (Dev Ru) Rust в мобильной разработке
• (Dev Ru) Насколько опасен ИИ для кибербезопасности
• (Dev En) How this skill helps me to understand AI code
• (Dev En) The Tech Market Changed. Here's How to Survive It.
• (Mrk Ru) Хэллоуин: ASO и монетизация мобильных игр

Прошлогодние видео:

• (And Ru) Как обеспечить стабильную работу SDK для миллионов устройств
• (Crs Ru) Что ждёт Kotlin Multiplatform разработчика на собесе? (все собеседования)

👨‍🦯‍➡️ AppFiles: код, инструменты, практики, производительность
Please open Telegram to view this post
VIEW IN TELEGRAM