Mobile Native ️️ – Telegram
Mobile Native ️️
5.61K subscribers
1.13K photos
20 videos
3 files
1.28K links
Полезные материалы по мобильной разработке. Статьи, подборки, нововведения, анонсы.

Пробустить канал → https://news.1rj.ru/str/mobile_native?boost

Автор: @artemiygreg
iOS / Swift: @swift_tips
Библиотеки и инструменты: @mobile_dev_tools
Митапы: @meetup_today
Download Telegram
Про пагинацию

Я тут досматриваю очередной публичный собес и решил поделиться своими мыслями, касаемо пагинации.

Когда ребята проектировали реализацию списка объявлений, естественно затронули тему пагинации. Георгий предложил использовать пагинацию через Cursor и кажется он забыл сказать про одно важное преимущество этого способа – Гибкость. В чём же собственно гибкость? Попробую объяснить.

Давайте на примере пагинации через Page, посмотрим как мы взаимодействуем с бэком. Обычно в запросе мы передаём параметры вида page=1, size=20. При такой реализации бэкенд жестко привязан именно к этим параметрам и такому формату. Если допустим на бэке нужно будет поменять какую-то внутреннюю логику, то с большей вероятностью, это либо не получится сделать, либо нужно будет вносить правки на клиенте.

А теперь давайте посмотрим как мы взаимодействуем с бэком через Cursor. При использовании способа через Cursor, мы в запросе передаём полученный с бэка Cursor – обычно это строка, в которой закодированны какие-то данные(уникальный id, token, либо что-то подобное). При запросе первой пачки мы ничего не знаем о Cursor, передаём дефолтное значение(null или пустую строку), в ответ бэк нам присылает актуальный Cursor, который мы передаём в следующем запросе и так до тех пор, пока не закончатся данные.

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

То есть, теоретически можно сделать так: в курсор запихать Cursor="page=1", закодировать, вернуть в ответе клиенту, клиент в свою очередь отправит этот Cursor на бэк, бэк декодирует Cursor, вернёт следующую пачку данных и Cursor="page=2". Таким образом клиент будет взаимодействовать с бэком через курсорную пагинацию, но внутри бэк будет использовать постраничную. Это чисто пример для наглядности, так делать не надо 😁
👍20🔥53🤔1
🙏52😢29🤣3👍1🔥1
Вы за это заплатите! Цена Чистой Архитектуры. Часть 2

Продолжение про организацию масштабируемости проекта и цену чистой архитектуры.

👉 На чем мы остановились?
👉 Разрывы связей
👉 Опциональные компоненты(шаблоны проектирования и конвертация)
👉 Экстремальная экономия(проксирующие DataSource-ы и UseCase-ы)
👉 Куда нас это привело? Снова к Чистой Архитектуре!
👉 Единый продукт

В заключение несколько важных для понимания моментов

🟢Слои не так важны, как компоненты, из которых они сложены
🟢Зависимости зависят от устойчивости
🟢Устойчивость не равна редкой изменяемости
🟢Интерфейсы ситуативны
🟢Чистота — это свойство
🟢Чистая Архитектура дешевле, чем её представляют

Читать (Ru)
Please open Telegram to view this post
VIEW IN TELEGRAM
🤔9👍5🔥5💩51👎1
Mastering Android ViewModels: Essential Dos and Don’ts Part 1

Тут стартанули цикл статей про то, что можно делать во ViewModel, а чего лучше не делать.

В первой части разбираются возможные недостатки при инициализации состояния в блоке init { }

👉 Тесная связь с созданием ViewModel
👉 Проблемы тестирования
👉 Ограниченная гибкость
👉 Обработка изменений конфигурации
👉 Управление ресурсами
👉 Отзывчивый UI

Читать (En)
👍11🔥42🤔1
Google открыли доступ для всех к Gemini 1.5 Pro

Говорят это одна из мощнейших нейронок с бесплатным доступом в 1М токенов.

Прежде чем тестить, почитайте доступные регионы и включите нужный VPN 😉

У меня не удалось потестить, на всех версиях модели Gemini получаю ошибку – An internal error has occurred, так что имейте в виду, может работать не стабильно.

Попробовать
🔥8👍3👎1👏1
Android ProGuard: Mastering Security and Efficiency with ProGuard

Базовая статья по основам ProGuard.

👉 What is ProGuard?
👉 Setting Up ProGuard in an Android Project
👉 ProGuard Rules
👉 Practical Example
👉 Running ProGuard
👉 Common Issues and How to mitigate
👉 Best Practices

Читать (En)
👍9🔥21👌1
Context receivers — новые extension functions

Ещё одна интересная статья про Context receivers от разработчика Ozon, в которой рассматриваются возможные варианты использования фичи.

Читать (Ru)
🔥7👍4🤔2🤣2😁1
Stop Passing Event/UI-Action Callbacks in Jetpack Compose

Полезная статья, в которой автор предлагает отказаться от передачи множества коллбеков в composable функции и вместо этого использовать один, общий коллбек с sealed классом UiAction и обрабатывать соответственно эти экшены во ViewModel по типу MVI паттерна.

Читать (En)
👍12🤔10👎3🔥21😁1
Line height в Android TextView: где не сходится с Figma, как мешает pixel-perfect, и как это решить

Интересная статья от команды Avito Android Design System про проблему неконсистентности параметра Line height между Figma и Android.

Если ещё верстаете XML и не перешли на Compose – обязательно почитайте.

P.S. Интересно, а как дела с этим в Compose, кто-нибудь знает? 🤔

Читать (Ru)
🔥12👍62🥱1
Работа с UI-автотестами под Android: от запрета мерджа к особенностям запуска

Ребята из OK рассказывают о своём подходе к работе с UI-автотестами в Android.

👉 Как устроен запрет мерджа
👉 Как смогли стабилизировать тесты
👉 Как настроили параметризацию запуска

Читать (Ru)
👍8🔥3🤔1
Forwarded from Swift Tips
SwiftUI Field Guide

Каким-то чудом я пропустил достаточно крутой сервис – SwiftUI Field Guide, где чуваки на интерактивных примерах объясняют как работает верстка в SwiftUI. Можно менять параметры, двигать ползунки при этом виден код и сразу показывается как меняется верстка 🔥

Сайт активно дополняется. Вот список того, что уже есть👇

Introduction

• View Trees
• Debugging

Modifiers

• Aspect Ratio
• Padding
• Offset
• Fixed Frames
• Flexible Frames
• Overlay

Views

• Image
• Shape

Containers

• HStack
• VStack
• Scroll View
• Layout

Concepts

• Alignment
• Ideal Size
• Safe Area

Однозначно в избранное

Сайт → Swiftuifieldguide
🔥123👍2👎1
Глобальные события в мобильном приложении

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

Читать (Ru)
🔥95👍3💩2🌚1
Подборка бесплатных книг

Забирайте репозиторий с огромным количеством бесплатных книг по разным технологиям на разных языках, в том числе и на русском.

Имейте в виду, репозиторий достаточно старый, вероятно что-то может быть deprecated

GitHub → Free Programming Books
🔥7👍3🗿32💩2
Perk up your understanding of generics

Подробный иллюстрированный гайд по дженерикам.

👉 Introduction to Generic Types
👉 Type Parameter Constraints
👉 Generics in Practice
👉 Generics in the Standard Library
👉 Trade-Offs of Generics

Читать (En)
11🔥7👍4👎2
Колитесь, уходили на обед безвозвратно? 😂

На моей практике был похожий случай. Чувак устраивается к нам в компанию, в первый день пришёл, побегал по кадрам с доками, пробыл в офисе час, другой и свалил =))
🤣23😁8🔥6
Как протестировать Android-приложение, которому требуются разрешения

Подробный туториал по написанию UI-тестов на Kaspresso для приложений, которым требуются разрешения.

Читать (Ru)
🔥7👍42👎1
Игра в безопасность Android-приложений

Большая и полезная статья, в которой рассматриваются различные процессы взлома Android-приложений(отслеживание http/https трафика, ресурсы, AndroidManifest, обфускация/деобфускация, C++) и возможные варианты защиты.

Читать (Ru)
👍16🔥32
Кодогенерация токенов дизайн-системы для Android по Figma API

Большая статья про то, как поддерживать дизайн-систему в консистентном состоянии с помощью автоматизации и интеграции Figma → Android.

👉 Почему решили идти в историю с автоматизацией
👉 Research и первая попытка
👉 Data-слой
👉 Генерация цветов
👉 Генерация типографики
👉 Генерация изображений
👉 Работа с устаревшими (или deprecated) токенами
👉 Остальные токены
👉 Генерация XML для Android View System
👉 Схема генерации. Итоговый проект
👉 Итоги
👉 Полезные ссылки

Читать (Ru)
👍132👎1🔥1
Конструкторы-самозванцы в Kotlin

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

Читать (Ru)
👍113🔥2👌1
“Лента” в Yandex Mobile Ads SDK 7

В седьмую версию SDK добавили новый рекламный формат, который способен вместить десятки рекламных объявлений в один блок. “Лента” подойдет для утилит, новостей, классифайдов и других приложений с возможностью пролистывания. Пока инструмент доступен в бета-режиме для Android-приложений.

А в этой короткой статье есть описание всех остальных обновлений. Для iOS тоже есть интересные фичи.

Читать (Ru)
💩15🔥5👍4
Mastering Android ViewModels: Essential Dos and Don’ts Part 2

Вторая часть из цикла Mastering Android ViewModels. Эта часть про возможные проблемы при использовании мутабельных состояний в качестве контрактов.

👉 Нарушение инкапсуляции
👉 Риски целостности данных
👉 Повышенная сложность
👉 Проблемы параллелизма
👉 Проблемы тестирования
👉 Архитектурная ясность
👉 Отсутствие контроля над подписчиками

Читать (En)
👍12🔥31🗿1