Мобильная разработка за неделю #518 (4 — 10 декабря)

В нашем новом дайджесте устройство протокола iMessage и новое приложение Beeper Mini (которое уже не работает), бесплатный Xcode Cloud, новый ИИ от Google в Android, создание простого калькулятора, интернационализация от i до n, конец плоского дизайна и многое другое.

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

zkkumfobmyhxaqt6ldff-pyuune.png

f1930ac4945596eb9707bc7a01bc5bdc.pngiOS

• Использование on-demand ресурсов для безопасного хранения ключей API в iOS-приложениях
• Как устроен протокол iMessage
• Swift Utilities — Интеграция SwiftUI в UIKit
• Идеальный REST клиент iOS
• Swift Utilities — Работа со SwiftData в Background
• Разработчики будут бесплатно получать 25 часов Xcode Cloud в месяц
• Поваренная книга SwiftUI: создание кастомного модификатора представления + создание сетки представлений
• 377ae0333d0f4b7b97307c9eea5ee21a.gifBuilding Robust iOS Applications: The Art of Modularization
• 377ae0333d0f4b7b97307c9eea5ee21a.gifApple«s use of AppKit, Catalyst, Swift and SwiftUI in macOS Sonoma
• 377ae0333d0f4b7b97307c9eea5ee21a.gifUsing on-demand resources for securely storing API keys in iOS apps
• 377ae0333d0f4b7b97307c9eea5ee21a.gifObservable Architecture Beta
• 377ae0333d0f4b7b97307c9eea5ee21a.gifEasy app walkthroughs with MarkWalkthrough
• 377ae0333d0f4b7b97307c9eea5ee21a.gifAsyncStream in the real world: wrapping an Apple Photos callback
• 377ae0333d0f4b7b97307c9eea5ee21a.gifFrom viewWillAppear to viewIsAppearing — Perfecting Your iOS View Transitions
• 377ae0333d0f4b7b97307c9eea5ee21a.gifTesting private functions in Swift
• 377ae0333d0f4b7b97307c9eea5ee21a.gifFuture-Proofing Your Projects for Swift 6: A Comprehensive Guide
• 377ae0333d0f4b7b97307c9eea5ee21a.gifSwiftUI for Jetpack Compose developers — State
• 377ae0333d0f4b7b97307c9eea5ee21a.gifEasily Change the Language of the Simulator to Test Your App
• 377ae0333d0f4b7b97307c9eea5ee21a.gifSwift: Simulating Inheritance in structs with the Power of enums
• 377ae0333d0f4b7b97307c9eea5ee21a.gifAre You Truly Adopting MVVM? Or Just a Badly Shaped MVP?
• 377ae0333d0f4b7b97307c9eea5ee21a.gifSFSafariViewController in SwiftUI: Open webpages in-app
• 377ae0333d0f4b7b97307c9eea5ee21a.gifMastering MapKit in SwiftUI. Customizations.
• 377ae0333d0f4b7b97307c9eea5ee21a.gif7 Steps to Add Chat to a SwiftUI App Using Firebase
• 377ae0333d0f4b7b97307c9eea5ee21a.gifHandling new Enum cases in Swift. UnknownCaseDecodable protocol
• 377ae0333d0f4b7b97307c9eea5ee21a.gifDistributing a Swift Macro using CocoaPods
• 377ae0333d0f4b7b97307c9eea5ee21a.gifGPT«s specifically for Apple Frameworks
• 377ae0333d0f4b7b97307c9eea5ee21a.gifMastering in SwiftUI
• 377ae0333d0f4b7b97307c9eea5ee21a.gifStop abusing value type
• gtu1iaz0-ajkbqpeq8n6dmql4zq.pngHow To Create A Tic Tac Toe Game in Xcode 15 (SwiftUI)
• gtu1iaz0-ajkbqpeq8n6dmql4zq.pngInteractive Widgets — Intents
• gtu1iaz0-ajkbqpeq8n6dmql4zq.pngSwiftUI Complex Hero Animation With Synchronized ScrollViews
• gtu1iaz0-ajkbqpeq8n6dmql4zq.pngCreate your first app with SwiftUI and SwiftData
• gtu1iaz0-ajkbqpeq8n6dmql4zq.pngSwift Data Many to Many relationships
• gtu1iaz0-ajkbqpeq8n6dmql4zq.pngHow To Create And Use A Card View in Xcode 15 (SwiftUI)
• 96716bcb926741e79bb1c284a88083ca.pngColorfulX: градиенты с Metal
• 96716bcb926741e79bb1c284a88083ca.pngIMSwitch: графические переключатели для SwiftUI

e1a3cf2a8b65a0da69bbdd5c0ad040fe.pngAndroid

• Gemini — новая основа для искусственного интеллекта в Android
• Готовим конфигурацию Android-приложения с помощью Dynamic Proxy и рефлексии
• Создание простого калькулятора в Android Studio
• Улучшение производительности Android-приложения NordVPN с помощью плагина Compose Compiler
• Переход на Gradle 8 Android проекта
• Как интегрировать Dynamic Features в Android-приложение
• Вопросы с собеседований: для чего нужны сервисы в Android-приложении
• 377ae0333d0f4b7b97307c9eea5ee21a.gifIdiomatic Kotlin: Merge Two Strings Alternately + Benchmarks
• 377ae0333d0f4b7b97307c9eea5ee21a.gifImplementing an animated column section header using Jetpack Compose
• 377ae0333d0f4b7b97307c9eea5ee21a.gifImproving NordVPN«s Android performance using the Compose Compiler plugin
• 377ae0333d0f4b7b97307c9eea5ee21a.gifKoin, Ktor & Paging in KMM
• 377ae0333d0f4b7b97307c9eea5ee21a.gifGlobal Google Developer Experts Share Their Favorite Tools and Advice for New Developers
• 377ae0333d0f4b7b97307c9eea5ee21a.gifCustom Pull to Refresh in Jetpack Compose
• 377ae0333d0f4b7b97307c9eea5ee21a.gifFirst look at AndroidX Bluetooth
• 377ae0333d0f4b7b97307c9eea5ee21a.gifBetter Previews in Jetpack Compose, Tips and Tricks
• 377ae0333d0f4b7b97307c9eea5ee21a.gifKotlin Delegation: A Powerful Code Organization Technique for Reusability and Maintainability
• 377ae0333d0f4b7b97307c9eea5ee21a.gifMastery on Invoke Kotlin
• 377ae0333d0f4b7b97307c9eea5ee21a.gifClean Architecture for Android MVI
• 377ae0333d0f4b7b97307c9eea5ee21a.gifStealing API keys — Security in Android
• 377ae0333d0f4b7b97307c9eea5ee21a.gifAndroid Interview Cheat Sheet
• 377ae0333d0f4b7b97307c9eea5ee21a.gifLive Mosaic at Droidcon London 2023
• 377ae0333d0f4b7b97307c9eea5ee21a.gif100% Flakiness-free UI test automation with Kaspresso and Allure Testops
• 377ae0333d0f4b7b97307c9eea5ee21a.gifKSP2 Preview: Kotlin K2 and Standalone Source Generator
• 377ae0333d0f4b7b97307c9eea5ee21a.gifImprove Your Android App Performance With Baseline Profiles
• 377ae0333d0f4b7b97307c9eea5ee21a.gifKotlin under the hood: The nuances of using annotations in Kotlin
• gtu1iaz0-ajkbqpeq8n6dmql4zq.pngEnhancing Jetpack Compose app performance
• gtu1iaz0-ajkbqpeq8n6dmql4zq.pngLatest Updates to Google Play, New APIs in Jetpack Compose, and more dev news!
• gtu1iaz0-ajkbqpeq8n6dmql4zq.pngmutableStateOf () VS. mutableIntStateOf () — Auto-Boxing Explained
• gtu1iaz0-ajkbqpeq8n6dmql4zq.pngIs it okay to use runBlocking?
• 96716bcb926741e79bb1c284a88083ca.pngTusky: Android-клиент для Mastodon
• 96716bcb926741e79bb1c284a88083ca.pngCountryCP: выбор страны в Compose

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

• Flutter Web умер. Да здравствует Flutter Web
• Инструкция: как быстро настроить GitLab CI/CD на Flutter-проекте
• Как я стал Google Developer Expert по Flutter
• PWA vs. нативные приложения: когда и как выбрать?
• 377ae0333d0f4b7b97307c9eea5ee21a.gifWelcome Fleet with Kotlin Multiplatform Tooling
• 377ae0333d0f4b7b97307c9eea5ee21a.gifKotlin Multiplatform Development Roadmap for 2024
• 377ae0333d0f4b7b97307c9eea5ee21a.gifFlutter GameDev with Casual Games Toolkit & Flame
• 377ae0333d0f4b7b97307c9eea5ee21a.gifHandling Asynchronous Data in Flutter with Generic Classes
• 377ae0333d0f4b7b97307c9eea5ee21a.gifBuilding a Spreadsheet Interface in Flutter: A Quick Guide
• 377ae0333d0f4b7b97307c9eea5ee21a.gifWhy Flutter is «NOT» the Best Mobile App Development Tool
• 377ae0333d0f4b7b97307c9eea5ee21a.gifHow to implement push notifications in Kotlin Multiplatform
• 377ae0333d0f4b7b97307c9eea5ee21a.gifCalling Platform-Specific Dependencies in Kotlin Multiplatform
• 377ae0333d0f4b7b97307c9eea5ee21a.gifSafeguarding Your Flutter Apps
• gtu1iaz0-ajkbqpeq8n6dmql4zq.pngFlutter GameDev with Casual Games Toolkit & Flame
• gtu1iaz0-ajkbqpeq8n6dmql4zq.pngPractical Functional Programming in Dart and Flutter
• 96716bcb926741e79bb1c284a88083ca.pngFreeToGame: KMP-проект для Android, iOS, Desktop и Wear OS

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

• Интернационализация от i до n: как мы переводим интерфейсы в Фантехе Яндекса
• Мода на плоский дизайн наконец-то прошла?
• 10 тёмных паттернов в UX-дизайне и как их избежать
• 9 советов,  которые облегчат путь до мидла
• Операционные системы — Как это работает
• Как зарабатывать на обучении в IT?
• TypeScript убил JavaScript?
• Microsoft открыла Terminal Chat
• 377ae0333d0f4b7b97307c9eea5ee21a.gifUI/UX Design: The Fastest Way to Make Your Designs More Interesting
• 377ae0333d0f4b7b97307c9eea5ee21a.gifHow Google takes the pain out of code reviews, with 97% dev satisfaction
• 377ae0333d0f4b7b97307c9eea5ee21a.gifHow Uber Computes ETA at Half a Million Requests per Second
• 377ae0333d0f4b7b97307c9eea5ee21a.gifHow psychology design products that win customers
• 377ae0333d0f4b7b97307c9eea5ee21a.gifData Quality Score: The next chapter of data quality at Airbnb
• 377ae0333d0f4b7b97307c9eea5ee21a.gifAre your engineering «best practices» just developer dogmas?
• 377ae0333d0f4b7b97307c9eea5ee21a.gifYour GitHub pull request workflow is slowing everyone down
• 377ae0333d0f4b7b97307c9eea5ee21a.gifHow to Build a Personal Brand as a Developer
• 377ae0333d0f4b7b97307c9eea5ee21a.gifHow the first gen iPod was reverse engineered to run Rockbox

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

• Как продвигать приложение детской одежды в VK Рекламе и Яндекс Директе — кейс Gulliver Market и Rocket10
• Дизайн А/Б-тестов
• 5 прогнозов для мобильных приложений 2024
• Discord провел редизайн мобильного приложений с акцентом на сообщения
• Beeper Mini — новое приложение для переписки в iMessage с Android (и уже не работает)
• Bumble For Friends использует ИИ для написания первого сообщения
• Animate Anyone приближает создание видео-дипфейков
• Самые скачиваемые и зарабатывающие приложения в России в ноябре 2023
• Маркетологи в мобайле: Александра Мареева («Спортмастер»)
• Capsule: новости на основе ИИ и человеческих редакторов
• Threads обгоняет X
• 377ae0333d0f4b7b97307c9eea5ee21a.gifFrance in three charts: Installs, sessions, and retention rates
• 377ae0333d0f4b7b97307c9eea5ee21a.gifHow to implement gamification and enhance your app«s user experience

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

• О троице, которая хакнула настоящий поезд. Даже целых 30 поездов
• Технологии прошлого и настоящего: как я сделал Nixie Clock с самодельным драйвером на ESP8266
• Создаём сортировщик деталей Lego Technic, распознающий объекты в реальном времени
• Pimento использует ИИ для превращения брифов в креативные мудборды
• Apple выпустила библиотеки машинного обучения для Apple Silicon
• Google выпустил AlphaCode 2 на основе Gemini
• Amazon выпустил Q, своего помощника с искусственным интеллектом
• Рынок смарт-часов восстанавливается
• gtu1iaz0-ajkbqpeq8n6dmql4zq.pngMLOps Course — Build Machine Learning Production Grade Projects

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

© Habrahabr.ru