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

Знакома ситуация, когда кнопка не работает, приложение виснет, анимации тормозят, но при этом нет никаких ошибок на экране? Можно часами играть в детектива, гадая по UI и строя догадки, что пошло не так. А можно за несколько минут найти настоящего преступника — ведь iOS щедро оставляет улики в виде логов. Нужно лишь знать, где их искать. Секрет — в грамотном выборе способа, как собрать доказательства.

Статья: https://habr.com/ru/articles/958142/
Платформа: iOS
👍1
This media is not supported in your browser
VIEW IN TELEGRAM
Что такое ANR и как с ним работать правильно

Когда пользователь открывает приложение, нажимает на кнопку — и ничего не происходит несколько секунд, Android начинает считать, что “приложение не отвечает”. Через 5 секунд на главном потоке система показывает диалог:

“Приложение не отвечает. Закрыть?”

Это и есть ANR (Application Not Responding).

Статья: https://habr.com/ru/articles/958278/
Платформа: Android
👍1
Продвинутые Codable

В статье автор показывает, как выйти за рамки стандартного Codable в Swift, когда JSON-структура не совпадает с моделью данных. Вместо громоздких init(from:) предлагается разделять DTO (структуру, соответствующую JSON) и модель, используя протоколы AdvancedDecodable и AdvancedEncodable. Они позволяют автоматически кодировать и декодировать данные через промежуточный слой, где можно добавлять валидацию и преобразования, не теряя простоту Codable. Помимо этого, автор предлагает обёртки Maybe, Either и Both — универсальные решения для обработки некорректных или неоднородных данных. Такой подход сохраняет читаемость и устойчивость к изменениям API, делая код надёжнее и понятнее.

Статья: https://nothingtocommitworkingtreeclean.com/advanced_codable.html
Платформа: iOS
👍1
Уменьшающиеся слоны

В статье команда инженеров Block рассказывает о проблеме масштабных монорепозиториев — когда проект разбит на тысячи подпроектов и IDE синхронизирует десятки миллионов строк кода, разработка становится неэффективной. В примере приводят ситуацию, когда «холодная» (cold) синхронизация в IntelliJ с Gradle занимает около 24 минут, и при этом используется порядка 36 ГБ оперативной памяти — очевидно, что для разработчика такое ожидание неприемлемо.

Чтобы решить эту проблему, авторы вводят ряд «интервенций» — изменений поверх обычного Gradle-процесса, направленных на уменьшение объёма работы IDE при синхронизации. Среди них — параллельная загрузка моделей, ограничение числа проектов, которые синхронизируются (Spotlight), отключение транзитивной синхронизации зависимостей (intransitive sync), замена подпроектов на заранее собранные артефакты (artifact swap), предпроскачивание зависимостей (pre-fetch). В совокупности эти меры позволили снизить время синхронизации с нескольких минут до ~15 секунд — улучшение порядка 97% — и значительно снизить нагрузку на ресурсы.

Статья: https://engineering.block.xyz/blog/shrinking-elephants
Платформа: Android
👍1
Material Pickers - Material 3 пикеры для Compose

Material Pickers - компоненты выбора для Jetpack Compose, соответствующие материальному дизайну. Выразительные, настраиваемые и идеально вписывающиеся в систему дизайна Material 3. Библиотека предоставляет готовые к использованию вертикальные, горизонтальные и двойные (парные) пикеры, а также низкоуровневые примитивы для создания полностью настраиваемых макетов.

Material Pickers на GitHub: https://github.com/eidam-slices/material-pickers
Платформа: Android
⭐️: 7
1
Как создать собственную библиотеку на Kotlin Multiplatform

Создадим библиотеку Krashlytics на Kotlin Multiplatform для обработки отчетов о сбоях и отслеживания навигационных цепочек. Такие цепочки  —  это логи пользовательских действий, по которым выявляются последовательности событий, приведших к сбою.

Статья: https://nuancesprog.ru/p/30352/
Платформа: Android/кроссплатформа
1
Архитектура SwiftUI: структурируем представления для повторного использования и ясности

Новая статья от Антуана ван дер Ли предлагает практический подход к организации архитектуры SwiftUI-приложений с акцентом на читаемость, повторное использование и поддержку кода. Автор начинает с примера простого списка статей, который со временем может стать перегруженным из-за добавления новых функциональностей, таких как индикаторы загрузки, обработка пустых состояний и действия с ячейками. Чтобы избежать этого, он рекомендует разделять представления на более мелкие компоненты, используя такие техники, как выделение отдельных представлений, создание расширений и вычисляемых свойств. Однако он предостерегает от чрезмерного использования этих методов, чтобы не усложнить структуру кода. В статье подчеркивается важность соблюдения принципов читаемости и повторного использования кода, что способствует более легкому тестированию и поддержке приложения в будущем. Автор также делится практическими рекомендациями по организации представлений и структуры проекта, что делает материал полезным для разработчиков, стремящихся улучшить архитектуру своих SwiftUI-приложений.

Статья: https://www.avanderlee.com/swiftui/swiftui-architecture-structure-views-for-reusability-and-clarity/
Платформа: iOS
👍1
Kinetics - настраиваемые примитивы физического движения для SwiftUI

Kinetics привносит естественное ощущение реальной физики в ваши анимации SwiftUI. Разработанный на основе Swift 6 с строгим соблюдением принципов многопоточности, он предоставляет современную и безопасную основу для создания анимаций, которая реагируют на действия пользователя, учитывают границы и выглядят реалистично.

Kinetics на GitHub: https://github.com/roberthein/kinetics
Платформа: iOS
⭐️: 156
Combine – швейцарский нож iOS-разработчика. Или нет

Combine – фреймворк для работы с асинхронными событиями в декларативном стиле. Он помогает разработчикам управлять потоками данных, избавляя от множества колбэков, ручного управления очередями и других сложностей, связанных с асинхронностью.

Большинство статей описывают 3 сущности: Publisher (издатель), Subscriber (подписчик) и Operator'ы. Но они умалчивают еще об одном игроке – Subnoscription. Именно подписка управляет всей "жизнью" цепочки: кто кому и когда передаёт данные, и когда всё заканчивается.

Статья: https://habr.com/ru/companies/banki/articles/958650/
Платформа: iOS
👍1
This media is not supported in your browser
VIEW IN TELEGRAM
Globe - вращающийся "глобус" из изображений

Globe - вращающийся "глобус" из изображений (они тоже являются composable) на Compose Multiplatform. Поддерживает Android, iOS, Desktop (JVM).

Globe на GitHub: https://github.com/pedromassango/compose_concepts
Платформа: Android/кроссплатформа
⭐️: 29
🔥4
📺 Видео и подкасты за неделю @AppFiles

(iOS En) Building an iOS Ghibli App with SwiftUI, MVVM, and Swift Concurrency
(iOS En) Create immersive media experiences for visionOS
(iOS En) SwiftUI Course for Beginners – Create an iOS App from Scratch
(iOS En) 5 Useful SwiftUI Modifiers
(iOS En) Foundation Models Framework in Swift
(iOS En) iOS 26 Style Floating Sheets Using SwiftUI
(And Ru) Как обеспечить стабильную работу SDK для миллионов устройств
(And En) Bringing Androidify to XR
(And En) State vs. Actions vs. Events On Android & KMP
(And En) Single & Multi-Choice Button Groups In Material3 Expressive
(And En) What's new in Kotlin 2.2.21 (and 2.2.20!)
(And En) Discussing Kotlin Coroutines with Marcin Moskała
(And En) A Common Mistake when working with Kotlin Flows
(And En) Your Toolchain is Production: The Case for Observability
(And En) From Lag to Lightning: Transforming Dependency Update Timelines
(And En) Universal Cache: It’s time for fast, reliable, and cheap CI pipelines
(And En) Gradle: Your Build, Your Rules
(Crs Ru) Что ждёт Kotlin Multiplatform разработчика на собесе? (все собеседования)
(Dev Ru) Как сделать Offline Mode. Секреты от Avito.Tech
(Dev Ru) Бережливое управление людьми — менеджмент без переработок и выгорания
(Dev En) Data Structures and Algorithms Mega Course – Master Technical Interviews in 49 Hours

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

(And Ru) Избавляемся от Context в бизнес логике — как ответить на собеседовании
(Dev Ru) Backend vs Frontend: сравниваем опыт разработчиков — что сложнее, перспективнее и кому больше платят
(Dev Ru) Grafana: инструкция по применению
(Dev Ru) Тесты с душком
(Dev Ru) Как писать библиотеки: проектирование API, обратная совместимость
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1
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