Mobile Development by AppTractor
11K subscribers
1.87K photos
38 videos
11 files
4.66K links
Цифры, советы и все интересное о разработке мобильных приложений и сервисов. Комментарии и вопросы можно писать прямо @lbogolubov

• Аудитория https://t.me/apptractor/1066
• Сайт https://apptractor.ru/
Download Telegram
iOS

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

Взгляд на мой процесс отладки (с реальными примерами)
Position — легковесное геопозиционирование для Swift 6
SwiftUI @Environment Complete Guide: System Values, Custom Keys & Best Practices
17 Xcode Hacks Every iOS Developer Should Know in 2025
Combine and Swift Concurrency: A threading risk
Logging Privacy Shenanigans
👍32
Android

Понимание работы Zygote, SystemServer, AMS и Binder IPC — ключ к глубокому владению платформой Android. Механизм сохранения состояния через Bundle, координируемый AMS и реализуемый через Binder и Parcel, является фундаментальным для обеспечения устойчивости приложений к пересозданию процессов. Используйте ViewModel с SavedStateHandle для простых UI‑данных, Parcelable для эффективной сериализации и постоянные хранилища для критически важной информации, соблюдая ограничения Bundle. Это гарантирует плавную работу приложения в любых условиях.

Шифруем базу данных Room в Android с помощью SQLCipher
Под капотом Android: как создаются, управляются и восстанавливаются процессы приложений в системе
From Fastlane to Jules: Modern CI/CD for Android That Doesn’t Feel Like a DevOps Degree
One Repo to Rule Them All: Android Modules with Git Submodules
Top 10 Compose Mistakes in Large-Scale Apps
👍21
Figma Make, prompt-to-app инструмент для создания приложений, представленный Figma ранее в этом году, теперь доступен всем пользователям. Подобно инструментам ИИ, таким как Gemini Code Assist от Google и GitHub Copilot от Microsoft, Figma Make позволяет пользователям создавать рабочие прототипы и приложения, используя описания на естественном языке, без необходимости обладать навыками программирования. Пользователи тарифных планов View, Collab, Dev и Starter Seat смогут экспериментировать с Figma Make в своих личных черновиках. Это означает, что все пользователи могут как минимум попробовать демоверсию Figma Make, но для того, чтобы что-то сделать с этими творениями, потребуется подписка с полным доступом.

Разработка

ИИ-инструмент для создания приложений Figma Make теперь доступен всем
Бизнес требует стабильной работы мобильного приложения у всех пользователей. Что делать?
Learning Basic Electronics By Building FireFlies

Маркетинг


Роль онбординга: как построить первые шаги пользователя так, чтобы инсайт случился мгновенно
What marketing channels actually work for your apps?

Кроссплатформа

Building a Cross-Platform Mobile Rendering Engine with KMM
Supercharge Your Dart & Flutter Development Experience with the Dart MCP Server
👍32
Результаты опроса разработчиков Stack Overflow 2025

Stack Overflow опубликовал результаты опроса разработчиков 2025 года.

Вот, например, данные о средней по миру зарплате. Руководители высшего звена (139 тыс. долларов), инженерные менеджеры (130 тыс. долларов) и финансовые аналитики (104 тыс. долларов) имеют самую высокую медианную годовую зарплату в мире. Разрыв в зарплатах между США и другими странами велик для высокооплачиваемых должностей. Медианная зарплата инженерного менеджера в США составляет 200,000 долларов, в то время как в Германии — 118,000 долларов, а в Индии — всего 52,000 долларов.

Медианная зарплата мобильного разработчика в мире - $69,609. Это более чем на $15К больше, чем в опросе прошлого года.
👍6
iOS

SwiftUI значительно усовершенствовал навигацию во фреймворке с появлением NavigationStack и переходом от привычного NavigationView. Теперь управление навигацией строится не вокруг представлений (views), а вокруг значений (values). Важно понять: NavigationStack не просто переименованная версия NavigationView, а мощный инструмент для построения сложных сценариев переходов между экранами. Вместе с NavigationPath разработчик получает полный контроль над навигацией, включая программное перемещение по стеку и поддержку deep linking — обработки ссылок, ведущих пользователя сразу к нужному экрану внутри приложения. Такой подход особенно полезен для сложных приложений с множеством состояний и переходов между экранами. Помимо NavigationStack, в статье отдельное внимание уделено TabView — классическому решению для построения таб-ориентированных приложений. Современная архитектура SwiftUI позволяет объединять TabView с NavigationStack, обеспечивая сохранение навигационного состояния внутри каждой вкладки. Это упрощает реализацию профессиональных и масштабируемых интерфейсов с поддержкой глубоких переходов (deep linking) и минимизацией типичных “подводных камней” SwiftUI-навигирования. Понимание этих инструментов экономит часы на отладку и делает код более структурированным и поддерживаемым.

SwiftUI Navigation: NavigationStack, Deep Linking, and TabView Explained
SwiftUI: Authenticator App from Scratch + How Those Authenticator App Work Under-hood
Default Actor Isolation: New Problems from Good Intentions
👍4
В Reddit обсуждают маркетинговые каналы, которые действительно работают для приложений. Главный для большинства - TikTok, но в целом более правильный подход: "ваш лучший канал — тот, который у вас есть". А какие каналы (кроме, собственно, ASO) вы используете и какие работают наиболее эффективно?

Разработка

Результаты опроса разработчиков Stack Overflow 2025

Маркетинг

Какие маркетинговые каналы действительно работают для ваших приложений? — обсуждение в Reddit
How Theo, a 2-Month-Old App, Hit $200K Monthly Revenue

Кроссплатформа

Flutter and the Liquid Glass Dilemma: A Developer’s Perspective
Setup IDE-like environment for Flutter in neovim (Windows included)
👍2
$1M+ ARR → $0 за одну ночь… Как я потерял свою ИИ-платформу с 6 млн пользователей

На Reddit занятная история ИИ-платформы Moemate. Начиналось все как ИИ-компаньон для десктопов, потом превратилось в подобие Character.AI с (судя по всему) изрядной долей NSFW, ну а затем Google продал свой доменный бизнес компании Squarespac и moemate.io заблокировали. После 3 недель бюрократического ада выяснилось, что настоящая причина блокировки — как раз «неприемлемый пользовательский контент».

К моменту, когда все прояснилось, всё уже было кончено. 6 миллионов пользователей, более миллиона MAU, $1 млн ARR — всё исчезло.

Глубинные проблемы, о которых говорит автор:

1. Бесконечное добавление новых функций вместо концентрации: всё время добавляли новые фичи (память, больше моделей, навыки, AR/VR), вместо того чтобы улучшать ключевые вещи — скорость работы и глубину взаимодействия.
2. Кризис идентичности: застряли между тремя группами:
• NSFW-пользователи (мы этого не хотели, но не могли от этого уйти)
• Любители фентези/ролевых игр (наша целевая аудитория)
• Те, кто искал полезность/продуктивность (их привлекали технические возможности)
3. Проблемы с приложениями: просто адаптировали веб-приложение под мобильные устройства, вместо создания нативного решения. Не было нормального сценария конверсии пользователей, перегруженный интерфейс, плохой UX.
4. Разрыв между ростом и продуктом: мы развивали рост отдельно от работы над продуктом, а не интегрировали их друг в друга.

Ну а выводы - в статье.
👍6🌚2
Android

Многие разработчики в Jetpack Compose сталкиваются с тем, что Modifier.scrollable не заставляет контент прокручиваться. Причина в том, что этот модификатор сам по себе не изменяет смещение элементов на экране. Его основная задача — отслеживать жесты прокрутки и сообщать о дельтах смещения, но он не применяет это смещение к контенту автоматически. Это низкоуровневый инструмент, который дает вам контроль над событиями скролла, но требует ручного управления состоянием для фактической прокрутки содержимого. Для реализации стандартной прокрутки следует использовать более высокоуровневые модификаторы, такие как Modifier.verticalScroll и Modifier.horizontalScroll, в сочетании с rememberScrollState(). Эти модификаторы уже содержат всю необходимую логику для управления состоянием и автоматического смещения контента, обеспечивая ожидаемое поведение «из коробки» для таких контейнеров, как Column или Row. Таким образом, Modifier.scrollable предназначен для создания кастомных взаимодействий с прокруткой, в то время как для большинства стандартных задач достаточно использовать verticalScroll или horizontalScroll.

7 Software Engineering Principles I Never Skip in Android Projects
Coroutines Vs Threads: An Interview-Ready Guide
Why Modifier.scrollable() Doesn't Scroll in Jetpack Compose — And What To Use Instead
👍3
В США Google начинает использовать модель оценки возраста для определения возраста пользователя аккаунта (меньше ему или больше 18 лет). Google анализирует «различные сигналы, уже связанные с аккаунтом пользователя», чтобы определить его возраст, независимо от указанной пользователем даты рождения. Сюда входят «типы информации, которую пользователь искал, или категории видео, которые он смотрел на YouTube». Ещё одним сигналом является длительность существования аккаунта. Если модель допустила ошибку, у взрослых есть несколько вариантов подтверждения возраста. Например, с помощью удостоверения личности государственного образца, цифрового удостоверения личности, поиска по номеру телефона, кредитной карты или селфи (обработка производится на устройстве). Можно предположить, что работать это будет так же криво, как все у Гугла - наверное, стоит заранее прекратить смотреть все детские видео 📺

Разработка

$1M+ ARR → $0 за одну ночь… Как я потерял свою ИИ-платформу с 6 млн пользователей
Разбираемся, когда приложению нужен редизайн и какие исследования провести, чтобы не слить бюджет
What is a Mobile Platform Engineer?
Vibe code is legacy code

Маркетинг

Google начал внедрение ML-модели определения возраста
Footnotes — краудсорсинговая система проверки фактов TikTok — запускается в США
Лучшие приёмы подталкивания пользователя к AHA-моменту: уведомления, подсказки и «микро-успехи»
Casual LiveOps Report H1 2025

Кроссплатформа

Flutter Web: The good, the bad and the ugly
KMP Gradle Convention: What It Is, How It Works, and Why It Matters
Please open Telegram to view this post
VIEW IN TELEGRAM
2👍2💯1
Epic выиграла апелляцию у Google [и Android, возможно, уже никогда не будет прежним]

Epic снова победила. Апелляционный суд подтвердил вердикт присяжных от 2023 года о том, что магазин приложений и платёжная система Google стали незаконными монополиями.

Последствия судебного решения выйдут далеко за рамки магазина Epic и игры Fortnite. Суд фактически вынудил Google открыть свой магазин приложений для конкурентов на целых три года. Google будет обязан распространять приложения других конкурирующих магазинов в  Google Play, предоставлять конкурентам доступ ко всему каталогу приложений Google Play, а также запрещена реализация ряда антиконкурентных практик, включая требование об использовании Google Play Billing для приложений.

Epic первоначально подала в суд на Google и Apple в 2020 году из-за удаления Fortnite из обоих магазинов, хотя дело было намного сложнее. Epic намеренно использовала Fortnite в качестве тарана, чтобы бросить вызов монополии магазинов приложений, и в случае с Apple она в основном проиграла. Но дело Epic против Google оказалось совсем другим. Присяжные увидели секретные соглашения о разделе доходов между Google, производителями смартфонов и разработчиками игр. Присяжные увидели внутреннюю переписку руководителей Google, из которой следовало, что Google опасается, что Epic может убедить своих коллег-разработчиков игр присоединиться к ним или создать конкурирующие магазины приложений, создав нежелательную конкуренцию для Google.

В декабре 2023 года жюри присяжных в Сан-Франциско пришло к выводу, что Google нарушил антимонопольное законодательство. Но потом, перед апелляцией, судья приостановил действие решения. Теперь ему дан зеленый свет.

«Полная победа в апелляции по делу Epic против Google!» — написал в Твиттере генеральный директор Epic Тим Суини.

Компания Epic уже объявила, что разместит свой магазин приложений в Google Play.

«Это решение существенно навредит безопасности пользователей, ограничит выбор и подорвет инновации, которые всегда были основой экосистемы Android. Нашим главным приоритетом в ходе апелляции остается защита наших пользователей, разработчиков и партнеров, а также поддержание безопасности платформы», — пишет представитель Google.

Google снова подает апелляцию, скорее всего, в Верховный суд.
👍5😢2
📺 Видео и подкасты за неделю на @AppFiles

(iOS En) Custom Liquid Morphing Menu Effect
(iOS En) Create Beautiful Liquid Glass: iOS 26 & SwiftUI in Figma & Xcode 26
(iOS En) Supercharge Your SwiftUI App with SF Symbols & Emoji Pickers
(iOS En) Liquid Glass Morphing Effects Using SwiftUI
(And Ru) Нюансы работы Android Runtime в сравнении с HotSpot VM
(And Ru) Как Google тайно изменил Android на глазах у всех: Project Mainline
(And En) WearOS Material 3 shape morphing
(And En) Compose Prototyping in Kotlin Notebooks
(And En) Writing Your Third Kotlin Compiler Plugin
(And En) Kotlin compatibility crash course
(And En) Compose draw speedrun - reloaded
(And En) Gradle 9.0.0 is Live - What's new? Configuration Cache, Java 17, Kotlin 2, and more
(And En) Gradle Build Cache - Deliver faster by doing less
(Crs En) The Easing Symphony: AnimationSpec in detail
(Crs En) Using Previews with Compose Multiplatform
(Dev Ru) Запись Avito Mobile Meetup
(Dev Ru) Как работает синтез речи: от робота до живого голоса — синтез речи, TTS
(Dev En) What is a Mobile Platform Engineer? 4 Years of Real Experience
(Mrk Ru) Заработок на AI-фоторедакторах и аватарах. iOS. Подписки. Разбор ниши

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

(iOS Ru) Почему Metal перестал быть страшным
(iOS Ru) Локализация iOS-приложения за 1$ в 2024 году
(And Ru) Нужно ли учить Java для Android-разработки в 2024
(Vrs Ru) KMP на ОС Аврора: проблемы и пути их решения
(Dev Ru) Алгоритмическая сессия на собеседовании (все собеседования)
(Dev Ru) Автоматическая генерация верстки под Server-driven UI из макетов Figma
(Dev Ru) Учимся договариваться о деньгах — Офферы, Зарплаты, Повышение
Please open Telegram to view this post
VIEW IN TELEGRAM
2👍1
Взгляд на чайник

Все материалы за прошлую неделю - чайник в Metal и работа с телевизионными каналами на Android, результаты опроса разработчиков Stack Overflow 2025 и какие маркетинговые каналы действительно работают, под капотом Android, процессы отладки, нейросеть у себя на компьютере и многое другое. Заходите!
👍1
iOS

Появление типа Observations знаменует собой значительное улучшение возможностей Swift по наблюдению за данными, особенно для разработчиков, использующих Swift Concurrency. Он стирает разрыв между реактивными обновлениями и современными асинхронными шаблонами, упрощая создание понятных, эффективных и отзывчивых пользовательских интерфейсов.

Стриминг изменений с помощью Observations
AsyncGraphics — редактирование изображений и видео с Swift Concurrency и Metal
High Performance SwiftData Apps
SwiftUI for Mac 2025
Ways SwiftData’s ModelContainer Can Error on Creation
How to use the @available attribute in Swift
Using the FoundationModels Framework for Streaming from external LLM providers
👍2
iOS

Уже есть немало статей об опыте перехода на Swift Package Manager — успешных и не очень. У автора переезд прошел удачно, но на каждом шагу возникали проблемы, которые было сложно нагуглить или вообще найти решения. Поэтому он решил собрать все накопленные знания и поделиться ими в этой статье, надеясь, что другие разработчики сэкономят кучу времени.

Игра в SPM
Global actor in Swift Concurrency explained with code examples
SwiftUI Component Architecture Mastery: Professional Styling, Testing & Performance
A SwiftData alternative with SQLite + CloudKit: Public beta
👍32
Android

Появление retain в Compose Runtime стало важным шагом к тому, чтобы сделать Compose самостоятельной UI-системой. Этот механизм закрывает разрыв между краткоживущим состоянием и длительным хранением в памяти, позволяя сохранять значения при переходах, не выходя за пределы composable-мирa. Будь то сложная навигация, обработка конфигурационных изменений или управление временным UI-состоянием — retain предлагает новый многообещающий механизм восстановления состояния за пределами композиции непосредственно в рамках Compose Runtime.

Первый взгляд на retain{}: новый способ сохранения состояния в Jetpack Compose
Flocon — отладка и проверка Android-приложений
Swipe to Pay, или Как мы переписали слайдер оплаты на Compose
Kotlin DSL: What’s New?
Top 10 Must-Know Kotlin Extension Functions: Turn Jetpack Compose Code from Mundane to Magical
Jetpack Compose Offline-First Architectures
How I Made My Own ScrollBar in Android Compose (With Drag Support!)
The Magic Behind Retrofit: How a Simple Interface Becomes Your API Gateway
👍3
OpenMind разрабатывает программную среду OM1 для гуманоидных роботов, которая выполняет функции операционной системы. Компания сравнивает себя с Android для робототехники, поскольку её программное обеспечение открыто и не зависит от оборудования. Так что если вы хотите первыми открыть новую среду и экономику - посмотрите на OM1, возможно это и правда "Android будущего" 🤖

Разработка

OpenMind хочет стать Android для роботов
«Чёрное зеркало» в реальности: как мы сделали приложение будущего
You Have Too Many Metrics

Маркетинг

Самые скачиваемые и зарабатывающие приложения в России в июле 2025
Stories в ecommerce-приложениях: как привычный формат соцсетей увеличивает продажи

Кроссплатформа

Опенсорсим yx_state — свой State Management для Flutter
Dynamic Loading in a Clean Architecture KMM Engine
Beyond print(): Levelling Up Your Flutter Logging
👍5
🤥 У вас слишком много метрик

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

Почему это важно:

• Настроить и поддерживать каждую метрику — затратно
• Метрика, не ведущая к решениям, — просто красивая картинка

Что делать?

1. Выбирайте только самые существенные метрики. Лучше 2–3, но работающих.
2. Регулярно проверяйте их корректность. Метрика «гниёт», если ей не заниматься.
3. Ясно формулируйте ожидания и пороги: когда стоит беспокоиться? На сколько % должно скакнуть значение, чтобы бить тревогу?
4. Обеспечьте действия. Если метрика вышла за пределы — делайте что-то, а не откладывайте в папку «обсудим потом».

Когда вы в последний раз меняли что-то в продукте или бизнес-процессах, опираясь именно на метрики? Если не вспомните — возможно, ваши метрики не работают на вас. И вообще, сколько метрик вы отслеживаете для вашего продукта?
Please open Telegram to view this post
VIEW IN TELEGRAM
👍42