uk
Feedback
AppFiles - Mobile Development

AppFiles - Mobile Development

Відкрити в Telegram

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

Показати більше
2 164
Підписники
+124 години
+47 днів
+1830 день
Залучення підписників
червень '26
червень '26
+4
в 1 каналах
травень '26
+42
в 1 каналах
Get PRO
квітень '26
+26
в 1 каналах
Get PRO
березень '26
+35
в 1 каналах
Get PRO
лютий '26
+23
в 1 каналах
Get PRO
січень '26
+45
в 2 каналах
Get PRO
грудень '25
+43
в 3 каналах
Get PRO
листопад '25
+46
в 1 каналах
Get PRO
жовтень '25
+132
в 1 каналах
Get PRO
вересень '25
+38
в 1 каналах
Get PRO
серпень '25
+40
в 1 каналах
Get PRO
липень '25
+31
в 1 каналах
Get PRO
червень '25
+33
в 1 каналах
Get PRO
травень '25
+41
в 1 каналах
Get PRO
квітень '25
+54
в 2 каналах
Get PRO
березень '25
+162
в 1 каналах
Get PRO
лютий '25
+42
в 1 каналах
Get PRO
січень '25
+40
в 1 каналах
Get PRO
грудень '24
+50
в 1 каналах
Get PRO
листопад '24
+65
в 1 каналах
Get PRO
жовтень '24
+52
в 1 каналах
Get PRO
вересень '24
+48
в 1 каналах
Get PRO
серпень '24
+81
в 2 каналах
Get PRO
липень '24
+48
в 1 каналах
Get PRO
червень '24
+41
в 1 каналах
Get PRO
травень '24
+29
в 1 каналах
Get PRO
квітень '24
+18
в 1 каналах
Get PRO
березень '24
+26
в 2 каналах
Get PRO
лютий '24
+25
в 1 каналах
Get PRO
січень '24
+36
в 1 каналах
Get PRO
грудень '23
+49
в 2 каналах
Get PRO
листопад '23
+20
в 2 каналах
Get PRO
жовтень '23
+35
в 2 каналах
Get PRO
вересень '23
+25
в 0 каналах
Get PRO
серпень '23
+16
в 0 каналах
Get PRO
липень '23
+16
в 0 каналах
Get PRO
червень '23
+27
в 0 каналах
Get PRO
травень '23
+99
в 0 каналах
Get PRO
квітень '23
+34
в 0 каналах
Get PRO
березень '23
+28
в 0 каналах
Get PRO
лютий '23
+62
в 0 каналах
Get PRO
січень '23
+31
в 0 каналах
Get PRO
грудень '22
+21
в 0 каналах
Get PRO
листопад '22
+13
в 0 каналах
Get PRO
жовтень '22
+25
в 0 каналах
Get PRO
вересень '22
+11
в 0 каналах
Get PRO
серпень '22
+9
в 0 каналах
Get PRO
липень '22
+16
в 0 каналах
Get PRO
червень '22
+23
в 0 каналах
Get PRO
травень '22
+38
в 0 каналах
Get PRO
квітень '22
+65
в 0 каналах
Get PRO
березень '22
+29
в 0 каналах
Get PRO
лютий '22
+48
в 0 каналах
Get PRO
січень '22
+60
в 0 каналах
Get PRO
грудень '21
+26
в 0 каналах
Get PRO
листопад '21
+26
в 0 каналах
Get PRO
жовтень '21
+19
в 0 каналах
Get PRO
вересень '21
+27
в 0 каналах
Get PRO
серпень '21
+35
в 0 каналах
Get PRO
липень '21
+22
в 0 каналах
Get PRO
червень '21
+20
в 0 каналах
Get PRO
травень '21
+11
в 0 каналах
Get PRO
квітень '21
+46
в 0 каналах
Get PRO
березень '21
+34
в 0 каналах
Get PRO
лютий '21
+44
в 0 каналах
Get PRO
січень '21
+32
в 0 каналах
Get PRO
грудень '20
+1 148
в 0 каналах
Дата
Залучення підписників
Згадування
Канали
05 червня+2
04 червня+1
03 червня0
02 червня+1
01 червня0
Дописи каналу
Вышел Kotlin 2.4.0 Kotlin 2.4.0 уже вышел — релиз получился крупным и особенно интересным для тех, кто следит за развитием языка и мультиплатформы. Среди главных новинок: стабильные context parameters, explicit backing fields и улучшения для annotation use-site targets. В стандартной библиотеке стабилизировали UUID API и добавили проверку отсортированности коллекций. Для JVM-разработчиков важны поддержка Java 26 и включённые по умолчанию аннотации в metadata. В Kotlin/Native появился support Swift packages as dependencies, обновился Swift export, а CMS GC теперь включён по умолчанию. Kotlin/Wasm тоже заметно прокачали: инкрементальная компиляция стала дефолтной, плюс появилась поддержка WebAssembly Component Model. Есть изменения и в инструментах: Kotlin 2.4.0 совместим с Gradle 9.5.0, а Maven теперь автоматически согласует версии Java и JVM target. Ещё компилятор Kotlin стал последовательнее вести себя с inline-функциями при компиляции .klib. Обновиться можно стандартно — поменять версию Kotlin в build scripts на 2.4.0; свежая версия уже входит в актуальные IntelliJ IDEA и Android Studio. Новость: https://blog.jetbrains.com/kotlin/2026/06/kotlin-2-4-0-released/ Платформа: Android 👨‍🦯‍➡️ AppFiles: код, инструменты, практики, производительность

2
Как я избавился от тысяч строк валидации в Swift Каждый раз, когда нужно добавить новую модель в проект, приходится писать буквально одинаковый код: с одинаковыми проверками, с одинаковыми корректировками, с одинаковыми Codable, с одинаковыми тестами. Статья: https://habr.com/ru/articles/1043520/ Платформа: iOS 👨‍🦯‍➡️ AppFiles: код, инструменты, практики, производительность
180
3
Я перестал доверять стримингам. Поэтому написал свой iOS-плеер — с CarPlay и без вранья про звук Я перестал верить стримингам
Я перестал доверять стримингам. Поэтому написал свой iOS-плеер — с CarPlay и без вранья про звук Я перестал верить стримингам. Не философски, а практически. Половина любимых альбомов либо ушла из каталогов, либо вернулась пересведенной так, что слушать тошно. Концертные записи, винил‑рипы, региональные релизы — их там и не было. А моя коллекция в FLAC просто лежит на диске и никуда не девается. Для своей коллекции я написал плеер. Для себя. Через полгода это превратилось в нишевое приложение для iOS на 11 языках: с собственным DSP, распознаванием музыки и CarPlay. Что в итоге внутри и где было не очевидно. Места, в которых документация молчит, а ты сидишь и гадаешь, почему оно вообще так себя ведет. Статья: https://habr.com/ru/articles/1043690/ Платформа: iOS 👨‍🦯‍➡️ AppFiles: код, инструменты, практики, производительность
162
4
📺 Видео и подкасты за неделю • How to back port new SwiftUI APIs to older iOS versions • iOS 26 Style Mail App Tab bar Using
📺 Видео и подкасты за неделю • How to back port new SwiftUI APIs to older iOS versions • iOS 26 Style Mail App Tab bar Using SwiftUI • 10 Super Common Android Interview Questions (+ Detailed Answers!) • Journeys for Android Studio - Is This the Way To Go? • Мифическая кроссплатформа • AI не приносит денег • Build Your Own AI Agent – Full Course with OpenAI, Langchain, Render Deployment Прошлогодние видео: • Привязать карту: что может быть проще? • Архитектура для кросс-функциональных команд • Как не наломать дров с Live Activity • Баланс между скоростью и надежностью: переиспользовать нельзя перепроверять • Катим в прод, не тестируя • Figma + Compose. Упрощаем верстку • Что хотят работодатели от Android-разработчика • Кодревью опенсорс проекта или как выглядят 10 лет технического долга • Сколько памяти нужно для сборки? Android-разработчикам о JVM • Что скрывает State в Compose 👨‍🦯‍➡️ AppFiles: код, инструменты, практики, производительность
850
5
Swarm - фреймворе оркестрации агентов на Swift Swarm - Swift-фреймворк для создания агентов и многоагентных рабочих процессов
Swarm - фреймворе оркестрации агентов на Swift Swarm  - Swift-фреймворк для создания агентов и многоагентных рабочих процессов. • Параллелизм Swift — это неотъемлемая часть функционала. Весь пакет построен на StrictConcurrency. • Инструменты остаются типобезопасными. Макрос @Tool генерирует JSON-схемы из структур Swift. • Рабочие процессы могут выдерживать сбои. Надежное сохранение контрольных точек рабочих процессов позволяет возобновлять работу с явно заданного идентификатора контрольной точки. • Облачные и локальные модели используют одни и те же абстракции. Foundation Models, Anthropic, OpenAI, Ollama, Gemini, MiniMax, OpenRouter и MLX — все они соответствуют одной и той же архитектуре. • Все написано на Swift. AsyncThrowingStream, акторы, конструкторы результатов и макросы — используются все возможности Swift. Swarm на GitHub: https://github.com/christopherkarani/Swarm Платформа: iOS ⭐️: 484 👨‍🦯‍➡️ AppFiles: код, инструменты, практики, производительность
206
6
Как оптимизировать картинки в Android и не сломать UX: метрики, практики и компромиссы Когда экран с изображениями начинает т
Как оптимизировать картинки в Android и не сломать UX: метрики, практики и компромиссы Когда экран с изображениями начинает тормозить, первая реакция обычно предсказуемая: выключить crossfade, включить кэш, добавить placeholder и надеяться, что этого достаточно. Иногда это правда помогает. Но редко решает проблему системно. На экранах с большим количеством изображений проблема почти никогда не сводится к одному багу. Чаще это цепочка мелких решений, которые по отдельности выглядят безобидно, а вместе начинают бить по слабым устройствам: слишком тяжёлые изображения, неудачный prefetch, лишняя телеметрия, дорогие анимации, лишние трансформации и декодирование. Поэтому оптимизация картинок в Android — это не про один флаг в image loader. Это про то, как быстро экран становится визуально полным, насколько плавно он скроллится и сколько стоит каждый image request. Статья: https://habr.com/ru/companies/uzum/articles/1032460/ Платформа: Android 👨‍🦯‍➡️ AppFiles: код, инструменты, практики, производительность
283
7
Shelly - IDE для Android, ориентированная на ИИ-чаты Shelly — это рабочее пространство, которое объединяет все компоненты на
Shelly - IDE для Android, ориентированная на ИИ-чаты Shelly — это рабочее пространство, которое объединяет все компоненты на вашем Android-устройстве: локальную работу с терминалом, нативные PTY приложений, CLI Codex, ИИ панели, браузер/документацию, предварительный просмотр и фоновые API-агенты. Нативная IDE для Android-терминала, позволяющая запускать настоящий Codex CLI в собственном PTY-приложении, с агентами ИИ, работающими через API — Gemini, Cerebras, Groq, Perplexity и локальными моделями — а также Git, Bash, Python и редакторами, встроенными в APK. Никакой Termux установки, никакой загрузки дистрибутива, никакой отдельной настройки менеджера пакетов. Никакого терминала в WebView, никакого удаленного бриджа для IDE. Откройте приложение, авторизуйте свои учетные записи ИИ и работайте в локальных многооконных терминалах на Android. Shelly на GitHub: https://github.com/RYOITABASHI/Shelly Платформа: Android ⭐️: 24 👨‍🦯‍➡️ AppFiles: код, инструменты, практики, производительность
244
8
Корутины и то как они работают на низком уровне Обычно, когда ты начинаешь задаваться подобным вопросом, в голове возникает а
Корутины и то как они работают на низком уровне Обычно, когда ты начинаешь задаваться подобным вопросом, в голове возникает ассоциация с чем-то магическим. Есть какая-то неведомая сущность, которой ты говоришь что-то сделать и она что-то делает. При изучении Coroutines в самом начале пути ощущения у меня были точно такими же Конечно же, никаких гномов-волшебников не существует, а сами Coroutines работают по определенным алгоритмам, причем не то чтобы очень сложным В рамках этой статьи я не буду претендовать на полную достоверность и всезнайность. Я, как и многие тысячи разработчиков, ежедневно сталкиваюсь с Coroutines и просто хочу поделиться своим пониманием того, как они устроены и получить обратный фидбек. Статья: https://habr.com/ru/articles/1041632/ Платформа: Android 👨‍🦯‍➡️ AppFiles: код, инструменты, практики, производительность
280
9
Приоритизация эффективности использования памяти: важные шаги для Android 17 Хотя производительность приложения часто ассоции
Приоритизация эффективности использования памяти: важные шаги для Android 17 Хотя производительность приложения часто ассоциируют с плавным интерфейсом и быстрым стартом, именно память служит «тихим фундаментом», на котором строятся все эти видимые метрики. Не секрет, что мы наблюдаем сдвиг: объём и использование памяти устройства становятся важнее, чем когда-либо. В Android 17 мы не только продвинулись в оптимизациях памяти на уровне системы, но и предоставляем инструменты и API, которые помогут вам заранее подготовиться к более строгим требованиям к памяти позднее в этом году. Статья: https://apptractor.ru/info/articles/prioritizatsiya-effektivnosti-ispolzovaniya-pamyati-vazhnye-shagi-dlya-android-17.html Платформа: Android 👨‍🦯‍➡️ AppFiles: код, инструменты, практики, производительность
269
10
OneWay - управление состоянием с однонаправленным потоком данных OneWay — это простая, легковесная библиотека для управления
OneWay - управление состоянием с однонаправленным потоком данных OneWay — это простая, легковесная библиотека для управления состоянием, использующая однонаправленный поток данных. Она полностью совместима со Swift 6 и построена на основе Swift Concurrency. Её архитектура обеспечивает потокобезопасность на всех этапах. Она легко интегрируется со всеми платформами и фреймворками Apple, не требуя сторонних зависимостей, что позволяет использовать её в чистом виде. OneWay можно использовать где угодно, а не только на уровне представления, для упрощения сложной бизнес-логики. Если вы хотите реализовать однонаправленную логику, OneWay — это простое и практичное решение. OneWay на GitHub: https://github.com/DevYeom/OneWay Платформа: iOS ⭐️: 107 👨‍🦯‍➡️ AppFiles: код, инструменты, практики, производительность
270
11
Как DuckDuckGo сократила время сборки Android-приложений до 57% Работая с командой Gradle Technologies, DuckDuckGo использова
Как DuckDuckGo сократила время сборки Android-приложений до 57% Работая с командой Gradle Technologies, DuckDuckGo использовала скрипты проверки сборки Develocity, чтобы систематически выявлять и исправлять проблемы, связанные с производительностью. Вот что они обнаружили — и чему могут научиться другие команды разработчиков Android. Статья: https://apptractor.ru/info/articles/kak-duckduckgo-sokratila-vremya-sborki-android-prilozheniy-na-57.html Платформа: Android 👨‍🦯‍➡️ AppFiles: код, инструменты, практики, производительность
317
12
Потоко-защищённая шина событий в Swift В крупных приложениях для iOS взаимодействие между компонентами зачастую оказывается с
Потоко-защищённая шина событий в Swift В крупных приложениях для iOS взаимодействие между компонентами зачастую оказывается сложнее, чем сам компонент. Сервис завершает операцию, координатор должен отреагировать, возможно, потребуется обновить несколько экранов, и передача каждой зависимости по всему дереву навигации быстро начинает казаться излишней «рутинной» работой. Внедрение зависимостей и управление состоянием по-прежнему имеют своё место. Шина (данных) событий предоставляет нам ещё один инструмент для слабосвязанных уведомлений, где прямое управление добавило бы ненужную сложность. Цель этого компонента проста: позволить одной части приложения публиковать событие, а другим частям приложения — подписываться на события определенного типа. Реализация сосредоточена на типовой безопасности, потокобезопасном хранении, автоматической очистке при деаллокации владельца, явной отмене отдельных подписок, доставке MainActor для кода пользовательского интерфейса и поддержке AsyncStream для потребителей async/await. Статья: https://habr.com/ru/articles/1042258/ Платформа: iOS 👨‍🦯‍➡️ AppFiles: код, инструменты, практики, производительность
309
13
Jetpack Compose New Style API - пример использования нового Style API Небольшой экран для умного дома, созданный для изучения
Jetpack Compose New Style API - пример использования нового Style API Небольшой экран для умного дома, созданный для изучения нового Jetpack Compose Foundation Style API. Приложение целенаправленно сфокусировано: один экран управления кондиционером, чистая визуальная система в стиле Material 3 и несколько интерактивных состояний, демонстрирующих, как стили могут существовать вне обычной композиции, при этом сохраняя правильные значения темы в нужное время. Что демонстрирует этот пример: • Централизованный слой AppTheme.styles для многократно используемых стилей компонентов • Токены стилей обрабатываются внутри StyleScope с помощью CompositionLocal.currentValue • Состояния нажатия, выбора и отключения с помощью rememberUpdatedStyleState • Компактная область управления климатом с селектором режимов, скоростью вентилятора и чипом Eco • Пользовательский индикатор температуры, созданный с помощью Compose Canvas • Простой поток состояний в стиле MVVM с использованием ViewModel и StateFlow Jetpack Compose New Style API на GitHub: https://github.com/ardakazanci/JetpackCompose-New-Style-API Платформа: Android ⭐️: 19 👨‍🦯‍➡️ AppFiles: код, инструменты, практики, производительность
289
14
Обертки свойств в Swift: сокращаем шаблонный код Раньше я везде копировал и вставлял один и тот же код валидации. Каждый раз,
Обертки свойств в Swift: сокращаем шаблонный код Раньше я везде копировал и вставлял один и тот же код валидации. Каждый раз, когда мне нужно было ограничить значение от 0 до 100, я писал один и тот же геттер и сеттер. Каждый раз, когда я хотел сохранить что-то в UserDefaults, — один и тот же шаблонный код. Каждый раз, когда мне нужен был потокобезопасный доступ, — одна и та же процедура блокировки/разблокировки. Затем я открыл для себя обертки свойств и почувствовал себя по-настоящему глупым, что не изучил их раньше. Обертки свойств позволяют вынести эту повторяющуюся логику свойств в многоразовый компонент. Напишите один раз, используйте везде. Синтаксис чистый, цель понятна, и ваш код значительно сокращается. SwiftUI использует их повсюду. @State, @Binding, @Published, @Environment. Вы все это время использовали обертки свойств. Но вот в чем дело: вы можете создать свои собственные. И как только вы это научитесь это делать, вы будете удивляться, как вы вообще жили без них. Статья: https://apptractor.ru/info/articles/swift-property-wrappers.html Платформа: iOS 👨‍🦯‍➡️ AppFiles: код, инструменты, практики, производительность
298
15
Defer в Swift: уберитесь перед уходом Возможно, вы считаете ключевое слово defer одной из самых неоднозначных особенностей яз
Defer в Swift: уберитесь перед уходом Возможно, вы считаете ключевое слово defer одной из самых неоднозначных особенностей языка Swift, но в некоторых случаях оно очень полезно. Его можно использовать целенаправленно, и это обеспечит вам безопасность. На этой неделе мы поговорим о некоторых лучших практиках использования defer в Swift. Ключевое слово defer в Swift позволяет выполнить блок кода в конце текущего скоупа. Что означает текущий скоуп (область видимости)? Обычно это ближайшая пара фигурных скобок. Давайте рассмотрим несколько примеров. Статья: https://apptractor.ru/info/articles/defer.html Платформа: iOS 👨‍🦯‍➡️ AppFiles: код, инструменты, практики, производительность
326
16
Pine - нативный для Mac редактор кода Pine — это редактор кода для разработчиков, которым нужно быстрое нативное приложение д
Pine - нативный для Mac редактор кода Pine — это редактор кода для разработчиков, которым нужно быстрое нативное приложение для Mac без накладных расходов Electron. Создан с использованием SwiftUI и AppKit, разработан для macOS 26 Liquid Glass. Открывается мгновенно, не мешает работе. Архитектура: MVVM с представлениями SwiftUI, поддерживаемыми AppKit через NSViewRepresentable. Ядро редактора использует нативный стек NSTextStorage/NSLayoutManager/NSTextContainer. Подсветка синтаксиса выполняется асинхронно в фоновой очереди с токенами генерации для предотвращения появления устаревших результатов. Операции Git выполняются параллельно через GCD. Поиск по проекту использует параллелизм Swift с использованием скользящего окна. Pine на GitHub: https://github.com/batonogov/pine Платформа: macOS/iOS ⭐️: 13 👨‍🦯‍➡️ AppFiles: код, инструменты, практики, производительность
321
17
Книга: «System Design. Проектирование мобильных систем. Подготовка к сложному интервью» Практическое руководство MSD превраща
Книга: «System Design. Проектирование мобильных систем. Подготовка к сложному интервью» Практическое руководство MSD превращает сложные собеседования в предсказуемый процесс. Вы получаете 5-шаговую схему эффективного прохождения интервью и разбор 7 реальных кейсов (лента новостей, мессенджер, YouTube, Google Drive, трейдинговая платформа и др.), позволяющих проектировать архитектуру клиента, API, офлайн-режим, кэширование и масштабируемость. Здесь вы найдете готовые шаблоны, trade-off’ы и шпаргалки — всё, чтобы уверенно проходить интервью в топ-компаниях и расти от мидла до стафф+. Статья: https://habr.com/ru/companies/piter/articles/1039648/ Платформа: разработка 👨‍🦯‍➡️ AppFiles: код, инструменты, практики, производительность
452
18
📺 Видео и подкасты за неделю • (iOS En) Customizing Native Tab Bar With FAB Buttons • (iOS En) Manage Complex SwiftUI List U
📺 Видео и подкасты за неделю • (iOS En) Customizing Native Tab Bar With FAB Buttons • (iOS En) Manage Complex SwiftUI List Updates without Breaking your Data Flow • (iOS En) SwiftUI Shape Morphing View • (And En) Connect to the intelligence system • (And En) Introducing Android Performance Analyzer - The Next Evolution in Profiling for Android • (And En) Develop faster with AI in Android Studio • (And En) Build intelligent Android apps with Google's AI • (And En) Adaptive development for the expanding Android ecosystem • (And En) Google I/O 2026 Recap with Logan Kilpatrick, Josh Woodward and Tulsee Doshi • (And En) Bring the power of on-device AI to life with Google AI Edge and Gemma • (And En) Kotlin CLI, Kotlin 2.4, KMP Changes & More - KotlinConf 2026 News Special • (And En) These Android News Are INSANE - Google IO 2026 Special • (And En) Everything you need to know about Styles API in Jetpack Compose • (Dev Ru) Zed – редактор кода на Rust | AI агент, CRDT, GPUI • (Mrk Ru) Где покупать установки мобильного приложения, когда основные каналы исчерпаны Прошлогодние видео: • (iOS Ru) Ускоряем приложение эффективно • (iOS Ru) Swift Concurrency в iOS SDK Яндекс Доставки • (iOS Ru) Как мы доверили качество наших приложений AI • (iOS Ru) Мок-собеседование iOS-разработчика. SwiftUI (+ все собеседования) • (iOS Ru) Макросы Swift: проще, чище, быстрее • (And Ru) История одного бизнес-желания • (And Ru) Наглядный пример, когда не следовать best practices for coroutines от Google • (And Ru) Кто является Senior разработчиком? • (And Ru) Мы решили все проблемы работы в модульном проекте. Хотите так же? • (And Ru) Оптимизация Compose: проблемы, опыт, тактика, стратегия 👨‍🦯‍➡️ AppFiles: код, инструменты, практики, производительность
2 383
19
KeepLiveService - 35+ стратегий работы сервиса в фоне KeepLiveService - самая полная библиотека способов поддержания сервиса
KeepLiveService - 35+ стратегий работы сервиса в фоне KeepLiveService - самая полная библиотека способов поддержания сервиса Android в рабочем состоянии. Она реализует все известные стратегии keep-alive - более 35 стратегий фоновых служб, нативный демон на C++, унифицированные внешние стратегии запуска Активити, поддержка Android 7.0–16, совместимость с более чем 10 версиями прошивок от разных производителей. KeepLiveService на GitHub: https://github.com/Pangu-Immortal/KeepLiveService Платформа: Android ⭐️: 211 👨‍🦯‍➡️ AppFiles: код, инструменты, практики, производительность
344
20
SmartTube - нативный клиент YouTube на Swift/SwiftUI SmartTube - нативный клиент YouTube на Swift/SwiftUI для iPhone, iPad, m
SmartTube - нативный клиент YouTube на Swift/SwiftUI SmartTube - нативный клиент YouTube на Swift/SwiftUI для iPhone, iPad, macOS и Apple TV. Никакой рекламы. Автоматический пропуск спонсорских объявлений. Заголовки сообщества DeArrow. Вход через Google. До 8K. SmartTube на GitHub: https://github.com/milika/SmartTubeIOS Платформа: iOS ⭐️: 131 👨‍🦯‍➡️ AppFiles: код, инструменты, практики, производительность
341