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
Forwarded from Записки разработчицы (Anna Zharkova)
Подготовила, надеюсь, интересный кейс для SwiftHero. Осталось только залить на гитхаб.
Разобрала до кишок работу с ServerDrivenUI для SwiftUI:

https://www.youtube.com/watch?v=XS6iH8ElD4o

Торопитесь, пока трансляция жива
👍11
Modeling Retrofit Responses With Sealed Classes and Coroutines

Пример того, как можно организовать обработку ответов от API с помощью sealed классов/интерфейсов и корутин. (Retrofit + Sealed classes/interfaces + Coroutines)

Читать (En)
👍20🤮2
How ViewModels survive configuration changes

А вы знаете как в андроиде вьюмодельки переживают изменение конфигурации?

Если нет – вот статейка, в которой на примере Activity разобрали исходники из sdk, все достаточно просто. У Activity есть 2 метода, через которые и происходит вся работа.

👉 onRetainNonConfigurationInstance()
👉 getLastNonConfigurationInstance()

Читать (En)
👍22
SwiftUI vs Jetpack Compose by an Android Engineer

Каким-то чудом забыл запостить интересную статью, в которой сравниваются 2 достаточно актуальных фреймворка Jetpack Compose и SwiftUI. Вот, исправляю ситуацию)

Читать (En)
👍15
Отменяем операции правильно на примере корутин

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

Вопрос на засыпку. В статье приводится пример с отменой Thread. Так вот, знаете ли вы как можно остановить/отменить тред?

P.S. как-нибудь выделю время и сделаю подборку по многопоточке.

Читать (Ru)
👍28
Clean Code — A practical approach

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

Еще в статье затрагивается такая интересная тема, как рефакторинг, полезно будет почитать начинающим.

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

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

Из интересных новостей. Вышла первая бета Android 13, подробности тут. За 2021 Google заблокировала более 1 миллиона приложений, нарушающих политику. Apple снова начала удалять приложения из App Store, которые давно не обновлялись – на решение вопроса с обновлением, разработчикам дают 30 дней, в противном случае будут удалять.

Всех с наступающими праздниками!!! Увидимся на следующей неделе)

Android 🤖

• Clean Architecture: Android App
• Android Architecture Blueprints v2
• Kotlin Tips: Operators and Nullable Values
• Интеграция Huawei Mobile Services (HMS)
• Modeling Retrofit Responses With Sealed Classes and Coroutines
• How ViewModels survive configuration changes
• Отменяем операции правильно на примере корутин
• Keep Rules in the Age of Kotlin
• Нативные автотесты Android: Наш путь
• Slack-Gradle-Plugin
• Gradle for Beginners (Build Types, Product Flavors, Build Variants, Source Sets)
• Kotlin Sequences: Getting Started
• Object equality in Java and Kotlin
• Twitter going all in on Jetpack Compose for feature development: greater productivity, less bugs
• Measure and improve performance with Macrobenchmark
• To Compose, or Not to Compose, That is the Question
• Exploring Google Map Compose Library For Android
• Kotlin Coroutine (High-quality Course)
• Android code style using Spotless and Ktlint
• How to Format All Possible Errors From API Calls in Android With Clean Architecture

iOS
🍏

• Обзор решений для навигации в iOS
• Swift Heroes: The Extra. "ServerDriven SwiftUI. Managing declarative UI"
• Type placeholders in Swift
• The Golden Rules of weak self
• Transitions in SwiftUI
• Exploring SwiftUI Sample Apps
• [boringssl] Failed to log metrics
• SwiftUI Case Study: Data modelling of Brotherhood Alchemist
• Downloading and Caching images in SwiftUI
• The S in SOLID - Swift Edition
• Unit Testing and UI Testing in Swift
• Using new Swift Async Algorithms package to close the gap on Combine
• Building an Accessible Custom Tab Bar
• How to Use Generics in Swift
• Core Image Tutorial: Getting Started
• Use Dependency Injection to Unit Test a ViewModel in Swift
• Localization in iOS App using MapKit and CoreLocation
• Write Cleaner Swift Using MVVM With Property Wrappers
• Простой способ обнаружить retain cycle в UIViewController
• Top 7 Subtle Swift Features

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

• MVC, MVP, MVI, MVVM and VIPER Design Patterns
• SwiftUI vs Jetpack Compose by an Android Engineer
• Clean Code — A practical approach
• Как мы в QIWI внедряли Kotlin Multiplatform Mobile Часть 2: Смотрим шире
• Стелем мягкую соломку на жёсткий Flutter: как подготовиться к первому проекту, чтобы не провалить его
• Better API calls in Flutter
• Kotlin Multiplatform Mobile — sharing the UI State management
• Как работает Backend-Driven UI на мобильном клиенте
• Practical Guide: Flutter + Firebase + FlutterFire CLI + CI (Codemagic)
• Top Flutter & Dart packages in 2022

Previous | Next

Предложить материал: @artemiygreg
Митапы и конференции: @meetup_today
Подписаться: @mobile_native
Чат: @mobile_native_chat
🔥8👍2👏2
Dependency Inversion Principle: How Google Developers write code

Простой и понятный пример Dependency Inversion Principle.

DIP соответствует D в SOLID и гласит: Модули верхних уровней не должны зависеть от модулей нижних уровней. Оба типа модулей должны зависеть от абстракций.

Несколько полезных ссылок про SOLID

👉 The S in SOLID - Swift Edition
👉 SOLID Principles: The Kotlin Way
👉 S.O.L.I.D Principles in Android Development
👉 Тысячная статья про принципы SOLID
👉 SOLID Principles with Swift

Читать (En)
👍11🔥4
Как мы используем фича-флаги в мобильном приложении QIWI Кошелек

Статья про реализацию Feature Flags/Feature Toggle от QIWI.

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

Библиотечка от QIWI тут: FeatureToggle

Читать (Ru)
👍12
Несколько важных Google-новостей

👉 Google запускает бесплатный курс Android Basics with Compose
👉 Опубликовали программу Google I/O
👉 Вышло первое developer preview of Privacy Sandbox on Android

В сообществе поговаривают, что в РФ начали отваливаться сервисы Firebase, а конкретно Firebase App Distribution и Firebase Cloud Message. Более детальной инфы пока нет.

Из соседнего чата: "Firebase is available in most countries and regions. However, Firebase restricts access to some of its business services in certain countries or regions. At this time, distribution of pre-release app versions via Firebase App Distribution is restricted in Russia”.
Google Play запретил разработчикам загружать и обновлять платные приложения в России

С 5 мая загрузка и обновление уже существующих платных приложений в Google Play запрещены в России. Для бесплатных приложений изменений нет.
👍48💩36👎8😱7🤔5🥰3🤬3🤮31🔥1👏1
Дайджест недели

По новостям: Google запускает курс по Compose, опубликовали программу предстоящей Google I/O, вышло первое developer preview of Privacy Sandbox on Android. Теперь по новости про блокировку загружать и обновлять платные приложения в России. В некоторых чатиках пишут, что запретили не разрабам загружать и обновлять, а пользователям скачивать и обновлять. Перечитал еще несколько раз все пункты, формулировки на самом деле странные, что в RU, что в EN версиях. Но есть все таки один пункт, в котором прописано следующее.

Can I publish new apps or update existing apps during this pause?

You can still publish new free apps, and update existing free apps. Updates to paid apps are blocked for compliance reasons. 


Android 🤖

• Dependency Inversion Principle: How Google Developers write code
• Как мы используем фича-флаги в мобильном приложении QIWI Кошелек
• Важные Google-новости
• Google Play запретил разработчикам загружать и обновлять платные приложения в России
• Learn Dagger 2 to Hilt for Android Easily in under 10 Minutes
• Jetpack Compose Dropdown
• S.O.L.I.D Principles (Examples in Kotlin)
• Kotlin-inline, crossline, noinline function and reified: Everything you need to know(Android) — Part 1
• 7 things to keep in mind while building jetpack composable’s.
• Architecture MAD Skills series wrap up
• Топ вопросов работодателю от Android-разработчика
• Isolate Koin Within an Android Module
• Kotlin, обрабатываем исключения в корутинах правильно
• The curious case of crashing Workers
• Material Components Android 1.6.0 Released
• Конвергенция в многомодульном приложении
• Passive Views: keep your UI code simple and stupid
• CI-CD: Firebase App Distribution with Fastlane on Android
• Creating reliable tests for Android notifications

iOS
🍏

• I replaced my native iOS app with a cross platform web app and no-one noticed
• Measuring app performance in Swift
• Types of memory in swift
• Improve Performance in Your iOS Applications — Part 1
• Swift 5.7: Unwrapping Optionals Gets an Improvement
• Clarifying criteria & new timing extension for App Store Improvements process
• Тест-ревью: как прошли два года написания unit-тестов
• Is It Possible to Have a Half-modal View in SwiftUI?
• Swift visitor design pattern
• Two Ways to Unit Test Notification Center in Swift
• Send Events from SwiftUI to UIKit and Vice Versa
• AsyncThrowingStream and AsyncStream explained with code examples
• AttributedString’s Codable format and what it has to do with Unicode
• SwiftUI Supporting External Screens
• Flow Navigation With SwiftUI (Revisited)
• Делаем патч для Pods библиотеки
• Как нативно визуализировать голос в iOS
• 6 Tips to improve Coding of Swift
• Building iOS apps faster using Bazel

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

• Destructuring Declarations | Kotlin Tips
• Kotlin 1.7.0-Beta Released
• Flutter for Apple TV
• KSP and Plugins. Optimizing Kotlin Multiplatform common code with Anna Zharkova
• React Native 0.68 и «новая архитектура»
• Как использовать Kotlin Multiplatform ViewModel в SwiftUI и Jetpack Compose
• Does Flutter boost developer productivity?
• Different Approach to Create Mapper using Kotlin Delegated Properties

Previous | Next

Публикация на Habr: Дайджест недели (мобильная разработка)

Предложить материал: @artemiygreg
Митапы и конференции: @meetup_today
Подписаться: @mobile_native
Чат: @mobile_native_chat
👍9🔥2👏1
Android Lint. Подборка

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

Еще есть вот такой репозиторий Awesome Android Lint, в котором собраны различные статьи, анализаторы, плагины, включая Ktlint, Detekt, так же есть правила от Google, Uber, Slack.

👉 Spotless
👉 Awesome Android Lint
👉 Ktlint
👉 Detekt

P.S. Кстати, сделал отдельный канал, куда буду складывать различные библиотеки и инструменты – @mobile_dev_tools
👍12🔥3
Write Beautiful Code With Swift Result Builder

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

Читать (En)
👍3🔥1
Письмо счастья: как мы разделили наши сборки для AppGallery и Google Play

Полезная статья от HH про то, как вынести вендорозависимый код (Google services, HMS) в отдельные модули и разделить сборки для AppGallery и Google Play через Product flavors.

А так же напоминаю, вот тут целая подборка материалов по интеграции HMS.

Читать (Ru)
👍10
Google Play SDK Index

Google представили прикольную штуку Google Play SDK Index – некий новый общедоступный портал, на котором собраны более 100 наиболее широко используемых коммерческих SDK с подробной инфой о каждом из них.

Посмотреть доступные sdk можно тут: Google Play SDK Index
👍11🤔1
Now in Android - a new, open source, real-world sample app

Google выложили исходники приложения Now in Android.

Приложение сделано по официальным гайдам и с учетом последних технологий.

👉 Jetpack Compose
👉 Material3
👉 Адаптивная верстка
👉 Архитектура по официальным гайдам
👉 Kotlin Flows
👉 Room & Proto DataStore
👉 WorkManager

Это рабочее приложение, которое они планирует опубликовать в Play Store.

Исходники тут: Now in Android App
👍19🔥4
Дайджест недели

Главным событием этой неделя было Google I/O, на которой представили некоторые нововведения, зарелизили ряд новых версий библиотек и инструментов. Из интересного: вышла вторая Beta Android 13, запустили сервис Google Play SDK Index, представили Flutter 3, выложили исходники приложения Now in Android. Все ссылки в дайджесте.

Android 🤖

• 13 Things to know for Android developers at Google I/O!
• Google Play SDK Index
• Что нового в инструментах Android-разработки
• Что нового в Jetpack Compose (Beta 1.2)
• Now in Android - a new, open source, real-world sample app
• Вышла вторая Beta Android 13
• Android Studio Chipmunk Released
• Jetpack DragAndDrop Released 1.0.0
• Compose performance
• Announcing Compose for Wear OS Beta!
• Introducing Health Connect, a new API for Android app developers to securely access user health data
• What's new in Google Play
• Android Lint. Подборка
• Fragula – swipe-to-dismiss extension for navigation component library for Android
• Письмо счастья: как мы разделили наши сборки для AppGallery и Google Play
• Here's a productivity hack to save tens of engineering hours* when working with Jetpack Compose!
• Understand Proguard Generated Files and Manually De-obfuscate Stacktrace
• Build a Custom IntelliJ Code Inspection Plugin
• How To Use Android’s Proto DataStore With Kotlin Support
• The Guide To Your First Annotation Processor with KSP (And Becoming A Kotlin Artist)
• Airbnb uses Jetpack Compose to empower devs to do their best work

iOS
🍏

• Apple отключила оплату в App Store со счёта мобильного у «Мегафона», Yota и Tele2
• Write Beautiful Code With Swift Result Builder
• Modeling errors in Swift
• A flexible way to handle and alert errors in SwiftUI
• How do we use SwiftUI in the Medium iOS application
• Заполнители типа в Swift: что это такое и когда их следует использовать
• On iOS applications architecture
• 5 актуальных расширений Xcode для оптимизации разработки
• 10 Tips and Tricks for Swift Developers
• How to Read Websites in SwiftUI — Data Scraping in iOS
• Swift: A few tips for improving code quality
• SSL/Certificate Pinning — iOS 14.0 Never easy before
• Clean Architecture: iOS App
• Creating hex-based colors in UIKit, AppKit and SwiftUI
• Core Data Relationship in Swift 5— made simple
• Building a document scanner in SwiftUI
• Bottom Sheet, shall we drop the formalities?
• Introduction to Dependency Injection with Needle - The Uber Way
• SwiftUI Still Isn’t Production-Ready

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

• Introducing Flutter 3
• What’s new in Flutter 3
• Dart 2.17: Productivity and integration
• Flutter and working with native code
• Flutter для Apple TV (Перевод)
• Return and Throw with the Elvis Operator | Kotlin Tips
• Key takeaways from our Kotlin Multiplatform journey
• jugger – внедрение зависимостей как в Android
• Exposing the separate resources module to iOS target using moko-resources in KMM

Previous | Next

Публикация на Habr: Дайджест недели (мобильная разработка)

Предложить материал: @artemiygreg
Митапы и конференции: @meetup_today
Библиотеки и инструменты: @mobile_dev_tools
Подписаться: @mobile_native
Чат: @mobile_native_chat
👍5🔥5
Знакомьтесь: библиотека TiRecycler

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

Библиотека тут: TiRecycler

Читать (Ru)
👍13💩8