Прежде чем перейти к статье, хочу вам представить, экономическую онлайн игру Brave Knights, в которой вы можете играть и зарабатывать. Регистируйтесь, играйте и зарабатывайте!
В новом выпуске усложнение iOS и избавление от рекурсии в Kotlin, cимволизация логов и новые фичи на старых Android, многомодульность на Flutter, опыт прохождения собеседования в Google, как много языков может влезть в одного программиста и многое другое!
Подписывайтесь на на наш Telegram-канал Mobile Insights, где еще больше материалов для мобильных разработчиков. А в IT Insights — много об интересном коде и технологиях.
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 — много об интересном коде и технологиях.
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, которая «может работать на мобильном устройстве»
← Предыдущий дайджест. Если у вас есть другие интересные материалы или вы нашли ошибку — пришлите, пожалуйста, в почту.