AppFiles - Mobile Development
2.18K subscribers
3.17K photos
42 videos
13 files
4.16K links
Библиотеки, обучающие статьи, курсы и видео для (мобильных) разработчиков. Если есть вопросы - пишите @lbogolubov.
Download Telegram
xclocSmith - линтер и редактор Xcode String Catalogs

xclocSmith - линтер и редактор для каталога строк локализации Xcode. Он находит все проблемы с переводами, редактирует файлы .xcstrings, не разрушая структуру и данные, добавленные Xcode, и замыкает весь процесс: передаёт ИИ-модели точный список недостающих переводов, а затем проверяет полученный результат. Инструмент занимается только локализацией Xcode и ничем больше.

xclocSmith на GitHub: https://github.com/asutekku/xclocsmith
Платформа: iOS
⭐️: 1
 
👨‍🦯‍➡️ AppFiles: код, инструменты, практики, производительность
Please open Telegram to view this post
VIEW IN TELEGRAM
📺 Видео и подкасты за неделю

(iOS En) X App's New Scrollable Tabbar Using SwiftUI
(iOS En) Instagram App's Minimizable Tab Bar Using SwiftUI
(And Ru) Code Review эталонного Android приложения с AI фичами от Google
(And En) 👼 Jetpack Compose 5th-Anniversary: Livestream Birthday Party
(And En) 👼 The inside story of Jetpack Compose
(And En) 10 Behavioral Tips That Make You CRUSH Your Next Android Interview
(And En) Moments When Things Go Wrong
(And En) Breaking Frozen Frames: Phased Rendering for Feature Rich UIs
(And En) Opinionated Ktor Services
(And En) Kotlin as a Safety Net Type Driven Reliability in the Finance Industry
(And En) Setting Kotlin Free with Native Tooling
(And En) 10 Gradle Best Practices Every Kotlin Developer Should Know
(And En) The 3 Jetpack Compose Phases Every Developer Should Understand
(Crs En) Why I'm Not Much Using Compose Multiplatform Anymore
(Dev Ru) AI в QA: почему инструмент без культуры не работает
(Dev Ru) VLM против регресса: опыт создания AI-агента, тестирующего интерфейсы как человек
(Dev Ru) Разработчик из Apple теперь в Яндексе: что отличается внутри
(Dev Ru) Взгляд на будущее разработки
(Mrk Ru) Как понять, что мобильная игра готова к масштабированию? Вся продуктовая аналитика на реальном кейсе

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

(iOS Ru) Почему Metal перестал быть страшным
(iOS Ru) Локализация iOS-приложения за 1$ в 2024 году
(And Ru) Нюансы работы Android Runtime в сравнении с HotSpot VM
(And Ru) Как Google тайно изменил Android на глазах у всех: Project Mainline
(Dev Ru) Алгоритмическая сессия на собеседовании (все собеседования)
(Dev Ru) Автоматическая генерация верстки под Server-driven UI из макетов Figma

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

Прошлым летом Google объявил, что на Android телефоны можно будет устанавливать приложения только от проверенных разработчиков. В этой статье SafeMobile рассказывает, что узнали - по мнению авторов статьи, в ближайшее время серьёзных изменений не ожидается:

• устройства без сервисов Google вообще не участвуют в проверке;
• Россия не входит в первую волну;
• Google заявляет об исключении для стран, находящихся под санкциями;
• приложения, устанавливаемые через корпоративные MDM-системы на управляемые устройства, не должны проходить такую верификацию.

Таким образом, российские устройства без Google Play и корпоративные устройства под управлением MDM должны продолжить работать как раньше. Однако разработчикам обычных приложений авторы рекомендуют заранее пройти полную регистрацию, особенно если APK распространяется напрямую или через сторонние магазины.

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

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

Strata — это плагин Gradle, который контролирует явно заданный граф зависимостей между архитектурными слоями в многомодульной сборке. Каждый слой представлен уже существующим проектом верхнего уровня. Сам этот проект и все его дочерние проекты автоматически относятся к соответствующему слою.

Strata на GitHub: https://github.com/jzbrooks/strata
Платформа: Android
⭐️: 3

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

Поговорим про:

1. Архитектуру Apple Silicon и Unified Memory — почему не можем использовать всю доступную память;
2. Память, квантование и KV Cache — где приложения начинают падать и как это отловить;
3. Core ML и MLX — чем отличаются, где какой быстрее и почему нельзя всё запускать на нейронном процессоре;
4. Температуру и троттлинг — что происходит с телефоном на длинной сессии;
5. Гибридный пайплайн — как взять сильные стороны обоих фреймворков и получить стабильную генерацию. Это практический разбор с примерами кода, замерами на Llama 3 1B и выводами, когда локальная модель оправдана, а когда лучше использовать серверные модели.

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

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

Untold Engine — это XR-движок с открытым исходным кодом на Swift/Metal для высокопроизводительных приложений пространственной визуализации для платформ Apple, предоставляющий разработчикам полный контроль над рендерингом, шейдерами и конвейером обработки данных.

Untold Engine создан для разработчиков и команд, которые:

• Нужен полный контроль над рендерингом, шейдерами и системами движка Metal
• Предпочитают нативную архитектуру Swift + Metal на платформах Apple
• Разрабатывают приложения XR, 3D или пространственной визуализации
• Необходимо обрабатывать большие сцены, потоковые данные или пользовательские конвейеры обработки ресурсов
• Хотят открытый движок, который можно изучать, модифицировать, расширять и встраивать

Untold Engine на GitHub: https://github.com/untoldengine/UntoldEngine
Платформа: iOS
⭐️: 125
 
👨‍🦯‍➡️ AppFiles: код, инструменты, практики, производительность
Please open Telegram to view this post
VIEW IN TELEGRAM
👎1
Одна строчка, которая пожирала нашу память

Утечки памяти могут быть очень незаметными, а их поиск иногда кажется пугающе сложным. Но не стоит их бояться. Да, сначала непросто сопоставить данные гистограммы или кратчайший путь до корня сборщика мусора с кодом, который вы написали. Однако после того, как вы поймёте принцип, анализ помогает не только устранить конкретную проблему, но и обнаружить другие, менее очевидные недостатки.

Эта история служит важным напоминанием:

Если contentType формируется из значения, уникального для каждого элемента на протяжении всего срока жизни списка, он засорит хранилище повторного использования Compose.

Статья: https://apptractor.ru/info/articles/odna-strochka-kotoraya-pozhirala-nashu-pamyat.html
Платформа: Android

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

Общий настрой треда: переход из Android в бэкенд реалистичен, но Kotlin сам по себе не делает его простым. Большинство участников считают, что опыт старшего мобильного разработчика переносится частично: архитектурное мышление, Kotlin, корутины, проектирование интерфейсов программирования и опыт промышленной разработки остаются ценными. Однако серверная разработка требует отдельного набора знаний, и на собеседованиях придётся конкурировать с людьми, которые много лет работали с базами данных, распределёнными системами и инфраструктурой.

Статья: https://apptractor.ru/info/articles/14-let-v-android-razrabotke.html
Платформа: Android/карьера

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

Приложение для управления задачами со всеми необходимыми функциями.

Фичи:

• Повторяющиеся задачи — Создавайте задачи, которые повторяются ежедневно, еженедельно или ежемесячно.
• Вложенные подзадачи — Организуйте работу с помощью глубоко вложенных подзадач, без ограничений по глубине.
• Поиск — Быстро находите любую задачу с помощью встроенного поиска.
• Резервное копирование — Автоматическое и ручное резервное копирование; экспорт данных в файл JSON.

Tidy на GitHub: https://github.com/Gauravkr7488/Tidy
Платформа: Android
⭐️: 15

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

Если бы неделю назад мне сказали, что .fixedSize спасёт мне вторую половину рабочего дня, я бы рассмеялся.

Уже одно название словно предупреждает: этот модификатор загонит вас в угол. Кому вообще нужны представления, зафиксированные в статическом размере? Поэтому, как и многие разработчики на SwiftUI, я мысленно отправил его в категорию «модификаторы, которыми я никогда не воспользуюсь».

А затем мне досталась задача по компоновке, которую — вот неожиданность — можно было аккуратно решить только с помощью .fixedSize.

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

Статья: https://apptractor.ru/info/articles/nakonets-to-ya-nashel-primenenie-dlya-fixedsize.html
Платформа: iOS

👨‍🦯‍➡️ AppFiles: код, инструменты, практики, производительность
Please open Telegram to view this post
VIEW IN TELEGRAM
🤷‍♂1🤣1
Diligence - экраны "О приложении" на SwiftUI

Diligence — это легковесный пакет Swift, содержащий набор UI-элементов для создания About экранов приложений для iOS и macOS.

Diligence на GitHub: https://github.com/inseven/diligence
Платформа: iOS
⭐️: 21
 
👨‍🦯‍➡️ AppFiles: код, инструменты, практики, производительность
Please open Telegram to view this post
VIEW IN TELEGRAM
Picture-in-Picture в iOS: от запуска до переключения контента

С системной функцией Picture-in-Picture (PiP) сталкивались, пожалуй, все владельцы iPhone: кто-то смотрит видео на фоне переписки, кто-то общается по видеосвязи в любимых мессенджерах. Для пользователя это просто удобство, а для разработчика видеосервиса - отдельный механизм со своей инфраструктурой, жизненным циклом и набором ограничений. В этой статье я разберу интеграцию PiP как встроенного плеера: от первого запуска до переключения контента. Поделюсь нюансами, с которыми вы точно столкнётесь на практике, и покажу, как обойти типовые грабли

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

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

Представьте, перед вами задача — после авторизации пользователя навигировать его на главный экран, или показать snackbar, например, об ошибке.

В Android для таких событий есть специальное название — One‑Time Events, или же просто Effects — события, которые мы отправляем UI из ViewModel и хотим, чтобы они обработались ровно один раз.

И они отличаются от состояния экрана! Состояние существует всегда, а effect отправляется и обрабатывается единожды; в состоянии существуют данные, с которыми user взаимодействует, или которые повторно могут отображаться на экране, когда как effect — совершенно противоположное.

Моделировать такой паттерн можно несколькими способами: через состояние, SharedFlow или Channel. В этой статье мы разберем на простом примере каждый подход и обсудим минусы и плюсы, а также обсудим лучшее обходное решение!

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

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

Дело было не в этом. Тот же запрос, та же таблица, тот же код, который мы выпустили три года назад, — только теперь он незаметно перестал работать быстро.

Я открыл план выполнения запроса, ожидая увидеть случайную аномалию, но вместо этого получил стену цифр, от которых любой бэкенд разработчик мгновенно замирает.

Статья: https://apptractor.ru/info/articles/spustya-3-goda-i-200-millionov-strok-ya-nakonets-to-perestal-ispolzovat-uuid-v-kachestve-klyucha.html
Платформа: база данных

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

Debroid (DEBug + AnDROID) — это headless CLI, работающий по протоколу Java Debug Wire (JDWP), позволяющий агентам ИИ — Claude Code, Grok Build, Codex, OpenCode, Cursor, Antigravity или любому другому приложению с терминалом — отлаживать работающее Android-приложение так же, как это делал бы человек в Android Studio: устанавливать точки останова, перехватывать исключения, пошагово выполнять код, проверять и изменять переменные, отслеживать поля — всё без графического интерфейса и в строгом, машиночитаемом формате JSON.

Традиционные среды разработки Android очень визуальны. Хотя помощники ИИ могут писать код, они фактически «слепы», когда дело доходит до отладки, поскольку они не могут щелкать мышью по интерфейсу Android Studio, чтобы проверить память или приостановить выполнение. Debroid устраняет этот пробел. Он действует как слой преобразования между чистым терминалом (который агенты ИИ отлично используют) и виртуальной машиной Android. Предоставляя интерфейс командной строки, который выводит детерминированный JSON, агент ИИ может автономно предположить наличие ошибки, запустить приложение, определить точную строку кода, считать текущее состояние устройства и оценить возможность исправления — предоставляя агентам тот же глубокий анализ ситуации во время выполнения, который ранее был доступен только разработчикам-людям.

Debroid на GitHub: https://github.com/PatilShreyas/debroid
Платформа: Android
⭐️: 70

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

(iOS En) Complex UI: Apple Sports App's Timeline Slider Interaction Using SwiftUI
(iOS En) SwiftUI Image Caching Explained - Faster Lists & Better Performance
(iOS En) iOS 27 Siri Bubble Effect Using SwiftUI
(And Ru) 7 стадий AI в разработке: от скептика к архитектору
(And En) Android AI Tools: Vibe coding, sub-agents, and the Android CLI
(And En) The 8 Golden Rules of Writing Clean Functions - Clean Code In Kotlin
(And En) Crafting Delightful Experiences
(And En) Increasing Quality of AI Generated Kotlin Code
(And En) How Kotlin Powers Functional Design: MCP Edition
(And En) Securing Gradle Builds Full Course
(Crs En) Can Kotlin Swift Interop Ever Be Perfect?
(Crs En) Livecoding Soundscapes with Compose Multiplatform
(Crs En) Hot-Reloading Kotlin/Native
(Crs En) Compose beyond UI : Display and Print!
(Dev Ru) UX-ресерч в эпоху AI — AI в исследованиях, ResearchOps, Muse Group
(Dev En) Introducing Gemini Robotics 2
(Mrk En) Все видео Google Playtime EMEA 2025

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

(iOS Ru) Код, который не тормозит: секреты производительности на iOS
(And Ru) Combine с нуля — реактивщина это просто
(Dev Ru) Тулкиты кодогенерации Android vs iOS

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

Хочу рассказать об одной из самых сложных наших разработок — динамического визуального кода, который должен считываться камерой обычного смартфона в реальном времени.

Внутри продукта эта технология называется MotionCode. Внешне всё выглядит довольно просто: панель воспроизводит последовательность визуальных элементов, камера телефона считывает их, а приложение восстанавливает код.

На практике путь от первого прототипа до стабильной работы оказался гораздо сложнее. Мы успели обучить модель для object detection, столкнуться с ограничениями мобильного железа, отказаться от нейросети и почти без опыта в компьютерном зрении построить собственный real-time-пайплайн обработки кадров.

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

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

Wurstfinger — это клавиатура для iOS, вдохновленная MessagEase и написанная на SwiftUI. Она переносит удобные для большого пальца жесты из Thumb-Key и оригинальной раскладки MessagEase на устройства Apple, включая круговые жесты для заглавных букв, жесты возврата для знаков препинания и правила создания символов с диакритическими знаками.

Традиционные клавиатуры QWERTY занимают лишнее место на экране и требуют точного нажатия. Wurstfinger использует сетку 3х3 со свайпами, поэтому ваши большие пальцы меньше перемещаются и чаще нажимают на нужные клавиши — даже на маленьких экранах. После того, как вы освоите эту клавиатуру (несколько дней практики), вы будете печатать быстрее и с меньшим количеством ошибок.

Wurstfinger на GitHub: https://github.com/cl445/wurstfinger
Платформа: iOS
⭐️: 25
 
👨‍🦯‍➡️ AppFiles: код, инструменты, практики, производительность
Please open Telegram to view this post
VIEW IN TELEGRAM
Поддержка нескольких версий iOS в SwiftUI без превращения ваших представлений в хаос

Одно из главных достоинств SwiftUI — это скорость его развития. На каждой конференции WWDC представляются новые API, новые модификаторы и небольшие улучшения, повышающие удобство использования, благодаря которым код пользовательского интерфейса становится чище и выразительнее. Естественно, вам хочется начать их использовать.

А потом компилятор напоминает вам, что ваше приложение по-прежнему поддерживает старые версии iOS.
'sectionIndexLabel' is only available in iOS 26.0 or newer

На первый взгляд, это не кажется большой проблемой. Swift поддерживает проверки доступности уже много лет, поэтому обертывание нового кода в директиву if #available кажется очевидным решением. К сожалению, SwiftUI не всегда так прост.

Большинство представлений построены как длинные цепочки модификаторов, и вы не можете просто добавить проверку доступности в середину одного из них. Дублирование всего представления для разных версий iOS работает, но быстро становится сложным в поддержке по мере роста вашего UI.

Вместо этого цель должна заключаться в изоляции логики совместимости, сохраняя при этом само представление практически идентичным.

В этой статье мы рассмотрим несколько методов, которые значительно упрощают поддержку нескольких версий iOS без ущерба для читаемости.

Статья: https://apptractor.ru/info/articles/podderzhka-neskolkih-versiy-ios-v-swiftui-bez-prevrascheniya-vashih-predstavleniy-v-haos.html
Платформа: iOS

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