AppFiles - Mobile Development – Telegram
AppFiles - Mobile Development
2.13K subscribers
2.76K photos
38 videos
11 files
3.69K links
Библиотеки, обучающие статьи, курсы и видео для (мобильных) разработчиков. Если есть вопросы - пишите @lbogolubov.
Download Telegram
Space! - виджет с фотографиями NASA

Астрономическая фотография дня от NASA — теперь на вашем главном экране с виджетами!

Space! отображает последние фотографии Astronomy Picture of the Day, публикуемые NASA каждый день. Чтобы увидеть последние фотографии, добавьте виджет на главный экран или в окно «Сегодня», или просто откройте приложение для просмотра на весь экран и ознакомления с познавательным описанием.

Space! — это приложение с полностью открытым исходным кодом, разработанное на Swift и SwiftUI.

Space! на GitHub: https://github.com/jtbandes/SpacePOD
Платформа: iOS
⭐️: 112
👍1
Разница между @MainActor и DispatchQueue.main.async — вопросы с собеседования

Основное различие заключается в том, что @MainActor — это современный атрибут из фреймворка Swift Concurrency, который гарантирует выполнение кода в главном потоке на этапе компиляции, а DispatchQueue.main.async — это более старая команда из Grand Central Dispatch (GCD), которая асинхронно отправляет блок кода на выполнение в главную очередь в рантайме.​

Статья: https://apptractor.ru/info/articles/raznitsa-mezhdu-mainactor-i-dispatchqueue-main-async-voprosy-s-sobesedovaniya.html
Платформа: iOS
👍2
За 3 дня запустить Android приложение на iOS: опыт адаптации приложения под CMP

В прошлом году мы решали любопытную задачу. Нам нужно было вдвоем за одну рабочую неделю собрать прототип мобильного приложения для сервиса бронирования отелей.

Задача осложнялась тем, что заказчик рассматривал не только нашу команду на роль подрядчика. Мы не могли отдать сырой черновик, в котором просто нажимаются нужные кнопки и работают ключевые сценарии — мы должны были превзойти конкурентов-флаттеристов. И нам удалось это сделать с помощью KMP.

Да, тема довольно холиварная, и в статье я не заявляю, что KMP лучше Flutter’а во всем. Каждая технология хороша под свои задачи. Вместо этого я расскажу о конкретном проекте, на котором KMP оказался более удачным выбором. Также коснусь вопросов архитектуры и миграции Android-приложения на iOS с помощью CMP, а заодно подсвечу подводные камни, с которыми пришлось разбираться в процессе.

Статья: https://habr.com/ru/companies/kts/articles/959950/
Платформа: кроссплатформа
👍1
This media is not supported in your browser
VIEW IN TELEGRAM
Сравниваем два View с помощью слайдера в SwiftUI

Когда вам нужно визуально сравнить два изображения, экрана или состояния, слайдер «до и после» часто оказывается наиболее интуитивно понятным решением. В этой статье мы рассмотрим, как создать многоразовое представление сравнения со слайдером полностью на SwiftUI — без использования UIKit или внешних библиотек.

Статья: https://apptractor.ru/info/articles/sravnivaem-dva-view-s-pomoschyu-slaydera-v-swiftui.html
Платформа: iOS
👍3
Мы перенесли 40,000 строк Objective-C на Swift - вот что нас чуть не убило

Когда мы начинали, мы думали, что модернизируемся. На самом деле мы просто исправляли свои прошлые ошибки.

Сделали бы мы это снова? Вероятно, но медленнее и умнее.

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

Переписывание кода романтично, пока вы сами не столкнётесь с ним.

И если вы когда-нибудь поймаете себя на мысли «Давайте просто всё перепишем на Swift» - сделайте глубокий вдох. Распланируйте лучше. И всё равно действуйте.

Потому что, хотя это чуть не убило нас, в итоге оно сделало нас лучшими разработчиками.

Статья: https://apptractor.ru/info/articles/40-000-objective-c.html
Платформа: iOS
👍2
Hivefy - музыкальный плеер в стиле Spotify на Flutter

Hivefy — это открытое музыкальное Offline-First приложение без рекламы, вдохновленное Spotify. Создано на Flutter с использованием неофициального JioSaavn API.

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

Hivefy на GitHub: https://github.com/Harish-Srinivas-07/hivefy
Платформа: кроссплатформа
⭐️: 34
👍2
This media is not supported in your browser
VIEW IN TELEGRAM
AppleLoginAnimation - анимация как в логине Apple iCloud

Это воссоздание анимации, которую вы видите на экране входа в iCloud, с использованием SwiftUI и SpriteKit.

AppleLoginAnimation на GitHub: https://github.com/georgecartridge/AppleLoginAnimation
Объяснение в X: https://x.com/georgecartridge/status/1982483221318357253
Платформа: iOS
⭐️: 59
👍2
Jetliner XR

Автор статьи подробно рассказывает о проекте Jetliner XR — демонстрации пространственных (spatial) возможностей на платформе Android XR. С помощью 3D-модели самолёта (jetliner) демонстратор показывает, как можно создавать приложения с допол­ненной и смешанной реальностью, используя инструменты из набора Jetpack XR. Статья служит практическим путеводителем для разработчиков: она объясняет ключевые шаги, особенности архитектуры и возможные сложности при работе в пространственной среде. Jetliner XR — не просто демонстрация, а стартовая точка для экспериментов и прототипов.

Статья: https://charlesmuchene.com/jetliner-xr
Платформа: Android
👍1
Устранение задержек в Composable: 3 практических метода для создания плавного UI

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

Однако, если у вас много работы или вам не хватает опыта с Compose, вам может потребоваться выполнять значительный объём кода внутри Composable-объектов для отображения состояния в пользовательском интерфейсе.

Надеюсь, когда придёт время, вы вспомните представленные здесь решения и сочтёте их полезными.

Статья: https://apptractor.ru/info/articles/ustranenie-zaderzhek-v-composable-3-prakticheskih-metoda-dlya-sozdaniya-plavnogo-ui.html
Платформа: Android
Eblan Launcher - быстрый настраиваемый и безопасный лаунчер для Android

Большинство лаунчеров для Android — это всего лишь форки Launcher3 от AOSP. Они часто забрасываются из-за своей сложности, что затрудняет участие новичков. Плюс многие из них до сих пор написаны на Java и используют устаревшие API. Автор этого проекта хотел попробовать что-то другое — разработать лаунчер для Android с нуля, приветствуя новых разработчиков и применяя надёжные принципы программирования и лучшие практики, чтобы проект оставался живым в долгосрочной перспективе. Его цель — дать всем возможность пользоваться мощными функциями, не жертвуя при этом конфиденциальностью.

Eblan Launcher на GitHub: https://github.com/JackEblan/EblanLauncher
Платформа: Android
⭐️: 158
😁13
От стороннего платёжного решения к собственному SDK: история RuStore Pay SDK

Опыт показал: чтобы развиваться, важно брать контроль в свои руки. Создание своего SDK потребовало много сил, но дало главное — гибкость, скорость и предсказуемость.

Сегодня Pay SDK стабильно работает в сотнях приложений, помогает разработчикам зарабатывать и даёт пользователям удобный и понятный сценарий оплаты. Мы не останавливаемся: впереди новые методы оплаты, дополнительные инструменты монетизации и улучшения по запросам сообщества.

Статья: https://habr.com/ru/companies/vk/articles/959520/
Платформа: Android
💩1
This media is not supported in your browser
VIEW IN TELEGRAM
Плавная анимация в Jetpack Compose — простое решение с animateDpAsState

Благодаря Jetpack Compose логика анимации легко встраивается в декларацию пользовательского интерфейса.

Всего несколько строк кода — и вы можете создавать плавные, адаптивные переходы, которые придадут вашему приложению премиальный и продуманный вид.

Экспериментируем с animateDpAsState — одним из удобных API Compose, который делает переходы пользовательского интерфейса невероятно плавными.

Цель была проста: анимировать вертикальное смещение кнопки в зависимости от положения нижнего экрана.

Сниппет:

val targetY by animateDpAsState(
targetValue = when (sheetState.currentValue) {
SheetValue.Hidden -> 0.dp
else -> {
val currentOffset = with(density) {
try { sheetState.requireOffset().toDp() }
catch (_: Exception) { 0.dp }
}

(usableHeight - currentOffset)
.coerceAtLeast(0.dp)
.coerceAtMost(maxLift)
}
},
label = "gps_button_animation"
)

Box(
modifier = Modifier
.offset(y = -targetY) // Negative offset moves the button up
) {
// Button content here
}


Платформа: Android
Текстовые эффекты с использованием TextRenderer в SwiftUI

Статья раскрывает пользу TextRenderer в SwiftUI — мощный API, который открывает полный контроль над визуальным отображением текста. Вместо стандартных модификаторов, вы можете рисовать текст «с нуля», применяя эффекты на уровне строки или отдельного глифа. В статье показаны примеры: постепенное затухание текста, пульсация строк с анимацией, эффект «скачущих» букв и применение фильтров, таких как размытие. Если хотите вывести UI-текст на новый уровень — читайте обязательно.

Статья: https://www.createwithswift.com/text-effects-using-textrenderer-in-swiftui/
Платформа: iOS
Анализ производительности для ускорения сборки в Xcode 2025

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

Статья: https://apptractor.ru/info/articles/analiz-proizvoditelnosti-dlya-uskoreniya-sborki-v-xcode-2025.html
Платформа: iOS
Cahier - пример современного блокнота для Android от Google

Cahier ("блокнот" на французском) — это многофункциональное offline-first приложение для ведения заметок, и призванное продемонстрировать лучшие практики современной разработки Android с использованием Kotlin, Jetpack Compose, Material 3 и набора библиотек Jetpack, таких как Ink API. Оно служит референсным примером Google для создания надежных, адаптивных и увлекательных приложений для повышения производительности на Android.

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

Ключевые фичи:

• Универсальное создание заметок: демонстрирует, как реализовать гибкую систему создания контента, поддерживающую различные форматы в одной заметке, включая текст, рисунки свободной формы и прикреплённые изображения.
• Инструменты для креативного рисования: реализует высокопроизводительный процесс рисования с малой задержкой с помощью Ink API. В примере представлен практический пример интеграции различных кистей, палитры цветов, функций отмены/повтора действий и ластика.
• Интеграция гибкого контента с перетаскиванием: демонстрирует, как обрабатывать входящий и исходящий контент с помощью перетаскивания. Это включает в себя прием изображений из других приложений и возможность перетаскивания контента из вашего приложения для удобного обмена.
• Организация заметок: добавляйте заметки в избранное для быстрого доступа. Фильтруйте представление для поддержания порядка.
• Offline first архитектура: приложение построено на Offline first архитектуре с использованием Room, что гарантирует локальное сохранение всех данных и полную функциональность приложения без подключения к Интернету.
• Мощная поддержка многооконности и многоэкземплярности: демонстрирует, как поддерживать многоэкземплярность, позволяя запускать приложение в нескольких окнах, чтобы пользователи могли работать с разными заметками одновременно, повышая производительность и творческий потенциал на больших экранах.
• Адаптивный пользовательский интерфейс для всех экранов: Пользовательский интерфейс легко адаптируется к различным размерам и ориентациям экрана с помощью ListDetailPaneScaffold и NavigationSuiteScaffold, обеспечивая оптимизированный пользовательский интерфейс на телефонах, планшетах и ​​складных устройствах.
• Глубокая системная интеграция: проект предоставляет руководство по тому, как сделать ваше приложение приложением по умолчанию для создания заметок на Android 14 и более поздних версиях, реагируя на общесистемные намерения Notes, что позволяет быстро захватывать контент из различных системных точек входа.

Cahier на GitHub: https://github.com/android/cahier
Статья: https://android-developers.googleblog.com/2025/10/introducing-cahier-new-android-github.html
Платформа: Android
⭐️: 38
👍1
This media is not supported in your browser
VIEW IN TELEGRAM
SwiftUI Onboarding - онбординг, как в приложениях Apple

SwiftUI Onboarding — это библиотека SwiftUI, которая реализует процесс онбординга, аналогичный приложениям Apple.

Фичи:

• Совместимость со Swift 6.0 — разработано в соответствии с новейшими стандартами Swift
• Поддержка нескольких языков — 10 языков доступны по умолчанию
• Доступность прежде всего — полная поддержка Dynamic Type и функций доступности
• Широкие возможности настройки — гибкие возможности конфигурации
• Кроссплатформенность — поддержка iOS и macOS
• Современный SwiftUI — использует новейшие API и шаблоны SwiftUI
• Автоматическое управление состоянием — встроенная интеграция с AppStorage
• Светлый и тёмный режимы — полностью поддерживают как светлый, так и тёмный режимы

SwiftUI Onboarding на GitHub: https://github.com/Sedlacek-Solutions/SwiftUI-Onboarding
Платформа: iOS
⭐️: 302
👍2
KMP Starter - шаблон кроссплатформенного приложения на KMP

KMP Starter - современный, готовый к использованию шаблон приложения на Kotlin Multiplatform с дизайном Material 3, утилитами и чистой архитектурой.

Технический стек: Kotlin Multiplatform для кроссплатформенной разработки, Compose Multiplatform для UI, Material 3 как дизайн-система, Koin для инъекции зависимостей, Room в качестве локальной базы данных, DataStore для хранения настроек, корутины и Flow для асинхронного программирования, RevenueCat для покупок, MixPanel для аналитики, Kotlinx Serialization для сериализации JSON.

KMP Starter на GitHub: https://github.com/DevAtrii/Kmp-Starter-Template
Платформа: Android/кроссплатформа
⭐️: 51
👍1
📺 Видео и подкасты за неделю @AppFiles

(iOS En) Optimize your app's speed and efficiency
(iOS En) Modern SwiftUI Callbacks using AsyncStream
(iOS En) How hard can it be to send a postcard?
(iOS En) Beyond Xcode
(iOS En) Building Complex Scroll Animations - Custom Bottom Sheet Interaction
(iOS En) Keychain Unlocked: Mastering Advanced Security for Smarter, Safer Apps
(iOS En) SwiftUI Alert With Progress View
(iOS En) iMessage Style Photo Picker Using SwiftUI
(And Ru) ART Memory Management
(And Ru) Kotlin и контекстно-ориентированное мышление
(And Ru) VK Звонки в лесу: звоним в плохих сетях
(And En) TheAndroidShow: live from Droidcon, with Agents in Android Studio, Android XR and more!
(And En) Google Play Console: Streamlining workflows, from testing to growth
(And En) Building for Samsung Galaxy XR, featuring Calm's blueprint to Android XR development
(And En) Android XR #AskAndroid
(And En) Explaining Google's Guide to App Architecture In Simple Terms
(And En) FAB Menu In Material3 Expressive
(And En) From Java to Kotlin: Mercedes-Benz.io’s Journey
(And En) Merge Queue at Uber Scale
(And En) From 25 Minutes to 2.5: Okta's Journey to Faster Builds
(Crs Ru) Что не так с Dart и Flutter в 2025 году?
(Crs Ru) KMP для ОС Аврора
(Crs Ru) Backend-Driven UI как ответ на рост числа платформ
(Dev Ru) Как устроена мобильная разработка сегодня
(Dev Ru) Как вас взламывают через Open Source — DevSecOps и безопасная разработка

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

(iOS Ru) Как устроена библиотека AppMetrica
(iOS Ru) Здесь куют Metal
(iOS Ru) Как iOS-разработчику выжить на проекте с KMP?
(And Ru) Android cookbook: готовим WebView правильно
(And Ru) Kotlin Coroutines. Устройство и возможности использования
(And Ru) Фреш на полке, фреш в стеке
(Dev Ru) От натива до SDUI через гибрид
Please open Telegram to view this post
VIEW IN TELEGRAM
1
Маленькая RAM vs новые фичи: как мы повышаем детализацию Карт и сохраняем стабильность

Чем богаче визуальное и информационное наполнение, тем выше требования к устройствам, на которых работает приложение. Улучшая пользовательский опыт с помощью новых технологий и более детальной картографии, мы сталкиваемся с постоянным ростом потребления ресурсов — прежде всего оперативной памяти (RAM). Наша задача — находить баланс между развитием продукта и сохранением его стабильной и быстрой работы на разных устройствах, включая самые бюджетные модели.

Статья: https://habr.com/ru/companies/yandex/articles/961204/
Платформа: разработка
1
Быстрее, чище, стабильнее: как мы ускорили UI-тесты в iOS в 2,5 раза

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

Статья: https://habr.com/ru/companies/vk/articles/961616/
Платформа: iOS
👍1
Самый задаваемый вопрос на iOS-собеседовании, на котором застревают даже Senior разработчики

Он не про синтаксис Swift. Не про UIKit или SwiftUI. Он про то, насколько хорошо вы разбираетесь в iOS.

Статья: https://apptractor.ru/info/articles/samyy-zadavaemyy-vopros-ios.html
Платформа: iOS
👍3