TGViewer
Channel Public Channel
AppFiles - Mobile Development

AppFiles - Mobile Development

@applib

Библиотеки, обучающие статьи, курсы и видео для (мобильных) разработчиков. Если есть вопросы - пишите @lbogolubov.
Subscribers
2.18K
Photos
3.3K
Videos
48
Links
4.3K

Showing posts older than #4308 · Back to latest

Older Posts 20 shown
Post #4307 375
Навигация в Jetpack Compose без магии: что на самом деле делают библиотеки навигации

Вы когда-нибудь задумывались, зачем нужны библиотеки для навигации в Jetpack Compose? Почему мы не можем просто взять mutableStateOf со списком экранов и переключаться между ними? Оказывается, если мы попробуем реализовать такой наивный подход, то столкнёмся с рядом проблем: rememberSaveable не работает, ViewModel не очищаются после ухода с экрана, Lifecycle не работает корректно и многое другое.

В статье разберём, как работают библиотеки навигации в Jetpack Compose и какие задачи они решают на примере библиотеки навигации Modo.

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

👨‍🦯‍➡️ AppFiles: код, инструменты, практики, производительность
Post #4306 374
UISlider изнутри: почему setValue не работает во время settle-анимации и как я это обошел

В iOS 26 у UISlider появился liquid-glass-вид и физика доводки (settle) после того, как пользователь отпускает палец. Если честно, я не проверял, как это выглядело в старых версиях и как оно работало, так как до iOS 26 ни в своих проектах, ни в тех, что я писал на работе, я не использовал стандартный компонент, так как его внешний вид никого не устраивал. У такой доводки есть побочный эффект: если в этот момент дернуть setValue(_:animated:) извне, наш слайдер на один кадр едет в новую точку, а потом откатывается туда, куда его тянет settle. removeAllAnimations() не помогает: анимация идёт не через CABasicAnimation, а через property-driver на display link. Дальше про то, как я нашёл рабочий путь это исправить.

Самое неприятное в этом баге было не само дёрганье, а ощущение, что публичный API говорит "значение поставлено”, а визуальный слой через кадр отвечает “нет, я лучше вернусь куда хотел”. Поэтому я отдельно разделю два пути: runtime-фикс для понимания механики и продовый обход (хотя в личном приложении я пошел бы в прод с фиксом).

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

👨‍🦯‍➡️ AppFiles: код, инструменты, практики, производительность
Post #4305 346
LoopScroll - бесконечно прокручиваемая постраничная навигация

LoopScroll - контрол для бесконечной прокрутки в iOS, построенный на основе UICollectionView. Поддерживает горизонтальную и вертикальную прокрутку, автоматическую прокрутку и привычный API делегата/источника данных.

Особенности:

• Бесконечная прокрутка — плавная перемотка элементов в обоих направлениях
• Горизонтальная и вертикальная — переключение направления прокрутки с помощью одного свойства
• Автоматическая прокрутка — настраиваемая автоматическая прокрутка на основе таймера
• Привязка к странице — настраиваемая компоновка обеспечивает точную привязку к странице с учетом скорости нажатия
• Источник данных и делегат — привычные протоколы в стиле UICollectionView
• Совместимость с Objective-C — все публичные API доступны через @objc
• Легковесный — нет внешних зависимостей, ~500 строк кода на Swift

LoopScroll на GitHub: https://github.com/iLiuChang/LoopScroll
Платформа: iOS
⭐️: 183

👨‍🦯‍➡️ AppFiles: код, инструменты, практики, производительность
Post #4304 3.03K
📺 Видео и подкасты за неделю

• (iOS En) Swift Attached Macros: Build a Real-World Member Macro from Scratch
• (iOS En) iOS 27 Apple Find My App UI
• (iOS En) What's new in SwiftUI for iOS 27
• (iOS En) Screen Capture iPhone (iOS 27) - Screen Capture Kit For iOS 27
• (And En) Build adaptive apps with Compose's new APIs
• (And En) Build for the wrist, the road, and the remote with Jetpack Compose and Gemini
• (And En) Build 3d experiences using Jetpack XR
• (And En) Optimize your app performance for the next generation of Android
• (And En) Creative video editing with Jetpack Media3 and Gemini
• (And En) Develop faster with Android Studio, AI and skills
• (And En) Build intelligent experience: Deep dive into AppFunctions
• (And En) Building Robust Applications with Testing - Android Developers Office Hours
• (And En) Sameer Samat on Android 17 and the Future of Intelligent Computing
• (And En) KotlinConf'26 Keynote
• (And En) Say Goodbye to Callbacks
• (Crs En) Sony’s KMP Journey: Scaling BLE & Hardware with Kotlin Multiplatform
• (Crs En) What's New in Compose Multiplatform
• (Crs En) Evolving Kotlin Language Defaults
• (Dev Ru) Безопасность, агенты и будущее разработки
• (Dev Ru) Почему капча больше не про светофоры — Smart Captcha, ML, антибот

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

• (iOS Ru) Как побеждать в конкурсах от Telegram
• (And Ru) Как мы случайно ускорили релизную сборку в два раза
• (And Ru) Эталонный пример Android приложения от Google
• (And Ru) Gradle DSL изнутри
• (And Ru) Kotlin DSL как единый источник правды для решения многих задач
• (Crs Ru) Демо-интервью по Flutter с Middle-разработчиком

👨‍🦯‍➡️ AppFiles: код, инструменты, практики, производительность
  • ❤ 1
Post #4303 430
LeanType - конфиденциальная клавиатура для Android

LeanType — это форк HeliBoard, клавиатура с открытым исходным кодом, ориентированная на конфиденциальность и возможность индивидуальной настройки, основанная на AOSP/OpenBoard. Клавиатура предлагает гибридный подход: приватное, безопасное автономное ядро ​​для повседневной работы с текстом, а также мощные возможности искусственного интеллекта, доступные по вашему желанию.

LeanType на GitHub: https://github.com/LeanBitLab/LeanType
Платформа: Android
⭐️: 517

👨‍🦯‍➡️ AppFiles: код, инструменты, практики, производительность
Post #4302 481
Миграция приложения на Navigation 3: боль, переработки и хотфиксы

В начале 2026 года мы перевели наше Android-приложение, насчитывающее более 170 экранов, с Navigation 2 на Navigation 3.

Navigation 3 предлагает типобезопасные точки назначения, сохраняемые стеки возврата и более современный API навигации. В целом миграция оказалась относительно простой, но по ходу работы мы всё же столкнулись с несколькими неожиданными сложностями — от обработки нижних панелей (bottom sheet) до исправления сбоев, которые проявились только после выпуска приложения.

В этой статье я расскажу, почему мы решили перейти на Navigation 3, как организовали процесс миграции, с какими проблемами столкнулись и какие выводы сделали.

Если вы тоже планируете переход на Navigation 3, наш опыт может сэкономить вам время и избавить от нескольких головных болей.

Статья: https://apptractor.ru/info/articles/migratsiya-prilozheniya-na-navigation-3-bol-pererabotki-i-hotfiksy.html
Платформа: Android

👨‍🦯‍➡️ AppFiles: код, инструменты, практики, производительность
Post #4301 416
Как энергосбережение на Android мешало Seamless-авторизации

Недавно, внедряя в приложение новую фичу, мы столкнулись с тем, что она в упор отказывалась работать – но только на Android. Мы дебажили ее полторы недели, перепробовали все возможные варианты и закошмарили всех доступных операторов связи, прежде чем узнали, что все дело было… в энергосбережении.

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

👨‍🦯‍➡️ AppFiles: код, инструменты, практики, производительность
  • 👍 1
Post #4300 442
Apple Shipkit - готовая инфраструктура релизной инженерии для публикации приложений

Apple Shipkit - инструмент для выпуска релизов приложений для iOS и macOS. Подписание кода, CI через GitHub Actions для запросов на слияние, новые сертификаты для каждого релиза CI, загрузка в TestFlight, отправка в App Store — всё это уже настроено. Не зависит от UI-фреймворка, сетевого стека или уровня хранения данных.

Впервые выпускаете приложение для iOS или Mac? Начните с docs/GETTING-STARTED.md — все необходимые условия, все действия Apple, 30–60 минут до первой сборки TestFlight.

Используете ИИ-агентов для разработки приложений (Claude Code, Cursor, Codex и т. д.)? Начните с файла AGENTS.md — инварианты расширяемости при создании форков, карта владения файлами, антипаттерны, которых следует избегать. Независимый от поставщика формат agents.md, один файл для всех основных агентов.

Apple Shipkit на GitHub: https://github.com/indiagrams/apple-shipkit
Платформа: iOS
⭐️: 15

👨‍🦯‍➡️ AppFiles: код, инструменты, практики, производительность
Post #4299 437
Apple Container уже здесь, и он изменит ваш подход к iOS-разработке

Вы уже несколько лет пишете на Swift. Вы досконально знаете Xcode. Но в экосистеме Apple появился новый инструмент, который большинство разработчиков игнорируют — и те, кто очнётся раньше, будут создавать приложения быстрее, выпускать более чистые версии и отлаживать код эффективнее, чем все остальные.

Apple Container — это не просто новый фреймворк. Это значительный сдвиг в мышлении Apple относительно изоляции приложений, управления средами и рабочими процессами разработчиков. Мы разберёмся, что это такое на самом деле, почему это важно и как это реализовать уже сегодня.

Статья: https://apptractor.ru/info/articles/apple-container.html
Платформа: iOS

👨‍🦯‍➡️ AppFiles: код, инструменты, практики, производительность
  • 👎 3
Post #4298 401
XCUI, Tests & Robots. Разбираем нативную автоматизацию iOS на винтики. Часть 1

В прошлых статьях мы разобрались, как искать логи и креш‑отчёты на iOS‑устройствах — и делали это вручную. Этот навык остаётся базовым на проекте любого размера: без него невозможно понять причину сбоя. Но есть и вторая часть работы — сами проверки, то есть прогон пользовательских сценариев. Пока приложение небольшое, их можно прокликивать руками. По мере роста проекта количество однотипных проверок увеличивается, и повторять их вручную перед каждым релизом становится всё дороже.

Возникает логичный вопрос: можно ли автоматизировать именно эту рутину, чтобы проверки проходили без нашего участия, а нам лишь оставалось разобраться с причинами сбоев, если такие возникнут? Здесь нам помогут нативные автотесты на XCUITest. Они позволяют системно, а не от случая к случаю, прогонять пользовательские сценарии, отслеживать падения и проверять стабильность.

Этой статьёй мы открываем цикл о UI‑тестировании iOS приложений. Начнём с основ: разберёмся, какое место UI‑тесты занимают в пирамиде тестирования, познакомимся с инструментами и постепенно перейдём к построению устойчивых тестов с применением проверенных паттернов.

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

👨‍🦯‍➡️ AppFiles: код, инструменты, практики, производительность
Post #4297 374
Laydr - file-based типобезопасная система навигации

Laydr — это file-based типобезопасная система навигации для Compose Multiplatform и Android-приложений на Compose. Структура приложения описывается через наглядный каталог routes/, а Laydr генерирует Kotlin-маршруты, билдеры путей, карты маршрутов, локальные Compose-точки входа и интеграцию с Navigation 3 — всё то, что при ручной поддержке со временем обычно начинает расходиться и устаревать.

Laydr пригодится, когда навигация в Kotlin-приложении превратилась в сеть скопированных строк маршрутов, дублирующейся настройки графа, повторного разбора аргументов, обёрток макетов, реестров вкладок и устаревшего связующего кода. Маршруты становятся понятной структурой каталогов, Laydr генерирует предсказуемую навигационную обвязку, а интерфейс на Compose, состояние, данные, доступ к зависимостям, навигационные элементы и платформенные правила остаются явно описанными в коде приложения.

Laydr на GitHub: https://github.com/mobiletoly/laydr
Платформа: Android/кроссплатформа
⭐️: 7

👨‍🦯‍➡️ AppFiles: код, инструменты, практики, производительность
Post #4296 369
Внедрение Gemini Nano в реальное приложение: ограничения, о которых никто не предупреждает

Я выпустил Android-приложение, ежедневные аналитические данные которого формируются Gemini Nano, работающим полностью на телефоне — без облака, без подсказок и вывода данных за пределы устройства. В документации интеграция казалась тривиальной. В производственной среде возникли три сложных момента, которые изменили мою архитектуру. Вот описание, которое я хотел бы иметь до начала работы.

Статья: https://apptractor.ru/info/articles/gemini-nano-real.html
Платформа: Android

👨‍🦯‍➡️ AppFiles: код, инструменты, практики, производительность
Post #4295 372
Лента роликов на iOS: опыт работы с AVPlayer

В T-Инвестициях на iOS лента коротких роликов — это 90% трафика, именно ее оптимизации мы уделяем больше всего внимания. В первой версии пользователи могли ждать старта видео больше 15 секунд. Мы разобрались в ограничениях AVPlayer, оптимизировали буферизацию и снизили задержки на 12% в хвосте распределения. Рассказываю, как мы улучшали пользовательский опыт и почему AVPlayer не лучшее решение для ленты роликов.

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

👨‍🦯‍➡️ AppFiles: код, инструменты, практики, производительность
Post #4294 394
BlazeDB - нативная для Swift встраиваемая база данных для локального хранения данных

BlazeDB - встраиваемая зашифрованная однопроцессная документная база данных для Swift с ACID-транзакциями, восстановлением после сбоев на основе журнала предзаписи и шифрованием AES-256-GCM при хранении. Для каждой базы данных создаётся отдельный зашифрованный файл. Не требует отдельного сервера и обязательных сетевых запросов.

BlazeDB на GitHub: https://github.com/Mikedan37/BlazeDB
Платформа: iOS
⭐️: 13

👨‍🦯‍➡️ AppFiles: код, инструменты, практики, производительность
Post #4293 404
Нам всем нужен такой учебник
  • 💅 3
Post #4292 394
Copy-on-Write в Swift: подготовка к собеседованию

За годы я сидел по обе стороны стола: и как кандидат, и как собеседующий — в том числе на позиции в крупные продуктовые компании. И именно Copy-on-Write раз за разом оказывался той темой, на которой видно разницу между «слышал слово» и «понимаю механизм». Тема звучит обманчиво просто — «копируем только при записи», — но крупняк любит докапываться до формулировок: не «массив копируется по значению», а когда именно копируется буфер, что проверяется перед записью, почему у функции проверки именно такая сигнатура. Один неаккуратный оборот — и за него тут же цепляются уточняющим вопросом.

Сразу скажу про планку ожиданий, чтобы снять тревогу: на практике от кандидата редко хотят академически точного описания рантайма Swift до последнего бита. Хотят, чтобы вы держали в голове рабочую модель («struct снаружи, общий буфер с refcount внутри, копия на первой записи в разделяемый буфер») и могли её развернуть на пару уровней вглубь, не плавая в базовых понятиях вроде семантики значения и ссылки. Сидя по другую сторону стола, я отсекаю не тех, кто не знает внутренностей компилятора, а тех, кто путается в фундаменте и выдаёт заученные фразы, под которыми ничего нет. Поэтому статья идёт от фундамента к деталям: сначала то, что обязательно надо понимать, потом то, чем можно приятно удивить.

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

👨‍🦯‍➡️ AppFiles: код, инструменты, практики, производительность
Post #4291 382
Искусственный интеллект провел со мной собеседование на должность iOS-разработчика

Две недели назад я искал новые возможности для заработка и наткнулся на платформу экспертов micro1.

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

Я ввёл в поиске «iOS» и нашёл две вакансии iOS-разработчика. Требования были вполне привычными: знание Swift, UIKit и SwiftUI, несколько лет опыта, почасовая оплата.

Я отправил заявку. В тот момент я ещё не понимал, кто — или что именно — будет проводить со мной собеседование.

Статья: https://apptractor.ru/info/articles/iskusstvennyy-intellekt-provel-so-mnoy-sobesedovanie-na-dolzhnost-ios-razrabotchika.html
Платформа: собеседование

👨‍🦯‍➡️ AppFiles: код, инструменты, практики, производительность
Post #4290 338
Хардкорная агентская разработка под 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: код, инструменты, практики, производительность
Post #4289 339
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: код, инструменты, практики, производительность
  • ❤ 1
Post #4288 2.56K
📺 Видео и подкасты за неделю

• (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: код, инструменты, практики, производительность
Older posts →
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →