Мобильная разработка за неделю #519 (11 — 17 декабря)

В новом выпуске усложнение iOS и избавление от рекурсии в Kotlin, cимволизация логов и новые фичи на старых Android, многомодульность на Flutter, опыт прохождения собеседования в Google, как много языков может влезть в одного программиста и многое другое!

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

r4cnesme5qu1pwby_pfv8saymke.png

f1930ac4945596eb9707bc7a01bc5bdc.pngiOS

• iOS-разрабокта становится сложнее — обсуждение на Reddit
• Символизация логов сбоев с помощью Xcode
• SwiftUI: Разбираемся с identity на примере переходов
• xcconfig: интеграция в проект, валидация и подключение к Tuist
• Объединяем Combine и Swift Concurrency
• SwiftData как замена CoreData: глубокое погружение
• Маслины и грабли: все, что вам нужно знать о разработке продукта полностью на SwiftUI
• Поваренная книга SwiftUI: добавление кастомной формы к представлению SwiftUI
• Опубликованы SDK, для которых Apple будет требовать подпись
• Apple заблокировала Beeper Mini «в целях безопасности»
• Откройте для себя Journaling Suggestions API
• 377ae0333d0f4b7b97307c9eea5ee21a.gifMarin«s Side Projects 2023
• 377ae0333d0f4b7b97307c9eea5ee21a.gifHow to customize the macOS About Panel in SwiftUI
• 377ae0333d0f4b7b97307c9eea5ee21a.gifAsyncPhoto for displayng large photos in SwiftUI
• 377ae0333d0f4b7b97307c9eea5ee21a.gifCreate an iOS Share Extension with custom UI in Swift and SwiftUI (2023)
• 377ae0333d0f4b7b97307c9eea5ee21a.gifThe Complete Guide to JSON Web Tokens (JWT) Authentication in iOS
• 377ae0333d0f4b7b97307c9eea5ee21a.gifA Guide to Geofences in SwiftUI
• 377ae0333d0f4b7b97307c9eea5ee21a.gifLeveraging Emerge Tools in CI/CD Pipelines for iOS App Size Optimisation
• 377ae0333d0f4b7b97307c9eea5ee21a.gifDistributing a Swift Macro using CocoaPods
• 377ae0333d0f4b7b97307c9eea5ee21a.gifWriting Custom SwiftLint Rule with SwiftSyntax
• 377ae0333d0f4b7b97307c9eea5ee21a.gifGetting to Swift.weak { }
• 377ae0333d0f4b7b97307c9eea5ee21a.gifModern iOS Navigation Patterns
• 377ae0333d0f4b7b97307c9eea5ee21a.gifWhat«s new in UIKit
• 377ae0333d0f4b7b97307c9eea5ee21a.gifMastering MapKit in SwiftUI. Camera.
• 377ae0333d0f4b7b97307c9eea5ee21a.gifImplementing Drag Gestures In Xcode 15 (SwiftUI)
• 377ae0333d0f4b7b97307c9eea5ee21a.gifiOS Developer Roadmap 2023
• 377ae0333d0f4b7b97307c9eea5ee21a.gifStretching an audio file using Swift
• 377ae0333d0f4b7b97307c9eea5ee21a.gifSelecting multiple items with a two-finger pan gesture
• 377ae0333d0f4b7b97307c9eea5ee21a.gifMastering the «Final» Keyword in Swift: A Comprehensive Guide for Optimized Coding
• 377ae0333d0f4b7b97307c9eea5ee21a.gifSymbolicating SwiftUI (and any Apple Framework)
• gtu1iaz0-ajkbqpeq8n6dmql4zq.pngImplementing Drag Gestures In Xcode 15
• gtu1iaz0-ajkbqpeq8n6dmql4zq.pngHow to Answer iOS Interview Questions Like a Pro
• gtu1iaz0-ajkbqpeq8n6dmql4zq.pngApp Localizations
• 96716bcb926741e79bb1c284a88083ca.pngChatGPT 4 Xcode: интеграция ИИ в Xcode
• 96716bcb926741e79bb1c284a88083ca.pngAespa: фото и видео в 2 строчки кода
• 96716bcb926741e79bb1c284a88083ca.pngSwift 30 Projects: 30 учебных проектов для изучающих iOS-разработку

e1a3cf2a8b65a0da69bbdd5c0ad040fe.pngAndroid

• ThrowInDB — Разбираю домашний хлам или сам себе склад
• Используйте Gemini в своих приложениях для Android
• Kotlin под капотом: как избавиться от рекурсии
• Detekt: как статический анализ помогает улучшить код автотестов
• Погружение в Smali. До и После. Decompile-Change-Build
• Разработка для нестандартных устройств
• Мок-собеседование по Android System Design (+ больше онлайн собесов)
• Android SDK Extensions — новые фичи на старых Android
• Доктор Bazel: как я научился не волноваться и полюбил сборки
• Amazon выпустил AWS SDK для Kotlin
• 377ae0333d0f4b7b97307c9eea5ee21a.gifHow to build Wrapped 2023 in Compose Animation
• 377ae0333d0f4b7b97307c9eea5ee21a.gifKotlin K2 Compiler«s Latest Features: Subtle Under-the-Hood Advances for Koin
• 377ae0333d0f4b7b97307c9eea5ee21a.gifExceptions for control flow in Kotlin
• 377ae0333d0f4b7b97307c9eea5ee21a.gifWhat can Advanced / Lesser Known Modifiers do for your UI
• 377ae0333d0f4b7b97307c9eea5ee21a.gifUnit testing Kotlin Flow emissions
• 377ae0333d0f4b7b97307c9eea5ee21a.gifZooming out Twilio Migration
• 377ae0333d0f4b7b97307c9eea5ee21a.gifHow to share and publish Detekt config?
• 377ae0333d0f4b7b97307c9eea5ee21a.gifFirebase dynamic link deprecation and its alternates
• 377ae0333d0f4b7b97307c9eea5ee21a.gifHow we tested a Google Play application
• 377ae0333d0f4b7b97307c9eea5ee21a.gifMVI Architecture with Jetpack Compose
• 377ae0333d0f4b7b97307c9eea5ee21a.gifOptimizing Mobile App Performance
• 377ae0333d0f4b7b97307c9eea5ee21a.gifKotlin Mutex: A Comprehensive Guide
• 377ae0333d0f4b7b97307c9eea5ee21a.gifMultitasking Intrusion and Preventing Screenshots in Android Apps
• 377ae0333d0f4b7b97307c9eea5ee21a.gifCrash Course on the Android UI Layer
• 377ae0333d0f4b7b97307c9eea5ee21a.gifNavigating Multiple Technical Migrations in Our Domain: Motivation and Strategy
• gtu1iaz0-ajkbqpeq8n6dmql4zq.pngNow in Android: 97 — Gemini, AICore, ML Kit, Android Studio Hedgehog, and more!
• gtu1iaz0-ajkbqpeq8n6dmql4zq.pngDetecting faces and landmarks — ML on Android with MediaPipe
• gtu1iaz0-ajkbqpeq8n6dmql4zq.pngShould You Use a Navigation Library in Jetpack Compose?
• gtu1iaz0-ajkbqpeq8n6dmql4zq.pngFull Guide to Multiple Back Stacks in Jetpack Compose — Android Studio Tutorial
• 96716bcb926741e79bb1c284a88083ca.pngGoogle Generative AI Sample: пример работы с Gemini
• 96716bcb926741e79bb1c284a88083ca.pngCompose Preference: экран настроек в Material 3

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

• Многомодульность на Flutter или как не выстрелить себе в ногу
• Ускорение игрового 2D движка Flame до стабильных максимальных FPS на телефонах и ПК
• Когда официальные гайды не такие и полезные или WebSocket на ktor
• 377ae0333d0f4b7b97307c9eea5ee21a.gifThe Anatomy of Dart Code Analysis: Understanding Key Entities
• 377ae0333d0f4b7b97307c9eea5ee21a.gifImplementing Blurred Bottom TabBar in React Native
• 377ae0333d0f4b7b97307c9eea5ee21a.gifSeparation of Concerns in Flutter Applications
• 377ae0333d0f4b7b97307c9eea5ee21a.gifFlutter Deep Linking: The Ultimate Guide
• 377ae0333d0f4b7b97307c9eea5ee21a.gifBuild a watch app using Flutter
• 377ae0333d0f4b7b97307c9eea5ee21a.gifHandling Real-time data in Flutter efficiently without Firebase
• 377ae0333d0f4b7b97307c9eea5ee21a.gifState of React Native survey
• 377ae0333d0f4b7b97307c9eea5ee21a.gifHow to store key-values in KMP in the secure way
• 377ae0333d0f4b7b97307c9eea5ee21a.gifModularizing Flutter UI with Factory Constructors
• 377ae0333d0f4b7b97307c9eea5ee21a.gifFlutter Tutorial: building an offline-first chat app with Supabase and PowerSync
• 377ae0333d0f4b7b97307c9eea5ee21a.gifPlatform Channels are Dead! Objective-C/Swift Interop is Here!
• gtu1iaz0-ajkbqpeq8n6dmql4zq.pngFlutter Firebase Festival

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

• Мой опыт прохождения собеседования в Google
• Стоит ли создавать приложение для умных часов?
• Пуш-уведомления RuStore
• «Что? Где? Когда?» в названии багов
• Как я использую мутационное тестирование для поддержки хорошего покрытия тестами
• Как много языков может влезть в одного программиста?
• От конструктора до облака: какие есть способы разработки мобильных приложений
• Как формировать топовые команды
• Ozon Tech Community Techdoc Meetup
• Почему ты пишешь говнокод? Главная причина
• Что такое символизация логов сбоев
• Вопросы с собеседований: что такое Потокобезопасность (Thread-Safe)
• Адвент-календарь MonkeyUser на 2023 год
• Вопросы с собеседований: что такое Copy-On-Write
• 377ae0333d0f4b7b97307c9eea5ee21a.gifProcessing Payments in Firebase with Stripe
• 377ae0333d0f4b7b97307c9eea5ee21a.gifNavigation patterns in mobile applications. How to make the right choice?
• 377ae0333d0f4b7b97307c9eea5ee21a.gifWhat I Wish I Knew As a Mid-Level Engineer
• 377ae0333d0f4b7b97307c9eea5ee21a.gifHow to arrange GitHub actions to improve feedback cycles
• 377ae0333d0f4b7b97307c9eea5ee21a.gifHow Plane, an open-source alternative to Jira, got to the #1 in project management on GitHub in less than a year
• 377ae0333d0f4b7b97307c9eea5ee21a.gifMigrating Netflix to GraphQL Safely
• gtu1iaz0-ajkbqpeq8n6dmql4zq.pngLessons from building GitHub code search

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

• Epic Games выиграла в суде у Google
• АБ тесты и подводные камни при их автоматизации
• Разметить всё: как мы настроили систему логирования в приложении каршеринга
• Социальная торговая платформа Maka привлекает $2.65 млн для упрощения покупок в Африке
• Маркетологи в мобайле: Александр Багринцев (Sunlight)
• DistroKid запустил приложение для Android
• Лучшая мобильная игра в Game Awards 2023
• Как я потерял $2,85 млн и решил создать приложение для массового инвестирования
• 377ae0333d0f4b7b97307c9eea5ee21a.gifEmail marketing for mobile apps: A comprehensive guide

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

• Удаленно следим за состоянием газового котла
• Зачем на камере и видеорегистраторе нужен криптоблок и как его восстановить
• Локальные GPT нейронный сети — проверяем на адекватность аналоги ChatGPT, запускаемые на домашнем компьютере
• Осваиваем чип с Arm Cortex-M85
• MedLM: генеративный ИИ для индустрии здравоохранения
• Microsoft выпустила модель Phi-2, которая «может работать на мобильном устройстве»

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

© Habrahabr.ru