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
Улучшаем производительность android-приложения с помощью Baseline profiles

Полезная статья о том, как с помощью новой фичи Baseline profiles ускорить время запуска приложения и повысить производительность. Также, в статье достаточно подробно рассказывается как работает ART, AOT, JIT, Dalvik.

Документация тут: Baseline Profiles
Либа, которую нужно подрубить, для генерации профиля: ProfileInstaller

Читать (Ru)
👍7
Дайджест недели

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

Вы тоже заметили, что Jetpack Compose достаточно быстро стал набирать обороты?)

Android 🤖

От LiveData к Flow…
Аналитика в декларативном стиле с поддержкой многомодульност
Улучшаем производительность android-приложения с помощью Baseline profiles
• Things you can do in Android Studio
• Why I quit Android Development after 10 years and what I plan to do now
• The State of Navigation in Jetpack Compose
• Collections: Maps
• Common Kotlin Coroutines use-cases
• Using Live Templates to Improve Android Development Productivity
• How Kotlin Coroutine works - the brief dive
• Build State-driven UI with MVVM and clean architecture in android.
• Android 13: какие изменения нас ожидают
• Jetpack Compose для тех, кто в танке
• Easing in to Easing Curves in Jetpack Compose
• Koin Annotations 1.0 - Now Stable!
• Полное руководство по тестовым дублерам в Android — Часть 1: Теория
• Kotlin Flow with Clean Architecture and MVVM Pattern in Android
• Difference between getActivity and requireActivity

iOS
🍏

• Announcing the Language Workgroup | Swift
• Async/Await, Combine, Closures: A Guide to Modern Asynchronous Swift
• New in SwiftUI 4: Gauge View
• WWDC NOTES
Swift Charts Examples | GitHub
• SF Symbols 4 variable colors
• Do `any` and `some` help with "Protocol Oriented Testing" at all?
• Method Dispatch
• Copy-on-write
• Как iOS 15 сломала авторизацию на два месяца. Хронология и лечение от СберМаркета
• Взаимодействие с alerts и permissions в ui-тестировании iOS
• Refactor a Swift Codebase Using SOLID Principles — in an Iterative Way
• Understanding the “some” and “any” keywords in Swift 5.7
• How to override system appearance in SwiftUI

Кроссплатформа / Разработка
💻

Common Mistakes in User Experience / User Interfaces
• Flutter Google Map With Live Location Tracking — Uber Style
• A List of state management approaches in Flutter
• 5 Untold Features of Kotlin. Hidden features of Kotlin
• Flutter Interview Questions
• Как добавить Isar в проект на Flutter
• Implemented Overlay In Flutter
• Flutter Canvas API: Getting Started
• Minimalist Guide to Testing in Flutter — Part 2 Mocking
• 7 Useful JetBrains IDE Plugins to Make Your Life Easier

Previous | Next

Предложить материал: @artemiygreg
Митапы и конференции: @meetup_today
Библиотеки и инструменты: @mobile_dev_tools
Подписаться: @mobile_native
Чат: @mobile_native_chat
👍10🤡6❤‍🔥3
Modularising Trendyol Android App for Build Efficiency

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

Ну а в конце статьи, можно посмотреть пример того, какой профит в скорости можно получить от модуляризации.

Читать (En)
❤‍🔥11👍3
We need to go deeper: диплинки и кодогенерация

Статья от Qiwi, про то, как они организовали обработку диплинков в Android через кодогенерацию.

Подобной реализации еще не встречал, выглядит достаточно прикольно.

Читать (Ru)
👍8🔥2
A Solution for Combining Kotlin Suspend Function + Retrofit

Пример реализации сетевого слоя через coroutines/suspend function. Статья по большей части рассчитана для начинающих.

И есть один нюанс, в статье, в классе ErrorResponse есть неявная зависимость Context (appContext.getString(R.string.unknown_error)) и вот я бы не рекомендовал так делать, лучше такие штуки выносить непосредственно во View (Activity/Fragment).

Читать (En)
👍10👎1
14 задач по Kotlin lists, которые заставят вас подумать

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

Решать (Ru)
❤‍🔥17👎4👍2🤯2
8 anti-patterns in Android codebase and why I hate them

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

Вот например большинство хаят те же синглтоны, базовые классы и event bus style, но практически в каждом проекте, над которым я работал или видел, всё это использовалось.

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

Читать (En)
👍12👎1
Переход на SwiftUI: внедряем TabView взамен UITabBarController

Сказ о том, как переписать навигацию в iOS на TabView, с учетом того, что в приложении есть экраны и на SwiftUI и на UIKit.

Читать (Ru)
👍4
5 Useful Kotlin Extensions for Android Developers

Небольшая заметка довольно простых, но при этом полезных Extensions.

И еще: Extension Functions You Need to Know in Android

Читать (En)
👍10💩8
Stop passing Context into ViewModels

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

Так вот, сегодня попалась на глаза статья по смежной теме (Context), а именно про передачу контекста во ViewModel. В статье рассказывается почему так лучше не делать и рассматриваюся базовые варианты решения, типа Resource и Locale.

P.S. Не передавайте контекст туда, где он не нужен :)

Читать (En)
👍8🔥7
Customizing AnimatedContent in Jetpack Compose

Несколько примеров плавных переходов в зависимости от стейта через AnimatiedContent (пока что в experimental).

Выглядит неплохо и по коду вроде не особо сложно 👍

Читать (En)
👍10🤮3
Compose End to End тестирование. Основы

В официальной документации сказано, что тестирование UI слоя написанного на Compose, отличаются от тестов привычного View на xml.

Связанно это с тем, что в Compose создаётся отдельное семантическое дерево, которое представляет UI, но не является им. Это дерево также используется для обеспечения доступности интерфейса.

Ловите вводную часть, в которой как раз рассказывается про основы и некоторые особенности написания UI тестов под Compose.

Полезные ссылки

👉 Testing your Compose layout
👉 Исходники из статьи
👉 Testing cheat sheet

Читать (Ru)
👍4🔥2
Setup your CI/CD Pipeline with Fastlane and Github actions for Android apps

Гайд по настройке CI/CD с помощью Fastlane и Github actions.

И еще одна статья от автора, про Fastlane → Fastlane: Automate beta deployments and releases for your android apps

Читать (En)
👍8
Исследование российских команд iOS разработки, 2022

Тут Егор Толстой стартанул шестой ежегодный опрос про российские команды iOS разработки.

Про что там?

👉 Откуда мобильщики получают знания
👉 Какие команды iOS разработки самые сильные
👉 Сколько айосеров решило уехать, а сколько – остается в России
👉 Кто входит в топ-10 айос разработчиков
👉 В каких компаниях iOS разработчики хотят работать больше всего

Будет круто, если пройдете опрос и пошарите своим коллегам/знакомым!
👍8🤮7
Generics in Swift explained with code examples

А вот отличная статейка на тему дженериков в Swift, в которой рассматриваются основные аспекты с примерами кода (что такое generics, как использовать).

Читать (En)
🔥6
Performance Considerations for Memory Leaks: An Android Cookbook

Еще одна отличная статья про утечки памяти. Рассматриваются основные причины возникновения утечек и возможные варианы их избежать.

👉 Статические ссылки (Context, Activity, Fragment, View)
👉 Взаимодействие с UI из компонентов не относящихся к Android, например Presenter или ViewModel
👉 Работа с Bitmap (bitmap?.recycle())
👉 Ссылки на UI объекты в бекграунд потоках
👉 Вложенные нестатические классы

Статья по большей части для начинающих, но и для опытных не помешает лишний раз освежить память.

Читать (En)
👍11🔥2
Дайджест недели

Наш большой и мощный 2-ух недельный дайджест 💪. За прошедшие две недели было несколько интересных новостей:

1. Apple разрешила использовать сторонние способы оплаты в Южной Корее с комиссией в 26% 😁
2. Google выплатит разработчикам около 90 миллионов долларов по иску монополизации рынка и взимании несправедливой платы в размере 30% за app-purchases и in-app purchases, сделанные через Play Store.

Android 🤖

• Modularising Trendyol Android App for Build Efficiency
• We need to go deeper: диплинки и кодогенерация
• A Solution for Combining Kotlin Suspend Function + Retrofit
• 14 задач по Kotlin lists, которые заставят вас подумать
• 8 anti-patterns in Android codebase and why I hate them
• 5 Useful Kotlin Extensions for Android Developers
• Stop passing Context into ViewModels
• Customizing AnimatedContent in Jetpack Compose
• Compose End to End тестирование. Основы
• Setup your CI/CD Pipeline with Fastlane and Github actions for Android apps
• Performance Considerations for Memory Leaks: An Android Cookbook
• Compose sample app: UI state with Flow, offline first
• Side Effects in Jetpack Compose
• The God-level Kotlin Function
• How OkCredit Android App boosted Network Performance by 30%
• Advance Architecture for Android Project
• Control In-app update in Android
• A better way to pass Data from Api to Composable - Jetpack Compose
• MVI Pattern in Android
• Best Android App Templates and Themes of 2022
• 7 Jetpack Compose Projects to Become a Better Android DeveloperPart- 3
• Load Fragments in Jetpack Compose: Beyond What Google Taught
• Kotlin DataFrame Preview
• Screen response time. A critical metric for user experience
• How to learn Kotlin with IntelliJ IDEA and Android Studio integrated courses

iOS
🍏

• Исследование российских команд iOS разработки, 2022
• Переход на SwiftUI: внедряем TabView взамен UITabBarController
• Generics in Swift explained with code examples
• ARKit 6. Что нового?
• Decoding Dynamic JSON with Swift Codable
• Implement SwiftUI Navigation With NavigationStack and NavigationSplitView
• Understanding VIPER Architecture
• 7 Useful iOS Libraries You Should Use in Your Next ProjectPart- 4
• A Complete Guide to iOS App Auto Deployment with CI-CD
• Диспетчеризация в Swift: погружение в теорию и практику
• Приключение на 5 минут: как мы переводили все зависимости на SPM
• Creating Cool UI: iOS Shape Morphing
• Async/await в Swift 5.5: асинхронность «здорового человека»
Removing Dependencies: One Weird Trick for Increasing Happiness,
• Existential any in Swift explained with code examples
• Multi-platform image resizing
• VIP design pattern (or Clean Swift)
• The power of task view modifier in SwiftUI
• AsyncSequence & AsyncStream Tutorial for iOS
• Async Composable Architecture: The Problem
• Typed Payloads in SwiftUI using NSUserActivity
• Testing Throwing Methods In Swift Actors

Кроссплатформа / Разработка
💻

• Build a Flutter app with Very Good CLI and Supabase
• Getting Started With Staggered Animations in Flutter
• Dart Code v3.44
• Flutter для автомобиля. А почему бы и нет?
• Announcing the Dart Custom Lint package
• Dynamic theme color with Material 3 (You) in Flutter
• Deep Linking in React Native
• Flutter battery app made with Klutter
• How to write Flutter code efficiently
• Flutter 3: What are enums and what is new about it
• Как мы перешли на регулярные релизы мобильного приложения. Часть I
• Improving shared architecture for a Kotlin Multiplatform, Jetpack Compose and SwiftUI app

← Previous | Next →

Предложить материал: @artemiygreg
Митапы и конференции: @meetup_today
Библиотеки и инструменты: @mobile_dev_tools
Подписаться: @mobile_native
Чат: @mobile_native_chat
👍4❤‍🔥3🔥1
Android In-app update

Круто же, когда приложение может само обновляться и мы, как разработчики может управлять этим процессом. Если вдруг вы не работали с in-app update, вот несколько статей, которые помогут понять основной принцип работы.

В первой статье показан сам принцип работы с in-app update, разные типы обновления с учетом логики приоритетов обновления, а во второй статье пример того, как можно запилить доп. логику для force обновления через firebase remote config.

Полезые ссылки

👉 In-app update
👉 Control In-app update in Android
👉 The easiest way to implement Firebase RemoteConfig in Android
👉 In-app updates docs
👍24
Navigation in Multi Modular App using DeepLinks

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

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

Код из статьи тут: NavigationWithMultiModuleApp

Читать (En)
👍9🔥1
A Perception of Exception in Kotlin Coroutines

Еще одна статья про исключения в корутинах. Рассматриваются основные вопросы: исключения и отмена в контексте корутин, как прокидываются исключения по иерархии и как обрабатывать исключения.

Читать (En)
👍6🔥1👏1
Switching between SwiftUI’s HStack and VStack

Несколько вариантов реализации собственного DynamicStack на SwiftUI, который будет автоматически переключаться между HStack и VStack в зависимости от ориентации (portrait, landscape).

Читать (En)
👍5