Мобильная разработка за неделю #558 (30 сентября — 6 октября)

В новом дайджесте ускорение запуска приложений и спойлер-эффект кна Swift, сборщик метрик Android-проекта и рисование звезд, замена Firebase, идеальный встраиваемый язык, приложение для заметок, которое не стремится сделать вас более продуктивным и многое другое. Подключайтесь!

urcfnoxehiezsrksw7liaa01riu.png

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

f1930ac4945596eb9707bc7a01bc5bdc.pngiOS

• Почему ваша задача выполняется в главном потоке?
• Как ускорить запуск iOS-приложения в 2 раза с помощью Network Instrument
• Быстрый доступ к VPN в iOS с помощью App Intents
• Как реализовать спойлер-эффект как в Telegram на Swift?
• Как в Duolingo удалили 10,000 строк кода с помощью Reaper
• Предотвращаем порчу кодовой базы в iOS-проектах с помощью прекоммит хуков
• Как мы запекали 3D-пиццу
• Есть ли ORM круче SwiftData
• Макросы спустя полгода: не все так гладко
• DriverKit: гоняем данные по проводу без мам, пап и MFi
• HomePod с дисплеем, homeOS и Apple Intelligence выйдет на рынок в следующем году
377ae0333d0f4b7b97307c9eea5ee21a.gifServer side Live Activities guide
377ae0333d0f4b7b97307c9eea5ee21a.gifGetting Started with Hummingbird
377ae0333d0f4b7b97307c9eea5ee21a.gifSwiftUI Animations
377ae0333d0f4b7b97307c9eea5ee21a.gifUsing the #expect macro for Swift Testing
377ae0333d0f4b7b97307c9eea5ee21a.gifUsing PreviewModifier for Quick Xcode Previews
377ae0333d0f4b7b97307c9eea5ee21a.gifSwiftUI: Configurable Widget to Let Our User Choose!
377ae0333d0f4b7b97307c9eea5ee21a.gifMastering container views in SwiftUI. Sections.
377ae0333d0f4b7b97307c9eea5ee21a.gifBlending colors dynamically with the mix modifier
377ae0333d0f4b7b97307c9eea5ee21a.gifMastering Actors and Concurrency — Best Practices
377ae0333d0f4b7b97307c9eea5ee21a.gifImplementing Shared With You in SwiftUI
377ae0333d0f4b7b97307c9eea5ee21a.gifFixing Bitcode Issues in Xcode 16: How to Resolve Invalid Executable Errors When Uploading iOS Builds
377ae0333d0f4b7b97307c9eea5ee21a.gifHow XcodeGen reduced the TDD in Swift codebase by 58,000+ lines
377ae0333d0f4b7b97307c9eea5ee21a.gifHow to Perfectly Merge SwiftUI and UIKit Navigation: A Step-by-Step Guide
377ae0333d0f4b7b97307c9eea5ee21a.gifHow to Use Accessibility Inspector for iOS Apps
377ae0333d0f4b7b97307c9eea5ee21a.gifCoreML in Action: From Concept to Code
377ae0333d0f4b7b97307c9eea5ee21a.gifS.O. L.I.D. in Swift
gtu1iaz0-ajkbqpeq8n6dmql4zq.pngRecreate Apple«s Stopwatch: Mastering Millisecond Precision in SwiftUI
gtu1iaz0-ajkbqpeq8n6dmql4zq.pngВидео SwiftCraft 2024
gtu1iaz0-ajkbqpeq8n6dmql4zq.pngAlternative App Icons in Xcode 16
gtu1iaz0-ajkbqpeq8n6dmql4zq.pngNew in Xcode16: the macro @Previewable
gtu1iaz0-ajkbqpeq8n6dmql4zq.pngSwiftUI — Support Prior iOS Versions — Backward Compatibility
gtu1iaz0-ajkbqpeq8n6dmql4zq.pngEmbedded Swift and 16×16 LED Matrix Animation Overview
gtu1iaz0-ajkbqpeq8n6dmql4zq.pngPreview Updates in Xcode 16
gtu1iaz0-ajkbqpeq8n6dmql4zq.pngAuto Scrolling Infinite Carousel — iOS 18
96716bcb926741e79bb1c284a88083ca.pngLinksKit — удобное представление SwiftUI для отображения общих ссылок
96716bcb926741e79bb1c284a88083ca.pngSymSpellSwift — коррекция орфографии и нечеткий поиск
96716bcb926741e79bb1c284a88083ca.pngSwiftUI Flow Layout — потоковый макет на SwiftUI

e1a3cf2a8b65a0da69bbdd5c0ad040fe.pngAndroid

• Как устроен сборщик метрик Android-проекта
• Рисуя звезды: рисование с помощью Compose и Canvas
• Koin: как сделать свой DI за 10 минут
• Шлём биткоины с Android (и смотрим транзакции)
• Новый подход к безопасному управлению состояниями в Kotlin-приложениях
• Создание уведомлений на языке Kotlin
• Gemini Nano теперь доступен на Android в экспериментальном режиме
• Что такое Hilt
377ae0333d0f4b7b97307c9eea5ee21a.gifImageVector vs painterResources — Under the hood
377ae0333d0f4b7b97307c9eea5ee21a.gifWhy fullMode hates Gson so much?
377ae0333d0f4b7b97307c9eea5ee21a.gifOptimized Image Loading for Compose and Kotlin Multiplatform
377ae0333d0f4b7b97307c9eea5ee21a.gifDemystifying the Android Build Process: A Deep Dive into APK Generation
377ae0333d0f4b7b97307c9eea5ee21a.gifQuick introduction to Large Language Models for Android developers
377ae0333d0f4b7b97307c9eea5ee21a.gifHow to Ripple Outside of Compose Material
377ae0333d0f4b7b97307c9eea5ee21a.gifOur journey with compose animations
377ae0333d0f4b7b97307c9eea5ee21a.gifA Beginner«s Guide to Building Android from AOSP
377ae0333d0f4b7b97307c9eea5ee21a.gifExploring the Declarative Nature of Jetpack Compose
377ae0333d0f4b7b97307c9eea5ee21a.gifStartup Profiles: The Quick Fix for Painfully Slow App Startups
377ae0333d0f4b7b97307c9eea5ee21a.gifJetpack Compose Tutorials and Playground
377ae0333d0f4b7b97307c9eea5ee21a.gifUsing kotlin-inject in a Kotlin/Compose Multiplatform project
377ae0333d0f4b7b97307c9eea5ee21a.gifHow to bring your AI Model to Android devices
377ae0333d0f4b7b97307c9eea5ee21a.gifA quick glance at AppWidget
377ae0333d0f4b7b97307c9eea5ee21a.gifImplementing Type-Safe Multi-Module Nested Navigation in Bottom Navigation using Jetpack Compose
377ae0333d0f4b7b97307c9eea5ee21a.gifWeather App For Android Wear OS Using Compose
377ae0333d0f4b7b97307c9eea5ee21a.gifHow to «Safely» Migrate from Retrofit to Ktor
gtu1iaz0-ajkbqpeq8n6dmql4zq.pngIntegrating the Gemini API in Android
gtu1iaz0-ajkbqpeq8n6dmql4zq.pngHow to Navigate From ViewModels With a Custom Navigator
gtu1iaz0-ajkbqpeq8n6dmql4zq.pngAndroid Application with Microsoft Identity Platform
gtu1iaz0-ajkbqpeq8n6dmql4zq.pngApplying the Factory Method and Abstract Factory Patterns in Kotlin
96716bcb926741e79bb1c284a88083ca.pngYourSpace — семейный локатор и общение

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

• Как Dart VM выполняет твой код?
377ae0333d0f4b7b97307c9eea5ee21a.gifInspektify: KMP network inspection library
377ae0333d0f4b7b97307c9eea5ee21a.gifHotwire Native
377ae0333d0f4b7b97307c9eea5ee21a.gifA Simple way to organize your code in Flutter
377ae0333d0f4b7b97307c9eea5ee21a.gifAutomate Your Flutter Environment Setup: One Script to Configure It All
377ae0333d0f4b7b97307c9eea5ee21a.gifRealistic folder opening animation in Flutter
377ae0333d0f4b7b97307c9eea5ee21a.gif2D Game in Flutter using Flame
gtu1iaz0-ajkbqpeq8n6dmql4zq.pngMultiplayer drawing with Flutter and Serverpod. Full tutorial.
96716bcb926741e79bb1c284a88083ca.pngTexty — текст с различными стилями, эффектами и анимацией для Compose Multiplatform

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

• Чем можно заменить Firebase — Обсуждение на Reddit
• 10 SDK, чтобы улучшить ваше мобильное приложение
• 3 совета для улучшения читабельности кода
• Разработчики получают мало пользы (если вообще что-то получают) от ИИ-помощников
• Aspect Build получил $3.85M на улучшение работы с Bazel
• Самые высокооплачиваемые вакансии сентября в сфере разработки приложений
• Уволить нельзя терпеть
• Lua — идеальный встраиваемый язык
• ⅔ российских компаний используют ИТ-шеринг
377ae0333d0f4b7b97307c9eea5ee21a.gifShadow Calls and Circuit Breakers: Uber«s Safe Approach to Mobile Network API Migration
377ae0333d0f4b7b97307c9eea5ee21a.gifIt«s hard to write code for computers, but it«s even harder to write code for humans
377ae0333d0f4b7b97307c9eea5ee21a.gifDon«t Be Afraid to Re-Invent the Wheel
377ae0333d0f4b7b97307c9eea5ee21a.gifEvolving GitHub Issue
377ae0333d0f4b7b97307c9eea5ee21a.gifA Local-First Case Study
377ae0333d0f4b7b97307c9eea5ee21a.gifWhy do programmers need private offices with doors?
377ae0333d0f4b7b97307c9eea5ee21a.gifFrom Manual Pain to Automation Chaos: Finding the Right Balance
377ae0333d0f4b7b97307c9eea5ee21a.gifGiving depth to your App Icons
gtu1iaz0-ajkbqpeq8n6dmql4zq.pngThe reality of the developer job market with ex-Googler YK Sugi

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

• Самые скачиваемые и зарабатывающие приложения в России в сентябре 2024
• Новый запрос на обмен контактами в iOS 18 стал угрозой для новых социальных приложений
• Epic подала в суд на Samsung и Google
• Napkin — приложение для заметок, которое не стремится сделать вас более продуктивным
• Новое приложение Wordy поможет вам учить язык во время просмотра фильмов и шоу
• Проектируем А/Б-эксперименты грамотно

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

• Когда в автомобиле нет системы GNSS…
• Новый подход к безопасному управлению состояниями в Kotlin-приложениях
• Как в Купере масштабировали машинное обучение и что из этого получилось
• Ищем потерявшихся питомцев с помощью нейросетей
• OpenAI запускает «Холст» для программирования с ChatGPT
• Poolside, занимающийся ИИ-программированием, привлек $500 млн
• Nvidia открыла новую ИИ-модель, готовую соперничать с GPT-4
• Ello обучает детей чтению и с помощью ИИ позволяет детям создавать свои собственные истории

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

© Habrahabr.ru