В новом выпуске усложнение iOS и избавление от рекурсии в Kotlin, cимволизация логов и новые фичи на старых Android, многомодульность на Flutter, опыт прохождения собеседования в Google, как много языков может влезть в одного программиста и многое другое!
Подписывайтесь на на наш Telegram-канал Mobile Insights, где еще больше материалов для мобильных разработчиков. А в IT Insights — много об интересном коде и технологиях.
![](https://habrastorage.org/webt/r4/cn/es/r4cnesme5qu1pwby_pfv8saymke.png)
iOS
• iOS-разрабокта становится сложнее — обсуждение на Reddit
• Символизация логов сбоев с помощью Xcode
• SwiftUI: Разбираемся с identity на примере переходов
• xcconfig: интеграция в проект, валидация и подключение к Tuist
• Объединяем Combine и Swift Concurrency
• SwiftData как замена CoreData: глубокое погружение
• Маслины и грабли: все, что вам нужно знать о разработке продукта полностью на SwiftUI
• Поваренная книга SwiftUI: добавление кастомной формы к представлению SwiftUI
• Опубликованы SDK, для которых Apple будет требовать подпись
• Apple заблокировала Beeper Mini «в целях безопасности»
• Откройте для себя Journaling Suggestions API
•
Marin’s Side Projects 2023
•
How to customize the macOS About Panel in SwiftUI
•
AsyncPhoto for displayng large photos in SwiftUI
•
Create an iOS Share Extension with custom UI in Swift and SwiftUI (2023)
•
The Complete Guide to JSON Web Tokens (JWT) Authentication in iOS
•
A Guide to Geofences in SwiftUI
•
Leveraging Emerge Tools in CI/CD Pipelines for iOS App Size Optimisation
•
Distributing a Swift Macro using CocoaPods
•
Writing Custom SwiftLint Rule with SwiftSyntax
•
Getting to Swift.weak { }
•
Modern iOS Navigation Patterns
•
What’s new in UIKit
•
Mastering MapKit in SwiftUI. Camera.
•
Implementing Drag Gestures In Xcode 15 (SwiftUI)
•
iOS Developer Roadmap 2023
•
Stretching an audio file using Swift
•
Selecting multiple items with a two-finger pan gesture
•
Mastering the ‘Final’ Keyword in Swift: A Comprehensive Guide for Optimized Coding
•
Symbolicating SwiftUI (and any Apple Framework)
•
Implementing Drag Gestures In Xcode 15
•
How to Answer iOS Interview Questions Like a Pro
•
App Localizations
•
ChatGPT 4 Xcode: интеграция ИИ в Xcode
•
Aespa: фото и видео в 2 строчки кода
•
Swift 30 Projects: 30 учебных проектов для изучающих iOS-разработку
Android
• ThrowInDB — Разбираю домашний хлам или сам себе склад
• Используйте Gemini в своих приложениях для Android
• Kotlin под капотом: как избавиться от рекурсии
• Detekt: как статический анализ помогает улучшить код автотестов
• Погружение в Smali. До и После. Decompile-Change-Build
• Разработка для нестандартных устройств
• Мок-собеседование по Android System Design (+ больше онлайн собесов)
• Android SDK Extensions — новые фичи на старых Android
• Доктор Bazel: как я научился не волноваться и полюбил сборки
• Amazon выпустил AWS SDK для Kotlin
•
How to build Wrapped 2023 in Compose Animation
•
Kotlin K2 Compiler’s Latest Features: Subtle Under-the-Hood Advances for Koin
•
Exceptions for control flow in Kotlin
•
What can Advanced / Lesser Known Modifiers do for your UI
•
Unit testing Kotlin Flow emissions
•
Zooming out Twilio Migration
•
How to share and publish Detekt config?
•
Firebase dynamic link deprecation and its alternates
•
How we tested a Google Play application
•
MVI Architecture with Jetpack Compose
•
Optimizing Mobile App Performance
•
Kotlin Mutex: A Comprehensive Guide
•
Multitasking Intrusion and Preventing Screenshots in Android Apps
•
Crash Course on the Android UI Layer
•
Navigating Multiple Technical Migrations in Our Domain: Motivation and Strategy
•
Now in Android: 97 — Gemini, AICore, ML Kit, Android Studio Hedgehog, and more!
•
Detecting faces and landmarks — ML on Android with MediaPipe
•
Should You Use a Navigation Library in Jetpack Compose?
•
Full Guide to Multiple Back Stacks in Jetpack Compose — Android Studio Tutorial
•
Google Generative AI Sample: пример работы с Gemini
•
Compose Preference: экран настроек в Material 3
Кроссплатформа
• Многомодульность на Flutter или как не выстрелить себе в ногу
• Ускорение игрового 2D движка Flame до стабильных максимальных FPS на телефонах и ПК
• Когда официальные гайды не такие и полезные или WebSocket на ktor
•
The Anatomy of Dart Code Analysis: Understanding Key Entities
•
Implementing Blurred Bottom TabBar in React Native
•
Separation of Concerns in Flutter Applications
•
Flutter Deep Linking: The Ultimate Guide
•
Build a watch app using Flutter
•
Handling Real-time data in Flutter efficiently without Firebase
•
State of React Native survey
•
How to store key-values in KMP in the secure way
•
Modularizing Flutter UI with Factory Constructors
•
Flutter Tutorial: building an offline-first chat app with Supabase and PowerSync
•
Platform Channels are Dead! Objective-C/Swift Interop is Here!
•
Flutter Firebase Festival
Разработка
• Мой опыт прохождения собеседования в Google
• Стоит ли создавать приложение для умных часов?
• Пуш-уведомления RuStore
• «Что? Где? Когда?» в названии багов
• Как я использую мутационное тестирование для поддержки хорошего покрытия тестами
• Как много языков может влезть в одного программиста?
• От конструктора до облака: какие есть способы разработки мобильных приложений
• Как формировать топовые команды
• Ozon Tech Community Techdoc Meetup
• Почему ты пишешь говнокод? Главная причина
• Что такое символизация логов сбоев
• Вопросы с собеседований: что такое Потокобезопасность (Thread-Safe)
• Адвент-календарь MonkeyUser на 2023 год
• Вопросы с собеседований: что такое Copy-On-Write
•
Processing Payments in Firebase with Stripe
•
Navigation patterns in mobile applications. How to make the right choice?
•
What I Wish I Knew As a Mid-Level Engineer
•
How to arrange GitHub actions to improve feedback cycles
•
How Plane, an open-source alternative to Jira, got to the #1 in project management on GitHub in less than a year
•
Migrating Netflix to GraphQL Safely
•
Lessons from building GitHub code search
Аналитика, маркетинг и монетизация
• Epic Games выиграла в суде у Google
• АБ тесты и подводные камни при их автоматизации
• Разметить всё: как мы настроили систему логирования в приложении каршеринга
• Социальная торговая платформа Maka привлекает $2.65 млн для упрощения покупок в Африке
• Маркетологи в мобайле: Александр Багринцев (Sunlight)
• DistroKid запустил приложение для Android
• Лучшая мобильная игра в Game Awards 2023
• Как я потерял $2,85 млн и решил создать приложение для массового инвестирования
•
Email marketing for mobile apps: A comprehensive guide
AI, Устройства, IoT
• Удаленно следим за состоянием газового котла
• Зачем на камере и видеорегистраторе нужен криптоблок и как его восстановить
• Локальные GPT нейронный сети — проверяем на адекватность аналоги ChatGPT, запускаемые на домашнем компьютере
• Осваиваем чип с Arm Cortex-M85
• MedLM: генеративный ИИ для индустрии здравоохранения
• Microsoft выпустила модель Phi-2, которая «может работать на мобильном устройстве»
← Предыдущий дайджест. Если у вас есть другие интересные материалы или вы нашли ошибку — пришлите, пожалуйста, в почту.
Подписывайтесь на на наш Telegram-канал Mobile Insights, где еще больше материалов для мобильных разработчиков. А в IT Insights — много об интересном коде и технологиях.
![](https://habrastorage.org/webt/r4/cn/es/r4cnesme5qu1pwby_pfv8saymke.png)
![](https://habrastorage.org/getpro/habr/post_images/f19/30a/c49/f1930ac4945596eb9707bc7a01bc5bdc.png)
• iOS-разрабокта становится сложнее — обсуждение на Reddit
• Символизация логов сбоев с помощью Xcode
• SwiftUI: Разбираемся с identity на примере переходов
• xcconfig: интеграция в проект, валидация и подключение к Tuist
• Объединяем Combine и Swift Concurrency
• SwiftData как замена CoreData: глубокое погружение
• Маслины и грабли: все, что вам нужно знать о разработке продукта полностью на SwiftUI
• Поваренная книга SwiftUI: добавление кастомной формы к представлению SwiftUI
• Опубликованы SDK, для которых Apple будет требовать подпись
• Apple заблокировала Beeper Mini «в целях безопасности»
• Откройте для себя Journaling Suggestions API
•
![](https://habrastorage.org/files/377/ae0/333/377ae0333d0f4b7b97307c9eea5ee21a.gif)
•
![](https://habrastorage.org/files/377/ae0/333/377ae0333d0f4b7b97307c9eea5ee21a.gif)
•
![](https://habrastorage.org/files/377/ae0/333/377ae0333d0f4b7b97307c9eea5ee21a.gif)
•
![](https://habrastorage.org/files/377/ae0/333/377ae0333d0f4b7b97307c9eea5ee21a.gif)
•
![](https://habrastorage.org/files/377/ae0/333/377ae0333d0f4b7b97307c9eea5ee21a.gif)
•
![](https://habrastorage.org/files/377/ae0/333/377ae0333d0f4b7b97307c9eea5ee21a.gif)
•
![](https://habrastorage.org/files/377/ae0/333/377ae0333d0f4b7b97307c9eea5ee21a.gif)
•
![](https://habrastorage.org/files/377/ae0/333/377ae0333d0f4b7b97307c9eea5ee21a.gif)
•
![](https://habrastorage.org/files/377/ae0/333/377ae0333d0f4b7b97307c9eea5ee21a.gif)
•
![](https://habrastorage.org/files/377/ae0/333/377ae0333d0f4b7b97307c9eea5ee21a.gif)
•
![](https://habrastorage.org/files/377/ae0/333/377ae0333d0f4b7b97307c9eea5ee21a.gif)
•
![](https://habrastorage.org/files/377/ae0/333/377ae0333d0f4b7b97307c9eea5ee21a.gif)
•
![](https://habrastorage.org/files/377/ae0/333/377ae0333d0f4b7b97307c9eea5ee21a.gif)
•
![](https://habrastorage.org/files/377/ae0/333/377ae0333d0f4b7b97307c9eea5ee21a.gif)
•
![](https://habrastorage.org/files/377/ae0/333/377ae0333d0f4b7b97307c9eea5ee21a.gif)
•
![](https://habrastorage.org/files/377/ae0/333/377ae0333d0f4b7b97307c9eea5ee21a.gif)
•
![](https://habrastorage.org/files/377/ae0/333/377ae0333d0f4b7b97307c9eea5ee21a.gif)
•
![](https://habrastorage.org/files/377/ae0/333/377ae0333d0f4b7b97307c9eea5ee21a.gif)
•
![](https://habrastorage.org/files/377/ae0/333/377ae0333d0f4b7b97307c9eea5ee21a.gif)
•
![](https://habrastorage.org/webt/gt/u1/ia/gtu1iaz0-ajkbqpeq8n6dmql4zq.png)
•
![](https://habrastorage.org/webt/gt/u1/ia/gtu1iaz0-ajkbqpeq8n6dmql4zq.png)
•
![](https://habrastorage.org/webt/gt/u1/ia/gtu1iaz0-ajkbqpeq8n6dmql4zq.png)
•
![](https://habrastorage.org/files/967/16b/cb9/96716bcb926741e79bb1c284a88083ca.png)
•
![](https://habrastorage.org/files/967/16b/cb9/96716bcb926741e79bb1c284a88083ca.png)
•
![](https://habrastorage.org/files/967/16b/cb9/96716bcb926741e79bb1c284a88083ca.png)
![](https://habrastorage.org/getpro/habr/post_images/e1a/3cf/2a8/e1a3cf2a8b65a0da69bbdd5c0ad040fe.png)
• ThrowInDB — Разбираю домашний хлам или сам себе склад
• Используйте Gemini в своих приложениях для Android
• Kotlin под капотом: как избавиться от рекурсии
• Detekt: как статический анализ помогает улучшить код автотестов
• Погружение в Smali. До и После. Decompile-Change-Build
• Разработка для нестандартных устройств
• Мок-собеседование по Android System Design (+ больше онлайн собесов)
• Android SDK Extensions — новые фичи на старых Android
• Доктор Bazel: как я научился не волноваться и полюбил сборки
• Amazon выпустил AWS SDK для Kotlin
•
![](https://habrastorage.org/files/377/ae0/333/377ae0333d0f4b7b97307c9eea5ee21a.gif)
•
![](https://habrastorage.org/files/377/ae0/333/377ae0333d0f4b7b97307c9eea5ee21a.gif)
•
![](https://habrastorage.org/files/377/ae0/333/377ae0333d0f4b7b97307c9eea5ee21a.gif)
•
![](https://habrastorage.org/files/377/ae0/333/377ae0333d0f4b7b97307c9eea5ee21a.gif)
•
![](https://habrastorage.org/files/377/ae0/333/377ae0333d0f4b7b97307c9eea5ee21a.gif)
•
![](https://habrastorage.org/files/377/ae0/333/377ae0333d0f4b7b97307c9eea5ee21a.gif)
•
![](https://habrastorage.org/files/377/ae0/333/377ae0333d0f4b7b97307c9eea5ee21a.gif)
•
![](https://habrastorage.org/files/377/ae0/333/377ae0333d0f4b7b97307c9eea5ee21a.gif)
•
![](https://habrastorage.org/files/377/ae0/333/377ae0333d0f4b7b97307c9eea5ee21a.gif)
•
![](https://habrastorage.org/files/377/ae0/333/377ae0333d0f4b7b97307c9eea5ee21a.gif)
•
![](https://habrastorage.org/files/377/ae0/333/377ae0333d0f4b7b97307c9eea5ee21a.gif)
•
![](https://habrastorage.org/files/377/ae0/333/377ae0333d0f4b7b97307c9eea5ee21a.gif)
•
![](https://habrastorage.org/files/377/ae0/333/377ae0333d0f4b7b97307c9eea5ee21a.gif)
•
![](https://habrastorage.org/files/377/ae0/333/377ae0333d0f4b7b97307c9eea5ee21a.gif)
•
![](https://habrastorage.org/files/377/ae0/333/377ae0333d0f4b7b97307c9eea5ee21a.gif)
•
![](https://habrastorage.org/webt/gt/u1/ia/gtu1iaz0-ajkbqpeq8n6dmql4zq.png)
•
![](https://habrastorage.org/webt/gt/u1/ia/gtu1iaz0-ajkbqpeq8n6dmql4zq.png)
•
![](https://habrastorage.org/webt/gt/u1/ia/gtu1iaz0-ajkbqpeq8n6dmql4zq.png)
•
![](https://habrastorage.org/webt/gt/u1/ia/gtu1iaz0-ajkbqpeq8n6dmql4zq.png)
•
![](https://habrastorage.org/files/967/16b/cb9/96716bcb926741e79bb1c284a88083ca.png)
•
![](https://habrastorage.org/files/967/16b/cb9/96716bcb926741e79bb1c284a88083ca.png)
![](https://habrastorage.org/webt/ma/lx/8h/malx8hbgozt6lee8rmxmg96_s6a.png)
• Многомодульность на Flutter или как не выстрелить себе в ногу
• Ускорение игрового 2D движка Flame до стабильных максимальных FPS на телефонах и ПК
• Когда официальные гайды не такие и полезные или WebSocket на ktor
•
![](https://habrastorage.org/files/377/ae0/333/377ae0333d0f4b7b97307c9eea5ee21a.gif)
•
![](https://habrastorage.org/files/377/ae0/333/377ae0333d0f4b7b97307c9eea5ee21a.gif)
•
![](https://habrastorage.org/files/377/ae0/333/377ae0333d0f4b7b97307c9eea5ee21a.gif)
•
![](https://habrastorage.org/files/377/ae0/333/377ae0333d0f4b7b97307c9eea5ee21a.gif)
•
![](https://habrastorage.org/files/377/ae0/333/377ae0333d0f4b7b97307c9eea5ee21a.gif)
•
![](https://habrastorage.org/files/377/ae0/333/377ae0333d0f4b7b97307c9eea5ee21a.gif)
•
![](https://habrastorage.org/files/377/ae0/333/377ae0333d0f4b7b97307c9eea5ee21a.gif)
•
![](https://habrastorage.org/files/377/ae0/333/377ae0333d0f4b7b97307c9eea5ee21a.gif)
•
![](https://habrastorage.org/files/377/ae0/333/377ae0333d0f4b7b97307c9eea5ee21a.gif)
•
![](https://habrastorage.org/files/377/ae0/333/377ae0333d0f4b7b97307c9eea5ee21a.gif)
•
![](https://habrastorage.org/files/377/ae0/333/377ae0333d0f4b7b97307c9eea5ee21a.gif)
•
![](https://habrastorage.org/webt/gt/u1/ia/gtu1iaz0-ajkbqpeq8n6dmql4zq.png)
![](https://habrastorage.org/getpro/habr/post_images/708/1c6/34e/7081c634ec176ab6b953d9d19e82a09a.png)
• Мой опыт прохождения собеседования в Google
• Стоит ли создавать приложение для умных часов?
• Пуш-уведомления RuStore
• «Что? Где? Когда?» в названии багов
• Как я использую мутационное тестирование для поддержки хорошего покрытия тестами
• Как много языков может влезть в одного программиста?
• От конструктора до облака: какие есть способы разработки мобильных приложений
• Как формировать топовые команды
• Ozon Tech Community Techdoc Meetup
• Почему ты пишешь говнокод? Главная причина
• Что такое символизация логов сбоев
• Вопросы с собеседований: что такое Потокобезопасность (Thread-Safe)
• Адвент-календарь MonkeyUser на 2023 год
• Вопросы с собеседований: что такое Copy-On-Write
•
![](https://habrastorage.org/files/377/ae0/333/377ae0333d0f4b7b97307c9eea5ee21a.gif)
•
![](https://habrastorage.org/files/377/ae0/333/377ae0333d0f4b7b97307c9eea5ee21a.gif)
•
![](https://habrastorage.org/files/377/ae0/333/377ae0333d0f4b7b97307c9eea5ee21a.gif)
•
![](https://habrastorage.org/files/377/ae0/333/377ae0333d0f4b7b97307c9eea5ee21a.gif)
•
![](https://habrastorage.org/files/377/ae0/333/377ae0333d0f4b7b97307c9eea5ee21a.gif)
•
![](https://habrastorage.org/files/377/ae0/333/377ae0333d0f4b7b97307c9eea5ee21a.gif)
•
![](https://habrastorage.org/webt/gt/u1/ia/gtu1iaz0-ajkbqpeq8n6dmql4zq.png)
![](https://habrastorage.org/getpro/habr/post_images/509/dc9/bde/509dc9bde69347ecbe0c21ff2973d7e7.jpg)
• Epic Games выиграла в суде у Google
• АБ тесты и подводные камни при их автоматизации
• Разметить всё: как мы настроили систему логирования в приложении каршеринга
• Социальная торговая платформа Maka привлекает $2.65 млн для упрощения покупок в Африке
• Маркетологи в мобайле: Александр Багринцев (Sunlight)
• DistroKid запустил приложение для Android
• Лучшая мобильная игра в Game Awards 2023
• Как я потерял $2,85 млн и решил создать приложение для массового инвестирования
•
![](https://habrastorage.org/files/377/ae0/333/377ae0333d0f4b7b97307c9eea5ee21a.gif)
![](https://habrastorage.org/getpro/habr/post_images/853/812/9f5/8538129f5e7b404a720121cb9c3814db.jpg)
• Удаленно следим за состоянием газового котла
• Зачем на камере и видеорегистраторе нужен криптоблок и как его восстановить
• Локальные GPT нейронный сети — проверяем на адекватность аналоги ChatGPT, запускаемые на домашнем компьютере
• Осваиваем чип с Arm Cortex-M85
• MedLM: генеративный ИИ для индустрии здравоохранения
• Microsoft выпустила модель Phi-2, которая «может работать на мобильном устройстве»
← Предыдущий дайджест. Если у вас есть другие интересные материалы или вы нашли ошибку — пришлите, пожалуйста, в почту.