Мобильная разработка за неделю #517 (27 ноября — 3 декабря)

В новом дайджесте создание самолетного радара для любимой дочки, Kotlin под капотом, утечки памяти, визуальная иерархия элементов, лучшие приложения года для iOS и Android, руководство по монетизации и многое другое!

Подписывайтесь на на наш Telegram-канал Mobile Insights, где еще больше материалов для мобильных разработчиков. А в IT Insights — много об интересном коде и технологиях.

hmq5axrx9m_agsa3_kf8y-8ltky.jpeg

f1930ac4945596eb9707bc7a01bc5bdc.pngiOS

• Моя малышка любит самолеты — и я сделал для нее радар
• DebugMenu и визуальная иерархия элементов интерфейса
• Ускоряем прохождение iOS UI-тестов. Часть 3. Старт приложения с определенного экрана
• Как появились веб-пуши Apple в Тинькофф
• Вопросы с собеседований: в чем разница Weak и Unowned в Swift
• Лучшие приложения года в App Store Awards 2023
• Поваренная книга SwiftUI: создание круглого представления в SwiftUI
• 377ae0333d0f4b7b97307c9eea5ee21a.gifHow to store images in SwiftData
• 377ae0333d0f4b7b97307c9eea5ee21a.gifRefactoring Your iOS AppDelegate
• 377ae0333d0f4b7b97307c9eea5ee21a.gifNew to Bitrise: Enhanced Xcode Reporting & Build Annotations
• 377ae0333d0f4b7b97307c9eea5ee21a.gifMonths of rewriting code and tests to async/await
• 377ae0333d0f4b7b97307c9eea5ee21a.gifUnit Test the Observation Framework
• 377ae0333d0f4b7b97307c9eea5ee21a.gifRouter Pattern for SwiftUI Navigation
• 377ae0333d0f4b7b97307c9eea5ee21a.gifSwift Evolution: Reading and learning from proposals
• 377ae0333d0f4b7b97307c9eea5ee21a.gifWorking with custom metadata in mp4 files
• 377ae0333d0f4b7b97307c9eea5ee21a.gifUsing on-demand resources for securely storing API keys in iOS apps
• 377ae0333d0f4b7b97307c9eea5ee21a.gifPractical Examples of Swift Extensions
• 377ae0333d0f4b7b97307c9eea5ee21a.gifTop SwiftUI Interview Questions for 2023
• 377ae0333d0f4b7b97307c9eea5ee21a.gifAutomating Memory Leak Detection with CI Integration for iOS
• 377ae0333d0f4b7b97307c9eea5ee21a.gifiOS development with JetBrains Fleet
• 377ae0333d0f4b7b97307c9eea5ee21a.gifShipping Values Between Actors
• 377ae0333d0f4b7b97307c9eea5ee21a.gifMastering MapKit in SwiftUI. Basics
• 377ae0333d0f4b7b97307c9eea5ee21a.gifWorking with MapKit in SwiftUI
• 377ae0333d0f4b7b97307c9eea5ee21a.gifAdd Quick Actions to SwiftUI App
• 377ae0333d0f4b7b97307c9eea5ee21a.gifSwiftUI geometryGroup () Guide: From Theory to Practice
• 377ae0333d0f4b7b97307c9eea5ee21a.gifCreate Your Own Step Counter SwiftUI App in 5 Minutes
• gtu1iaz0-ajkbqpeq8n6dmql4zq.pngSwift Data One to Many Relationships
• gtu1iaz0-ajkbqpeq8n6dmql4zq.pngSwiftData Starter Project
• gtu1iaz0-ajkbqpeq8n6dmql4zq.pngSwiftUI Shine Effect — Custom View Modifier
• gtu1iaz0-ajkbqpeq8n6dmql4zq.pngSwiftUI: Infinite Looping ScrollView — iOS 17
• gtu1iaz0-ajkbqpeq8n6dmql4zq.pngSwiftLeeds 2023 Videos
• gtu1iaz0-ajkbqpeq8n6dmql4zq.pngWorking with XcodeKit
• 96716bcb926741e79bb1c284a88083ca.pngPow: анимационные эффекты для SwiftUI
• 96716bcb926741e79bb1c284a88083ca.pngGridView: простое создание сеток для SwiftUI
• 96716bcb926741e79bb1c284a88083ca.pngVariablur: размытие для SwiftUI на основе Metal

e1a3cf2a8b65a0da69bbdd5c0ad040fe.pngAndroid

• Обзор актуальных инструментов шифрования в Android
• Элегантная обработка событий в Kotlin — рефакторинг в 7 шагов
• Android. Принять себя или Cookie?
• Kotlin под капотом: inline функции
• Топ-10 причин утечки памяти в Android
• Списки с душой и стилем: Ваш путь к Jetpack Compose
• SberPay: как добавить поддержку бесконтактной оплаты в Android-приложение
• Видео-сообщение как в Telegram
• Как сделать приложение для Android с бесконечной лентой видео на базе EdgeStreaming
• Вышла стабильная версия Android Studio Hedgehog
• Лучшие приложения и игры в Google Play 2023
• Вопросы с собеседований: что такое контент-провайдер в Android
• Разработка UI на Jetpack Compose
• Треш-обзор Geekbrains. Полный разбор курса по Android
• 377ae0333d0f4b7b97307c9eea5ee21a.gifPreparing for Network Failures this Holiday Season
• 377ae0333d0f4b7b97307c9eea5ee21a.gifEmoji error! Using the latest Compose with compileSDK < 34
• 377ae0333d0f4b7b97307c9eea5ee21a.gifOh no, another type safe Compose Navigation library for Android
• 377ae0333d0f4b7b97307c9eea5ee21a.gifHow to make Espresso tests more readable and stable
• 377ae0333d0f4b7b97307c9eea5ee21a.gifIntroducing a Gradle plugin for Screenshotbot
• 377ae0333d0f4b7b97307c9eea5ee21a.gifThe Android Backstage of Mercado Libre Warehouses
• 377ae0333d0f4b7b97307c9eea5ee21a.gif«Don«ts» in modern Android/Kotlin Development (Bad practices/Anti-patterns)
• 377ae0333d0f4b7b97307c9eea5ee21a.gifKotlin under the hood: How inline functions work
• 377ae0333d0f4b7b97307c9eea5ee21a.gifDemystifying Kotlin StateFlows: A Deep Dive
• 377ae0333d0f4b7b97307c9eea5ee21a.gifComponent-based Approach. Implementing Screens with the Decompose Library
• 377ae0333d0f4b7b97307c9eea5ee21a.gifAndroid: Service vs IntentService in Kotlin
• 377ae0333d0f4b7b97307c9eea5ee21a.gifUnderstanding the Key Function in Jetpack Compose
• 377ae0333d0f4b7b97307c9eea5ee21a.gifThe Composable Memory Leak And Java VM Shut Down Issue
• 377ae0333d0f4b7b97307c9eea5ee21a.gifGestures in Jetpack compose — All you need to know
• 377ae0333d0f4b7b97307c9eea5ee21a.gifKotlin Functions Every Developer Should Know with Examples
• 377ae0333d0f4b7b97307c9eea5ee21a.gif3 Android Studio Plugins for a Better Developer Experience for Kotlin
• gtu1iaz0-ajkbqpeq8n6dmql4zq.pngWhat«s new in Android Studio Hedgehog
• gtu1iaz0-ajkbqpeq8n6dmql4zq.pngNow in Android: 96 — New APIs for adaptive layouts, Google Play updates, and more!
• gtu1iaz0-ajkbqpeq8n6dmql4zq.pngcompileSdk VS. targetSdk VS. minSdk — THIS Is the Difference
• gtu1iaz0-ajkbqpeq8n6dmql4zq.pngExploring Molecule and Beyond with Jake Wharton
• gtu1iaz0-ajkbqpeq8n6dmql4zq.pngFull Guide to Shared Element Transition Animation in Android with Jetpack Compose
• 96716bcb926741e79bb1c284a88083ca.pngFlexibleBottomSheet: удобный Bottom Sheet для Jetpack Compose
• 96716bcb926741e79bb1c284a88083ca.pngfoSho: type safe навигация для Compose

malx8hbgozt6lee8rmxmg96_s6a.pngКроссплатформа

• Kotlin Multiplatform в мобильной разработке. Рецепты общего кода для Android и iOS
• Хитрый виджет:  разбор тестового Flutter-задания. Детективная нуар-история
• Как добавить Flutter в нативное приложение iOS и протестировать его на Codemagic (Часть 3)
• 377ae0333d0f4b7b97307c9eea5ee21a.gifTop 14 VS Code Extensions for Fast Flutter App Development
• 377ae0333d0f4b7b97307c9eea5ee21a.gifCreating an automated test framework for React Native apps
• 377ae0333d0f4b7b97307c9eea5ee21a.gifOverflow Indicator in Flutter: Mastering UI Responsiveness
• 377ae0333d0f4b7b97307c9eea5ee21a.gifCode Generator using Flutter
• 377ae0333d0f4b7b97307c9eea5ee21a.gifSecure the user data on iCloud Drive with Flutter
• 377ae0333d0f4b7b97307c9eea5ee21a.gifClean Your UI Code in Flutter
• 377ae0333d0f4b7b97307c9eea5ee21a.gifSharing codebase between platforms — a look at Kotlin and Compose multiplatform
• 377ae0333d0f4b7b97307c9eea5ee21a.gifFlutter + Flame + Tiled = a simple game field prototype for a strategy game
• 377ae0333d0f4b7b97307c9eea5ee21a.gifReact Native«s New Architecture
• 377ae0333d0f4b7b97307c9eea5ee21a.gifReactive Programming in Flutter
• 377ae0333d0f4b7b97307c9eea5ee21a.gifShimmer & Skeleton Effects In Flutter
• gtu1iaz0-ajkbqpeq8n6dmql4zq.pngShared Navigation on Kotlin Multiplatform with Decompose (KMP)
• gtu1iaz0-ajkbqpeq8n6dmql4zq.pngCoil Goes Multiplatform with Colin White
• gtu1iaz0-ajkbqpeq8n6dmql4zq.pngStep-by-Step Guide: Creating a Peer-to-Peer Tic Tac Toe Game in Flutter

7081c634ec176ab6b953d9d19e82a09a.pngРазработка

• Доступность игр для людей с ограниченными возможностями: проблемы и их решения
• Солнце горит во мне: обновление Яндекс Музыки, о котором стоит знать
• Как мы (не) вкатились в геймдев. Часть 1
• По заветам кота Вжуха: превращаем веб-приложение в сервис на платформе VK Mini Apps
• Первый месяц жизни приложения BookDesk или как меня пытались взломать
• Проект: AI Note Recorder или как я не выполнил цель на 2023 год
• Что можно улучшить в своем приложении? Крадем как художники у Яндекс.Еды
• Самые высокооплачиваемые вакансии ноября в сфере разработки приложений
• Автотесты в AvitoTech
• Секреты собеседований с Алеексеем Быковым (Reddit)
• Podlodka #343: что такое Motion Design?
• Прощай, чистый код
• Бесплатный курс «Современное программирование на C++»
• Зарплаты за год в IT выросли на 8.5%
• 377ae0333d0f4b7b97307c9eea5ee21a.gifA good engineer thinks like a product manager
• 377ae0333d0f4b7b97307c9eea5ee21a.gifHow to Become a Data Engineer
• 377ae0333d0f4b7b97307c9eea5ee21a.gifEvaluating M3 Pro CPU Cores: General Performance
• 377ae0333d0f4b7b97307c9eea5ee21a.gifKnowledge Graphs from scratch with Python

509dc9bde69347ecbe0c21ff2973d7e7.jpgАналитика, маркетинг и монетизация

• Как монетизировать приложения — практическое руководство Data.ai и Google
• Новый Инструмент «Пути» в MyTracker для визуализации путей пользователей
• Маркетологи в мобайле: Happy Birthday Edition
• Vimcal улучшает рабочий календарь с помощью ИИ
• Фальшивый трафик в 2023 году будет стоить рекламодателям $71 млрд

8538129f5e7b404a720121cb9c3814db.jpgAI, Устройства, IoT

• Локальные нейросети. Аналог ChatGPT-3.5 на домашнем ПК: OpenChat 7B превосходящая 70B, DeepSeek для кода уровня ChatGPT
• Исследователи заставили ChatGPT процитировать данные, на которых он учился
• ClimateGuard CG LED: Новый Год к нам мчится…
• Bluetooth-жучки — за чем можно легально следить, а за чем нельзя
• Продолжаем изучать аппаратные возможности расширения Микротик RBM33G
• Microsoft открыла ThreadX
• Pika Labs получает $55 млн на генеративный ИИ для видео
• Лучшие клавиатуры для программирования 2023

← Предыдущий дайджест. Если у вас есть другие интересные материалы или вы нашли ошибку — пришлите, пожалуйста, в почту.

© Habrahabr.ru