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
$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
Сколько метрик вы отслеживаете для каждого приложения?
Anonymous Poll
12%
1-3
11%
4-6
4%
7-10
30%
Больше 10
22%
Вообще ничего не отслеживаем
21%
Посмотреть
iOS

Если бы SwiftUI был парком развлечений, навигация была бы домом с привидениями — сначала захватывающе, но быстро понимаешь, что не знаешь, как из него выбраться. Apple подарила нам NavigationView, а затем деликатно похлопала по плечу, выпустив новенький блестящий NavigationStack. Добавьте NavigationPath, onOpenURL и всеми любимый загадочный ящик — диплинкинг — и теперь даже опытные iOS-разработчики выглядят как тот мем с парнем, вокруг которого парят математические уравнения. Но не волнуйтесь. Создаёте ли вы простое приложение с несколькими экранами или проектируете динамический поток с URL-адресами и кастомными типами данных, в SwiftUI действительно можно сделать простую навигацию. Как только вы разберётесь с инструментами (и будете знать, когда с ними не стоит бороться), всё станет на свои места.

Распутываем навигацию SwiftUI
Meetingnotes — ведение заметок на совещаниях с ИИ
Как я сделал универсальный Skeleton‑View с shimmer‑эффектом в SwiftUI
Flipkart iOS Developer Interview (With Questions & DSA Challenges)
@ViewConfigurable — A better way to build SwiftUI components
SwiftUI: Blur Card UI
Swift 6: Sendable, @unchecked Sendable, @Sendable, sending and nonsending
Build, run and debug iOS and Mac apps in Zed instead of Xcode
👍21
Android

Автор статьи честно рассказывает о самом тревожном моменте своей карьеры: его приложение для чтения новостей внезапно стало причиной массовых сбоев — программа захватывала огромные объёмы памяти (400+ МБ), из-за чего тысячи телефонов по всему миру начали зависать и перезагружаться. Всё началось ночью с лавины негативных отзывов и экстренных сообщений от пользователей и коллег: Android-система принудительно завершала работу приложения из-за исчерпания памяти, а у некоторых смартфоны и вовсе становились практически нерабочими.

The Day My Android App Nearly Killed Every User’s Phone (And How I Fixed It)
SOLID Principles for Beginners with Kotlin
LayoutNode: What Actually Happens When You Write @Composable

Поставьте 👍, если хотите эту статью на русском!
👍11
Microsoft уже выпустила несколько обучающих курсов по ИИ, таких как AI Agents for Beginners, Copilot Adventures и Generative AI for Beginners. В этом курсе "Генеративный ИИ для начинающих с JavaScript", размещенном на GitHub, вы научитесь создавать приложения GenAI с использованием JavaScript.

Разработка

Курс «Генеративный ИИ для начинающих с JavaScript» от Microsoft
У вас слишком много метрик
Top UI/UX trends to watch in 2026
AI vs Technical Debt: Is This A Race to the Bottom?
Building a crash report automation for iOS and Android

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

Fix that Google Fonts glitch in Flutter apps
1
🤖 С мест докладывают, что только что презентованная GPT-5 (вот страница для разработчиков) стала самой умной моделью, когда-либо созданной OpenAI. По впечатлениям, намного опережает царивший ранее в коде Claude. Пишут, что станет доступна сегодня,причем даже на бесплатном тарифе. Так что завтра попробуем.

Разработка

How I never forget anything as a staff software engineer

Маркетинг

$10 тыс. MRR: вот что сработало, а что нет
Tinder готовит редизайн и новые фичи для увеличения вовлеченности
LTV для инди-проектов: как считать пожизненную ценность игрока при малой аудитории
I made a $100K iOS App. Apple took 30%. The Rest Went to Bugs and Burnout.
Casual Games Report H1 2025: Three Genres Generating 80% of Revenue

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


Базовый Dart (Часть №1)
Kick: Kotlin Inspection & Control Kit — единый модульный инструмент отладки прямо в приложении
How to Use Firebase Database Rules with Flutter: Test vs Production (with Sample Code and Rules)
Please open Telegram to view this post
VIEW IN TELEGRAM
1👍5