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
Улучшаем потолок разработки

Новая подборка всех материалов за неделю. Понимаем и улучшаем производительность SwiftUI, решаем проблему «деградации» YouTube на Android, определяем потолок в разработке, разбираем большую ложь чистой архитектуры, смотрим на рост цифровой веры и многое другое. Заходите!
👍4
iOS

Диаризация - это процесс автоматического определения, кто и когда говорит в аудиозаписи. Грубо говоря, система делит аудиофайл на сегменты по разным говорящим. Не знаю. зачем вам это знание, но так же знайте, что в open source реализовали систему диризации на  CoreML. Так что если вам нужно выделить спикеров - используйте готовый фреймворк.

Почему я перестал использовать структуры для всего в Swift
FluidAudio — фреймворк диаризации на CoreML
Glassifying toolbars in SwiftUI
Responding to gestures: Dragging
Using WebKit to load web content in SwiftUI
How to make ScrollView content fill available space
1🔥1
Android

Кирилл (@android_broadcast) уже, кажется, разбирал фоновую работу в Android, но если вы хотите освежить свои знания - на Хабре от Облака Mail вышла статья, в которой рассматривается вся история изменений.

Решаем проблему скелетных загрузчиков и создаем иллюзию скорости без перекомпозиции
Сеньоры с LinkedIn или доверяй, но проверяй. Как мы докатились до такого?
Как мы случайно ускорили релизную сборку в два раза
Эталонный пример Android приложения от Google
Jetpack Android Starter — шаблон современного Android-приложения
Ликбез по UseCase’ам Android: от базовых реализаций до мультипровайдерных и многомодульных систем — Часть 1
Хроника изменений API фоновой работы в Android
Функциональное программирование в Android. Теория категорий и DI
Deep Dive into Jetpack Compose Text Views : The Secret Life of Composable
Don't use Type-safe Project Accessors with Kotlin Gradle DSL
Curious case of missing Bottom Sheet Previews
Is this a first nail in the ViewModel’s coffin?
2
А вот Артем из Membrana Kids пишет о том, как внедряли KMP в свой iOS-проект. Всего за два спринта. Пишут, что довольны - переход снизил трудозатраты на новые функции и устранил рассинхронизацию логики между платформами, особенно критичную в проектах с быстрыми изменениями и параллельной разработкой.

Разработка

Применение KISS для архитектуры автотестов
Что такое Фильтр Блума
Будущее инструментов разработки и опенсорса
Вычисления на GPU — CUDA, NVidia, AMD
Интеграция Flutter Mobile SDK в ОС Аврора
You're all CTO now

Маркетинг

Доход Cluely удвоился за неделю, но конкуренты наступают

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

Демо-интервью по Flutter с Middle-разработчиком
Как Android-разработчик в iOS погружался: мой опыт внедрения Kotlin Multiplatform
Часть 2. GoForm — как не страдать с формами во Flutter
Alarmee: Schedule Local and Push Notifications in KMP
Cross-Platform Apps Done Right: My Experience with Kotlin + Compose Multiplatform
👍2
🟦 Bitchat - новый Bluetooth-мессенджер

Генеральный директор Block и бывший глава Twitter Джек Дорси создал за выходные новый мессенджер Bitchat.

Bitchat — это приложение для обмена сообщениями, работающее через Bluetooth-сети, что позволяет пользователям отправлять сообщения без Wi-Fi или сотовой связи. Из-за технических ограничений Bluetooth такие приложения обычно работают только на расстоянии около 100 метров, что делает их полезными в таких ситуациях, как поиск друзей на оживленном музыкальном фестивале, где сотовая связь нестабильна. Однако Дорси утверждает, что его приложение имеет расширенный диапазон, передавая сообщения через пиров на расстояние до 300 метров.

Дорси опубликовал исходники проекта на GitHub и открыл Bitchat для бета-тестеров через TestFlight, но он быстро достиг своего максимума в 10,000 пользователей. Он сказал в X, что приложение все еще находится на рассмотрении в Apple перед выпуском.
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
8👍6
iOS

С мест докладывают, что топ-менеджер Apple, курирующий внутренние модели ИИ, покидает компанию и переходит в корпорацию на M. Как сообщает Bloomberg, Руоминг Панг переезжает в Менло-Парк и присоединяется к звездной группе M*** Superintelligence Labs Марка Цукерберга. Панг перешел в Apple из Google в 2021 году и руководил командой из примерно 100 человек, стоящей за моделями, которые поддерживают функции Apple Intelligence, такие как Genmoji, Priority Notifications и текстовое резюме на устройстве. Его уход наносит еще один удар по усилиям Apple по созданию конкурентоспособных моделей ИИ внутри компании. «Уход Пана может стать началом череды уходов из группы Apple Foundation Models, и несколько инженеров сообщили коллегам, что планируют уйти в ближайшем будущем. Том Гантер, главный заместитель Пана, покинул Apple в прошлом месяце».

Реагирование на жесты в SwiftUI: перетаскивание
Глава Foundation Models ушел из Apple
Swift Actors: What Are They For?
Swift Protocols Every Developer Should Know: Equatable, Hashable, Identifiable, Comparable
How to Write Thread-Safe Code in Swift?
Grouping elements within a Glass Effect Container in SwiftUI
Real-time systems with Combine and WebSockets
Building Redux from Scratch in SwiftUI: Production-Ready Implementation
3
Android

В Kotlin object гарантирует синглтон — один экземпляр на всё приложение. Но это работает только до тех пор, пока не вмешиваются библиотеки сериализации. Например, Gson при десериализации создаёт новый экземпляр объекта, нарушая сравнение === и ломая логику, завязанную на глобальное состояние. Moshi вообще не поддерживает object без кастомного адаптера, а вот kotlinx.serialization корректно обрабатывает такие случаи, возвращая оригинальный экземпляр. Если вы используете object для хранения состояния или как синглтон в архитектуре, важно понимать, как с ним работают сторонние библиотеки. Чтобы сохранить гарантию единственного экземпляра — используйте kotlinx.serialization или пишите собственные адаптеры для других библиотек.

Alarmee — будильники, локальные и push-уведомления на Android и iOS
Рулим светодиодом по UDP и ESP8266
Basic Guide to Animation in Jetpack Compose
When Kotlin object Stops Being a Singleton
SnapshotFlow or collectAsState? How to pick the right tool for Jetpack Compose
It’s All About (Accessibility) Focus And Compose
👍4🤯4
Сначала это кажется магией: вы пишете пару подсказок — и ИИ сам пишет код, строит архитектуру, решает рутину. Вы больше не разработчик — вы менеджер агентов. Продуктивность на максимуме, и всё летает. Но потом приходит пустота. Вы больше не мучаетесь с зависимостями, не ночуете в дебаггере, не проходите этот бесконечный путь проб и боли. Зато пропадает дофамин — тот самый кайф от «я сам всё сделал». Вам больше не нужно страдать — и именно в этом проблема. Разработка превращается в управление. Всё больше инженерной работы — это orchestration. Вы не пишете код — вы его планируете. Не решаете задачу — вы её декомпозируете. Даже не дебажите — вы объясняете ИИ, что и где не так. Ваши навыки уходят в тень. Руки помнят, но уже не летают по коду, как раньше. Вы ещё можете «спасти проект», но уже не как автор, а как "спасетль-парашютист", брошенный в незнакомый ландшафт, сгенерированный ИИ. Выгорание становится тише, но глубже. Нет острой боли — но нет и яркой радости. Вы чувствуете, что делаете много — но чувствуете ли вы, что сделали что-то? Кем вы будете через 5 лет? Точно ли вы пришли в индустрию, чтобы писать "правильные подсказки"?

Разработка

Теперь мы все CTO
Джек Дорси работает над Bluetooth-мессенджером Bitchat
Lokilizer — бесплатный инструмент для перевода приложений с двух языков на любые другие
I Tried Google’s New Gemini CLI. It’s the Most Powerful Open-Source Dev Tool

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

10 Must-Have Libraries for Compose Multiplatform Projects — With Code & Use Cases
Building a Complete Flutter Maps App with Ola Maps: Beyond the Basic Package
👍4😁3🤡31
iOS

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

Акторы в Swift — для чего они нужны?
StoreKitTheKit — простые покупки поверх StoreKit2
VStack in SwiftUI: Advanced Features & Hidden Secrets
Apple Container Usage In Details
How to Detect Text Truncation in SwiftUI?
Tuist Server is Now Source Availabl
Introducing Animatable macro in SwiftUI
👍42
Android

Если вы всегда хотели написать свой VPN-клиент, то вот на Хабре "дневник разработки" - как человек создал свое приложение. История о пути, граблях и открытиях, которая будет полезна тем, кто тоже решит заглянуть под капот VPN-технологий на Android.

Ликбез по UseCase’ам Android: от базовых реализаций до мультипровайдерных и многомодульных систем — Часть 2
Я написал свой VPN-клиент для Android. Зачем, если их сотни, и что скрывается под капотом?
Why Retrofit 3.0.0 Matters (Even if 2.9.0 Still Works)
Code That Disappears in Production: A Gradle Pattern Every Android Developer Must Know
MVI vs MVVM in Android: A Balanced Take with Code Snippets
👍8
Emerge Tools выложили в open source свой Reaper для iOS - инструмент для поиска неиспользуемого кода. Работает за счет анализа рантайма, регистрируя то, что делают пользователи. По сути, Reaper проверяет среду выполнения Objective-C и Swift на наличие метаданных, которые уже используются для отслеживания жизненного цикла типов. Таким образом, он не добавляет никаких накладных расходов во время работы вашего приложения и проверяет только уже существующие поля во время загрузки. Пишут, что Duolingo с его помощью сократил 1% своего кода.

Разработка

Gemini CLI от Google — самый мощный инструмент разработки
Что такое расширяющееся (или косое) дерево
Reaper: An open-source SDK for finding dead code on iOS
How I build software quickly

Маркетинг

ИИ стал незаменимым помощником в подаче налоговых деклараций
Самые скачиваемые игры и приложения в RuStore в первой половине 2025
Epic Games урегулировала антимонопольное дело против Samsung

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

Modular Architecture in React Native for Scalable Mobile Apps
Why precision matters — Decimals in Dart/Flutter
👍6
Галлюцинации ChatGPT заставили Soundslice разработать новую фичу

Soundslice - платформа для обучения музыке от Адриана Головатого, одного из создателей Django. Она известна своим видеоплеером, синхронизированным с нотной записью, который подсказывает пользователям, как играть ноты, а так же предлагает функцию под названием «сканер нот», которая позволяет пользователям загружать изображение бумажных нот и, используя искусственный интеллект, автоматически превращать его в интерактивный лист с нотами.

Головатый внимательно следит за логами этой функции, чтобы видеть возникающие проблемы и пути их решения. Именно там он начал видеть загруженные изображения ChatGPT. Они создавали множество ошибок в логах. Вместо изображений нот это были изображения слов и блоков символов, известных как ASCII-табулатура. Это простая текстовая система, используемая для гитарной нотации с использованием обычной клавиатуры. Объём этих изображений из сеансов ChatGPT был не настолько велик, чтобы их хранение обходилось дорого его компании и перегружало пропускную способность приложения, сказал Головатый. Он просто был озадачен и написал в блоге о сложившейся ситуации.

Оказалось, что ChatGPT предлагает пользователям слушать такую музыку, открыв учётную запись Soundslice и загрузив изображение сеанса чата. Но это оказалось не так. Загрузка этих изображений не преобразовывала ASCII-ноты в аудиозапись. «Главная проблема заключалась в репутации: новые пользователи Soundslice приходили с ложными ожиданиями. Им уверенно говорили, что мы сделаем то, чего на самом деле не делаем», — рассказал он.

Он и его команда обсудили варианты: разместить по всему сайту предупреждения об этом: «Нет, мы не можем превратить сеанс ChatGPT в слышимую музыку» — или встроить эту функцию в сканер, хотя раньше он никогда не рассматривал возможность поддержки этой необычной системы нотной записи. В конечном итоги решили внедрить эту функцию.
Мои чувства по этому поводу противоречивы. Я рад добавить инструмент, который помогает людям. Но мне кажется, что нас к этому вынудили каким-то странным образом. Стоит ли нам действительно разрабатывать функции в ответ на дезинформацию?

Он также задался вопросом, является ли это первым задокументированным случаем, когда компании приходится разрабатывать функцию, потому что ChatGPT постоянно повторяет многим людям свои галлюцинации на эту тему.
5🤔3👍1
iOS

Text активно используется в SwiftUI. По сравнению с аналогами в UIKit/AppKit, Text не требует настройки и работает «из коробки», но это также означает, что разработчики теряют контроль над ним. В этой статье автор демонстрирует на примере из реальной жизни, как решить, казалось бы, «невозможную» задачу с помощью "подхода SwiftUI" - найти и использовать первое представление в заданном наборе, где текст не обрезан.

Как обнаружить обрезку Text в SwiftUI?
Swift concurrency. Executors, Actors и их связь с потоками
What is Approachable Concurrency in Xcode 26?
Building a Scrollable Masonry View of Cards in SwiftUI (with Scroll-to-Top)
How to Prepare a Strong iOS Resume (That Actually Gets You Calls from Top Companies)
SwiftUI Design System: A Complete Guide to Building Consistent UI Components (2025)
2👍1
Android

Jetpack Compose — это мечта, ставшая реальностью после многих лет борьбы с XML. Но даже в мечтах бывают повторяющиеся моменты, верно? Бесконечные Spacer, шаблонный код для простого Divider, вложенность, необходимая только для центрирования чего-либо на экране... список можно продолжать. Это UI-эквивалент смерти от тысячи порезов бумагой. Устав от повторения, автор статьи решил дать отпор. Он начал превращать эти распространённые UI сниппеты в небольшие, многоразовые компонуемые объекты. Результат? Более чистый код, более быстрая разработка и макет, который гораздо легче читать с первого взгляда. Он делится своей личной коллекцией этих незаменимых помощников. Если вы цените читабельный, поддерживаемый и элегантный код UI, думаю, вы захотите позаимствовать несколько из них для себя.

Android Interview Questions — вопросы с собеседований Android-разработчиков
Автоматизация тестирования мобильного приложения КриптоАРМ Mobile на Android
Start building for the next generation of Samsung devices
Modular Ktor: Building Backends for Scale
My Favorite Jetpack Compose UI Utilities — That I Can’t Live Without
Stop Guessing, Start Measuring: DIY App Performance Tracing for Android
Building a Dynamic Curve Spinner in Jetpack Compose
👍4
Hugging Face начал приём заказов на настольных роботов Reachy Mini. Планируется выпустить две версии - Reachy Mini Wireless, беспроводная, стоит 449 долларов и работает на мини-компьютере Raspberry 5, вторая — Reachy Mini Lite, ее необходимо подключать к компьютеру, но она дешевле — 299 долларов. Роботы с открытым исходным кодом поставляются в виде набора для самостоятельной сборки разработчиками. Reachy Mini размером с обычную мягкую игрушку и оснащены двумя экранами вместо глаз и двумя антеннами. После сборки эти роботы полностью программируются на Python. Эти устройства также поставляются с набором предустановленных демонстрационных версий и интегрированы с Hugging Face Hub, платформой машинного обучения с открытым исходным кодом компании, которая предоставляет пользователям доступ к более чем 1,7 миллиона моделей искусственного интеллекта и более чем 400 000 наборов данных. Целевая аудитория этих устройств — разработчики. Reachy Mini позволяют пользователям программировать, создавать и тестировать приложения с искусственным интеллектом на настольном роботе.

Разработка

Hugging Face открывает прием заказов на настольных роботов Reachy Mini

Маркетинг

Галлюцинации ChatGPT заставили Soundslice разработать новую фичу

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

Duit: как создать эффективный BDUI фреймворк, не привлекая внимания санитаров
Flutter + Cursor: настройка background agent
ReaxDB — a high-performance NoSQL database for Flutter
Introducing react-native-wallet: The Cross-Platform Way to Add Cards to Apple & Google Wallet
We Thought React Native Was the Answer — Until Our App Hit 190% CPU
4👍1
Развитие программ раннего доступа Android: Canary канал

Чтобы лучше поддерживать разработчиков и предоставлять более ранний и постоянный доступ к функциям, находящимся в разработке, Google объявляет о существенном обновлении программы предварительных версий. Платформа Android будет иметь Canary канал релизов, который заменит предыдущую программу developer preview для разработчиков. Этот Canary канал будет функционировать параллельно с существующей программой бета-тестирования.

• Вы можете опробовать новые функции и запланированные изменения поведения на самых ранних стадиях их разработки и внести свой вклад. Эти изменения не всегда могут попасть в стабильную версию Android.
• Канал Canary будет работать параллельно с программой бета-тестирования. Программа бета-тестирования по-прежнему позволяет вам опробовать более отлаженный набор функций, которые, вероятно, скоро будут выпущены.
• Вы можете использовать Canary сборки с вашей непрерывной интеграцией (CI), чтобы проверить, не вызывают ли какие-либо из наших функций, находящихся в разработке, непредвиденные проблемы в вашем приложении, что позволит максимально эффективно решать проблемы.

Вы можете использовать Android Flash Tool для установки последней Canary сборки на поддерживаемое устройство Pixel. После установки обновления Canary вы будете получать его по воздуху по мере их появления. Canary выпуски будут доступны на эмуляторе Android через диспетчер устройств в Android Studio (в настоящее время только в канале Android Studio Canary), а Canary SDK будут доступны для разработки через SDK Manager.

Переходя на полноценный Canary канал, Google стремится создать более прозрачный, совместный и эффективный процесс разработки, предоставляя вам беспрепятственный доступ, необходимый для подготовки к будущему Android.
👍31😁1
📺 Видео и подкасты за неделю на @AppFiles

(iOS Ru) Рынок разработки в СНГ, iOS, Переезд в UK
(iOS Ru) Перерисовки в SwiftUI
(iOS En) Apple-Style OnBoarding Page With Animations Using SwiftUI
(iOS En) How to solve SwiftUI performance issues (according to Airbnb iOS engineers)
(iOS En) Liquid Glass update
(iOS En) Mastering Swift Sets : A Practical Guide
(And Ru) Мок-собеседование Android-разработчика: middle и выше (+ все собеседования)
(And En) Back it up, bring it back: No data left behind - Android Developers Backstage
(And En) Google Play PolicyBytes - July 2025 policy updates
(And En) Now in Android: 119 – Android 16, testing, desktop experiences, AndroidX, and more
(And En) Create advanced automations using the Home APIs on Android
(And En) Stateful vs. Stateless Composables In Jetpack Compose? - Everything You Need to Know
(And En) Introduction to Spring Boot for Android Developers In 15min
(And En) Kotlin 2.2 Livestream With the Language Evolution Team
(And En) Model Context Protocol in Kotlin
(And En) Dissecting Kotlin: Surveying the Latest Stable and Experimental
(And En) Taming Asynchronous Beasts: Debugging and Performance Tuning in a Coroutine World
(And En) Creative UIs with Compose
(Crs En) Kotlin and Compose Multiplatform Patterns for iOS Interop
(Dev Ru) Как сделать любую задачу интересной
(Dev Ru) АI за пределами кодинга — ChatGPT, Gemini, Anthropic, AI для бизнеса
(Dev En) VGG From Scratch – Deep Learning Theory & PyTorch Implementation (Full Course)
(Mrk Ru) Как заработать на ASO? Запуск с нуля iOS-приложения INVOICER

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

(iOS Ru) Что нового в Swift 6?
(And Ru) Как обойти множественное наследование в Kotlin и Java. Агрегация и композиция
(Dev Ru) System Design-интервью для практиков
(Dev Ru) Локальная разработка в Авито
Please open Telegram to view this post
VIEW IN TELEGRAM
👍32
Как обнаружить ранний доступ

Все материалы за неделю - понимаем и улучшаем производительность SwiftUI, решаем проблему «деградации» YouTube на Android, определяем потолок в разработке, разбираем большую ложь чистой архитектуры, смотрим на рост цифровой веры и многое другое. Заходите!
👍4
ИИ-инструменты замедляют работу опытных разработчиков

Новое исследование, опубликованное в четверг некоммерческой исследовательской группой METR, ставит под сомнение степень, в которой современные инструменты ИИ-программирования повышают производительность опытных разработчиков.

Для этого исследования METR провела рандомизированное контролируемое исследование, набрав 16 опытных программистов, занимающихся open source разработкой, и поручив им выполнить 246 реальных задач в больших репозиториях кода, в которые они регулярно вносят свой вклад. Исследователи случайным образом распределили примерно половину этих задач как “разрешенные для ИИ”, что дало разработчикам разрешение использовать самые современные инструменты для ИИ-программирования, такие как Cursor Pro, в то время как другая половина задач запрещала использование инструментов ИИ.

Перед выполнением поставленных задач разработчики прогнозировали, что использование ИИ-инструментов сократит время их выполнения на 24%. Но этого не произошло.

“Удивительно, но мы обнаружили, что использование ИИ на самом деле увеличивает время выполнения на 19% — разработчики работают медленнее, когда используют инструменты ИИ”, - говорят исследователи.

Это выявляет значительное расхождение между воспринимаемым и фактическим влиянием ИИ на производительность разработчиков.

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

Авторы исследования стараются не делать каких-либо серьезных выводов из этих результатов, прямо отмечая, что они полагают, что системы искусственного интеллекта в настоящее время все таки в состоянии ускорить работу многих или большинства разработчиков. Они также отмечают, что за последние годы ИИ значительно продвинулся вперед, и что результаты могут улучшиться даже через три месяца.
👍10💯4😁31
Android

Теперь уже официально из уст Самира Самата, президента Android Ecosystem в Google - ChromeOS и Android объединятся в одну платформу. Ранее в 2024 году Google объявил, что объединяет части ядра Android с ChromeOS для более быстрой интеграции искусственного интеллекта. Похоже, что теперь компания будет развивать эту интеграцию и полностью объединит ChromeOS с Android. В последних версиях Google уже добавил в Android несколько функций, характерных для десктопов. Первый квартальный релиз платформы Android 16 в конце этого года только улучшит ситуацию, добавив режим десктопа для многооконной многозадачности. Эта функция также появится на планшетах, что сделает их лучшей альтернативой десктопам для большинства пользователей. Но могут пройти годы, прежде чем Google завершит слияние ChromeOS с Android, так что быстрого появления альтернативе экосистемы от Applr вряд ли стоит ждать.

Google объединит ChromeOS с Android
LazyTimetable — быстрое расписание для Jetpack Compose
Мок-собеседование Android-разработчика: middle и выше
Развитие программ раннего доступа Android: Canary канал
Improve Your Kotlin Code Quality with Detekt in Android
Mastering Android Text-to-Speech: The Ultimate Guide
Creating an Engaging Progress Button in Jetpack Compose
Nested Scrolling in Jetpack Compose
3👍3🙊3