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

(iOS Ru) Разбор SwiftUI проекта стартапа с AI на борту
(iOS Ru) Вам не нужно хранилище в приложении
(iOS En) SwiftUI Coverflow Carousel
(iOS En) My Story & iOS Dev Career Advice
(iOS En) Building iOS 18 Photos App UI
(iOS En) Zoom Transitions SwiftUI
(iOS En) Custom Operators in Swift
(And Ru) Роман Елизаров про Kotlin, корутины и работу в Jetbrains
(And En) Advanced layout animations in Compose (Shared elements)
(And En) Refactoring to Expressive Kotlin
(And En) From Zero to Billions: Building a High-Performance Kotlin App in Two Months
(And En) Managing Complexity With Ktor
(Crs Ru) Flutter Dev Podcast: навигация во Flutter
(Crs Ru) Особенности сервиса Яндекс Про и будущее Flutter
(Crs En) Permission Handling in Compose Multiplatform
(Crs En) Create a Splash Screen in Compose Multiplatform for iOS & Android
(Crs En) Uniting Native SDKs into Kotlin Multiplatform
(Crs En) Compose Multiplatform on Mobile at Instabee for Over a Year
(Dev Ru) Личный бренд разработчика
(Dev Ru) Ход королевы: как российское шахматное приложение покорило мир
(Dev En) Building an Effective Data Product Strategy
(Dev En) System Design Concepts Course and Interview Prep

Что вы посмотрели за неделю?
#ios #android #mobile #video
Fantasy Premier League - проект на Kotlin Multiplatform с клиентами Jetpack Compose, Compose for Desktop и SwiftUI (с использованием Ktor для удаленных API-запросов и Room для персистентности). В настоящее время работает на Android, iOS и десктопах.

+ у автора есть еще десяток проектов на KMP, ссылки в репозитории

Fantasy Premier League на GitHub: https://github.com/joreilly/FantasyPremierLeague
Платформа: Android/кроссплатформа
⭐️: 451
1
Подсветка элементов онбординга в SwiftUI iOS15+

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

Статья: https://habr.com/ru/companies/ozontech/articles/830802/
Платформа: iOS
PinLockSreen на основе KeyStore. Kotlin. Jetpack Compose

В данной любительской статье разберемся, что такое KeyStore в контексте мобильной разработки, для чего нужен и применим его в крайне легком варианте. Также погрузимся в разработку экрана входа в ваше приложение. Статья будет разделена на 3 так называемых раздела - KeyStore, UI и ViewModel.

Статья: https://habr.com/ru/articles/831914/
Платформа: Android
Водитель приедет через 3 минуты: реализация Uber Live Activity на iOS

Создание Live Activity для приложения Rider на iOS было напряженным, но полезным путешествием. От неожиданного анонса на WWDC до сложностей разработки и внедрения новой технологии в сжатые сроки, этот опыт продемонстрировал стойкость, адаптивность и креативность нашей команды. Мы преодолели технические препятствия, пересмотрели подход к UX и в итоге создали функцию, которая, по нашему мнению, улучшила впечатления водителей и пассажиров. Я надеюсь, что частички изобретательности, которые мы продемонстрировали в этой статье, могут вдохновить любого разработчика, работающего над Live Activities, и помочь ему преодолеть аналогичные сценарии и в целом использовать прагматичный подход к опыту, который живет за пределами основного приложения.

Статья: https://apptractor.ru/info/articles/uber-live-activity.html
Платформа: iOS
Giphy Trending - пример приложения для Android с популярными анимированными гифками Giphy для обмена или загрузки. Сделано на основе Kotlin, MVVM, Jetpack Compose (Single Activity), корутин и Flow, Dagger Hilt, Material 3, Gradle Kotlin DSL и Version Catalog, Baseline Profile.

Giphy Trending на GitHub: https://github.com/ryanw-mobile/giphy-trending
Платформа: Android
⭐️: 14
Упадок мобильной разработки

Эти мобильные штучки уже не так интересны. Вы понимаете, что тратите все свое время на борьбу с платформой и очень мало времени на создание чего-либо. Создание - это самое интересное. Создание - это радость. Когда вы убираете радость из уравнения, это перестает приносить удовольствие, и тогда вы начинаете задаваться вопросом...

Есть ли что-то лучше? Что-то более увлекательное, что позволит мне создавать вещи быстрее, с быстрыми циклами обратной связи и более разумным тестированием?

Именно тогда мобильные разработчики часто пробуют что-то новое, например, веб-разработку (часто на основе JavaScript, Ruby, Python и т. д.), и обнаруживают, что жизнь на другой стороне безумно весела и продуктивна.

Статья: https://apptractor.ru/info/articles/upadok-mobilnoy-razrabotki.html
Платформа: разработка
DominantColors позволяет легко найти доминирующие на изображении цвета. Библиотека возвращает палитру цветов, наиболее часто встречающихся в изображении. Есть несколько алгоритмов получения главных цветов, можно даже получить контрастный цвет для нанесения текста.

DominantColors на GitHub: https://github.com/DenDmitriev/DominantColors
Платформа: iOS
⭐️: 31
🔥1
Инженер по машинному обучению — новый путь обучения от Google

Google предлагает новый полный путь обучения по основам машинного обучения с использованием технологий Google Cloud. Этот путь обучения вы можете пройти самостоятельно и бесплатно. Однако он является довольно длительным, поскольку каждый отдельный курс (а их 15 во всем потоке) требует от 8 до 32 часов.

Новость: https://apptractor.ru/learn/inzhener-po-mashinnomu-obucheniyu-novyy-put-obucheniya-ot-google.html
Платформа: обучение
Apple выпустила библиотеку гомоморфного шифрования для Swift

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

В Apple используют гомоморфное шифрование в своей работе, поэтому они рады поделиться этой Swift-реализацией с сообществом, чтобы другие могли использовать ее и вносить свой вклад.

Одним из примеров использования этой реализации в iOS 18 является новая функция Live Caller ID Lookup, которая предоставляет услуги определения номера абонента и блокировки спама. Live Caller ID Lookup использует гомоморфное шифрование для отправки зашифрованного запроса на сервер, который может предоставить информацию о телефонном номере без того, чтобы сервер знал конкретный номер телефона, указанный в запросе.

Новость: https://apptractor.ru/info/news/apple-vypustila-biblioteku-gomomorfnogo-shifrovaniya-dlya-swift.html
Платформа: iOS
👍3
Вопросы доступности при использовании моего кастомного макета стопки карт

Пару недель назад я опубликовала статью «Кастомные макеты в Compose — стопка карточек с кошками». У макета есть некоторые проблемы с доступностью, и в этой статье я опишу то, как постаралась исправить некоторые из них. Есть несколько проблем, которые я не буду устранять из-за объема этой статьи; вместо этого я обсужу проблемы, которые они вызывают, и возможные решения.

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

Статья: https://apptractor.ru/info/articles/voprosy-dostupnosti-pri-ispolzovanii-kastomnogo-maketa-stopki-kart.html
Платформа: Android
This media is not supported in your browser
VIEW IN TELEGRAM
ImageCropView - это библиотека Jetpack Compose, которая предоставляет простое и настраиваемое представление для обрезки изображений. Она поддерживает различные стили обрезки, такие как свободная форма, квадратная и круговая обрезка, что позволяет легко интегрировать функцию обрезки изображений в пользовательский интерфейс Compose.

ImageCropView на GitHub: https://github.com/rroohit/ImageCropView
Платформа: Android
⭐️: 67
👍1
Как создать плитку из изображений в SwiftUI

«Я справлюсь!» Думаю, именно такой была первая реакция большинства людей, увидевших название этой статьи. Хотя плитка изображений не является часто используемой функцией, большинство разработчиков могут легко освоить ее реализацию. Запрос в поисковой системе показывает, что почти все результаты указывают на одно и то же решение - использование модификатора resizable.

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

Статья: https://fatbobman.com/en/posts/how-to-tile-images-in-swiftui/
Платформа: iOS
Продвинутая шпаргалка по корутинам в Kotlin

Итак, вы давно работаете с корутинами Kotlin и уже знакомы с такими базовыми концепциями. Но по мере того как ваши проекты становятся все сложнее, вы можете обнаружить, что часто ищете сложные решения и обращаетесь за помощью к Google или любимому искусственному интеллекту.

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

Статья: https://medium.com/@galou.minisini/advanced-kotlin-coroutine-cheat-sheet-for-android-engineer-15e0d180fc1f
Платформа: Android
Конвейеры мобильного развертывания за $0

Непрерывная интеграция (Continuous Integration, CI) - один из главных столпов продвинутых разработчиков.

Если вы живете и дышите большими проектами, то возможность пройти горнило настройки эффективных конвейеров сборки, тестирования и развертывания - обычное дело, но что делать, если вы работаете над инди-проектом?

Если вы раньше не настраивали CI-конвейеры, это ставит вас в невыгодное положение как инженера, поскольку такая автоматизация является обязательной для любого нового проекта. Сегодня я покажу вам, как настроить CI для ваших побочных проектов. Бесплатно!

Статья: https://apptractor.ru/info/articles/konveyery-mobilnogo-razvertyvaniya-za-0.html
Платформа: iOS/разработка
SafeDI - безопасная инъекция зависимостей во время компиляции для Swift-проектов. SafeDI создан для инженеров, которые хотят получить безопасность и простоту ручной инъекции зависимостей без накладных расходов на шаблонный код. SafeDI использует макросы Swift и плагины Swift Package Manager для чтения вашего кода и создания дерева зависимостей, которое проверяется во время компиляции. Зависимости могут быть либо инстанцированы SafeDI, либо направлены в дерево зависимостей.

SafeDI на GitHub: https://github.com/dfed/SafeDI
Платформа: iOS
⭐️: 61
Видео и подкасты за неделю @AppFiles

(iOS Ru) Почему Metal перестал быть страшным
(iOS Ru) Локализация iOS-приложения за 1$ в 2024 году
(iOS En) SwiftUI Floating Bottom Sheets
(iOS En) How to Refactor SwiftUI into Reusable Views
(iOS En) SwiftUI App Intro Animation's - Shape Morphing Effect
(iOS En) Xcode File Headers and Macros
(iOS En) How to Use TextField Keyboard Focus in SwiftUI with FocusState
(And Ru) Нужно ли учить Java для Android-разработки в 2024
(And En) Compose Tips for Delightful UI
(And En) Compose Migration Side Effects - What Can Go Wrong?
(And En) Building Libraries for the Next 25 Years
(And En) Turbocharge Your Data: Harnessing Kotlin and gRPC to Handle Real-Time Data From Connected Cars
(And En) Grow with the Flow: How Kotlin Flow Became a Game Changer for our Business
(And En) Coroutines: Concurrency in Kotlin
(Crs Ru) KMP на ОС Аврора: проблемы и пути их решения
(Crs En) The Kotlinx DateTime API for Compose Multiplatform
(Crs En) How to Implement Drag & Drop in Jetpack Compose
(Crs En) Hitchhiker’s Guide to Kotlin Multiplatform Libraries
(Dev Ru) Алгоритмическая сессия на собеседовании + Все собеседования
(Dev Ru) Автоматическая генерация верстки под Server-driven UI из макетов Figma
(Dev Ru) Учимся договариваться о деньгах — Офферы, Зарплаты, Повышение
(Dev Ru) Дизайн системы — это слишком модно, возможно они вам не нужны
(Dev En) How to get a FAANG Dev Job in your 40s

Что вы посмотрели за неделю?
#ios #android #mobile #video
Selenoid без симуляции: настройка, отладка и автоматизация на физическом Android-устройстве

Решение трудностей — развернуть Selenoid без Докера на сервере для работы с реальными устройствами, а также обеспечить полную автоматизацию при создании конфигураций для подключаемых Android девайсов через USB-порт.

Об этой и других задачах развёртывания инфраструктуры для запуска тестов на реальных Android-устройствах на Linux и Mac расскажу в этой статье. А также продемонстрирую реализованные нами кастомные скрипты для генерации конфигурационных файлов для подключенных устройств.

Статья: https://habr.com/ru/companies/alfa/articles/833136/
Платформа: Android
This media is not supported in your browser
VIEW IN TELEGRAM
Compose Game Engine - простой игровой движок для 2D-игр, созданный с помощью Jetpack Compose. Эта библиотека обеспечивает базовую функциональность игрового движка, включая управление игровыми объектами, обнаружение столкновений и рендеринг. Она использует Animatable и Canvas API. Однако она (пока) подходит только для небольших игр.

Compose Game Engine на GitHub: https://github.com/vgupta98/compose-game
Платформа: Android
⭐️: 14
👍3
Как iOS-команда Medium эффективно работает с legacy кодом

Кодовой базе iOS-приложения Medium уже более 10 лет, и у нас все еще есть код 2013 и 2014 годов, который используется до сих пор.

Здесь вы можете подумать, почему, черт возьми, они никогда не переписывали его полностью?

На самом деле в iOS-команде Medium мы носим это как почетный знак, и сегодня я хочу объяснить, почему рассказываю о том, как эффективно работать с устаревшим кодом, и одновременно не мешать ему (слишком сильно).

Статья: https://apptractor.ru/info/articles/kak-ios-komanda-medium-effektivno-rabotaet-s-legacy-kodom.html
Платформа: iOS