Android
• Routine Tracker: календарь-планировщик для Android
• Собираем грабли при профилировании Android-приложений
• Google I/O 2024 пройдет 14 мая
• Appteka: альтернативный магазин приложений для Android
• Собеседование по Kotlin
• Ultron — фреймворк для тестирования Android UI и Compose
• Разработка под Android в 2024 году
• Animations with Lookahead in Jetpack Compose
• Adding Ktlint to your Android project
• Optimize App Performance By Mastering Stability in Jetpack Compose
• The Ktor Roadmap for 2024
• Customize Clickables and Ripples
• Stressing the JVM GC on Android
#android
Привет, на связи Podlodka Teamlead Crew — регулярная онлайн-конференция для тимлидов!
Помните поговорку про семь раз отмерь? В IT для этого нужна не линейка, а метрики.
Им и посвящён новый сезон. Мы не случайно отважились на тему, которая разжигает много споров. Не так важно, где вы — в лагере сторонников или ярых противников, приходите — будет горячо! Мы пригласили экспертов из известных компаний, чтобы похоливарить на славу и попрактиковаться читать и использовать метрики в работе.
Вместе с топовыми спикерами обсудим спорные вопросы:
❓ Существуют ли базовые метрики для тимлида? Дмитрий Симушев из Авито поделится своим набором и научит им пользоваться.
❓ Как составить план внедрения и масштабирования метрик? Побрейнштормим и поймём, что нужно учесть, если раньше метрик в проекте не было. Определим, какие сложности ждут при раскатке опыта на другие команды.
❓ Как выявить и обезвредить проблемные метрики? Наталья Петровская из Customertimes проведёт воркшоп, на реальных примерах продемонстрирует, как обнаруживать сложности и грамотно от них избавляться.
❓ Как анализировать метрики Cycle Time, Feature Time и Lead Time. Никита Дубко из «Яндекс» расскажет и покажет, как использовать графики и выстраивать процессы работы с ними.
🎰 Бонус: дебаты с Филиппом Дельгядо и Павлом Филоновым. Метрики переоценены или без них невозможно работать? Эксперты разойдутся в противоположные стороны и докажут вам и то, и другое. Выводы сделаете сами 🙂
Стартуем 1 апреля. Билеты уже на сайте: https://podlodka.io/tlcrew
Ранним пташкам — скидки!Реклама. ИП Толстая Елена Петровна ИНН:507503278104, erid:2SDnjcAdMEp
Разработка, управляемая рутиной
Подборка всех материалов за прошлую неделю - моменты неотзывчивости и автоматизация рутины, правила линтера и легендарный мобильный GPU, как и где практиковаться начинающему мобильному разработчику, исследование приложений с подпиской 2024 и многое другое. Заходите!
Видео и подкасты за неделю:
• (iOS Ru)
Моменты неотзывчивости iOS-приложений: как найти и исправить
• (iOS Ru)
Swift-уроки: cоздание горизонтального меню с индикатором
• (iOS En)
From Slow to Fast: Profiling SwiftUI Applications for Peak Performance
• (iOS En)
SwiftUI Performance Optimisation: How to manage Data Flow and UI Updates in your iOS and macOS apps
• (iOS En)
MapKit with SwiftUI - Regions, Markers and Annotations and CameraPosition
• (iOS En)
MapKit with SwiftUI - Map Destination Persistence and MockData
• (iOS En)
How to get started with Swift Macros
• (iOS En)
Paginating SwiftData
• (And Ru)
Собеседование по Kotlin (все собеседования)
• (And Ru)
Ultron — фреймворк для тестирования Android UI и Compose
• (And Ru)
Собираем грабли при профилировании Android-приложений
• (And En)
Now in Android: 100 - Android 15 DP 1, Stable Studio Iguana, Cloud Photo Picker, and more
• (And En)
What’s new in Android Studio Iguana
• (And En)
Google for Games Developer Summit 2024
• (And En)
How to Create a Document Scanner App with MLKit
• (And En)
If You Think THIS Is a Best Practice, You're WRONG in 99% of the Cases
• (And En)
The Missing Library of the Compose Multiverse
• (And En)
Making Data Visualizations More Accessible
• (And En)
Imperative, declarative, object oriented, functional: four of a Kotlin kind
• (Crs Ru)
Коллекции во Flutter
• (Dev Ru)
Как принимать решения, строить команды и выбирать инструменты разработки — Павел Щедухин (Ozon Tech)
• (Dev Ru)
Публичное собеседование по System Design
• (Dev Ru)
Мобильная инфраструктура. Взгляд изнутри
• (Dev Ru)
BDUI – удовольствие или боль?
• (Dev Ru)
BDUI на 100%: управляем шиммерами с бэкенда
• (Dev En)
Back End Developer Roadmap 2024
• (Anl Ru)
Аналитика нового продукта «под ключ»
Что вы интересного посмотрели/послушали про разработку на этой неделе? 🌐 @AppFiles
У Apple вышел Embedded Swift для Playdate. Это такая портативная игровая консоль с ручкой (Если что, это не эвфемизм - у нее правда есть ручка, которую можно крутить). Работает она на Cortex M7 с 1-битным дисплеем с разрешением 400х240. Вообще игры для нее пишут на C и Lua- первый для скорости, второй для быстроты. Но вот встраиваемый Swift сочетает высокоуровневую эргономику с низкоуровневой производительностью, а также обеспечивая гарантии безопасности памяти. Так что а) если вы ищите интересный пет-проект, то вот прямо вообще кайф б) может Swift наконец и на Android заработает? ☺️
Разработка
• Swift Playdate Examples: примеры разработки игр для Playdate на Swift
• Вопросы с собеседований: Что такое качественный код
• Что такое состояние гонки (race condition)
• Как искать отличных Senior-инженеров
• Stashpad запускает блокнот для разработчиков с совместной работой
• В 2023 году Google выплатил $10 млн за поиск уязвимостей
• Первый легендарный мобильный GPU: каким был PowerVR MBX Lite? Пишем игру-демку про «жигули» с нуля
• Как и где практиковаться начинающему мобильному разработчику
• Winning a hackathon, losing my sanity
• Why software projects fail
Маркетинг
• Вы можете сделать пейвол в алерте. Но, вероятно, не стоит.
• Как делать успешные мобильные приложения. Разбираем пример торговой сети в Казахстане
• Abysmal revenue stats of 30K mobile apps show why devs keep pushing for subs
Кроссплатформа
• Интеграция нативных SDK во Flutter-приложение
• Leveraging Key-Value Observing in Kotlin Multiplatform for iOS
• Slint v1.5 - a modern, declarative GUI toolkit - released with Android support
• keamansaryyev/lan-file-sharing-app-using-only-dart-and-flutter-92529a1e6df0">I made LAN file sharing app using only Dart and Flutter
iOS
• Swift Translate: автоматический перевод String Catalog
• Understanding visionOS
• Using @_silgen_name to call private Swift code and improve build times
• Tips and Considerations for Using Lazy Containers in SwiftUI
• guycohendev/local-spm-mastering-modularization-with-swift-package-manager-xcode-15-e37b14c36199">Local SPM — Mastering Modularization with Swift Package Manager
#ios
Discord открывает свою платформу для разработчиков. С 18 марта все разработчики Discord получат доступ к новому Embedded App SDK, который позволит им создавать специальные встроенные приложения. В приложениях будут подписки и одноразовые платежи и если вам кажется, что это все фигня - Discord для детей и вообще несерьезно - то подумайте о каком-нибудь Snapchat, где линзы зарабатывают миллионы, или, прости Господи, Roblox, который выплатил разработчикам под миллиард.
Разработка
• Discord открывает SDK для разработки встроенных игр и приложений
• Microsoft открывает бесплатный доступ к GPT-4 Turbo в Copilot
• How to find great senior engineers
Маркетинг
• Приложения с подпиской 2024 — отчет RevenueCat
• Google Play анонсирует новые функции для игр
• Как персонализация на основе ИИ выведет продвижение мобильных приложений на новый уровень
• Turning organic success into long-term revenue
Кроссплатформа
• Как быстро получать данные из ОС Аврора через интерфейс D-Bus во Flutter-приложении
• harpreetkaurbains/how-to-manage-keystore-paths-in-flutter-android-651e66a8f00c">How to manage Keystore Paths in Flutter (Android)
• Goodbye PWA, Hello PWA — Apple And Progressive Web Apps
iOS
• Разработка, управляемая тестами (TDD), для исправления ошибок
• jpmtech/using-apples-openapi-generator-to-make-and-mock-network-calls-in-swiftui-0644fd3993b8">Using Apples OpenAPI Generator to Make and Mock Network Calls in SwiftUI
• ragnorak-dev/navigation-between-modules-in-ios-3cd4f349a3f4">Navigation between modules in iOS
• Do you know what view.layoutIfNeeded() actually does?
• From Slow to Fast: Profiling SwiftUI Applications for Peak Performance - SwiftUI Testing Tutorial
#ios
Приложения с подпиской 2024 — отчет RevenueCat
У RevenueCat вышло ключевое исследование мобильных подписок - с цифрами, бенчмарками, мнениями и всем необходимым. Вот некоторые цифры.
1. В среднем 1.7 % скачивающих превращается в платящих пользователей в первые 30 дней, что немного больше, чем в прошлом году. Разница между нижним квартилем (.6%) и верхним квартилем (4.2 %) по-прежнему поразительна.
2. Большинство пользователей начинает триал в течение 24 часов после загрузки приложения, при этом по количеству немедленных стартов лидируют Утилиты (86.0%) и Бизнес (85.1%).
3. В этом году коэффициент конверсии из пробной версии снизился до 37.3% (по сравнению с 40.5% в прошлом году), что намекает на изменения в поведении пользователей.
4. За последний год как 14-дневный, так и 60-дневный Realized Lifetime Value (RLTV) значительно вырос, причем смешанный показатель D14 RLTV по всем магазинам вырос с $0.06 до $0.08, а D60 - с $0.08 до $0.1. Североамериканский 14-дневный RLTV в 4 раза превышает среднемировой показатель - $0.35 по сравнению с $0.08.
5. В среднем только 17% приложений достигают ежемесячного дохода в $1 тыс, но дальше уже проще - из них 59% дальше достигают $2.5 тыс. и уже 60% из них достигают $5 тысяч.
Android
• Прекратите спорить в Code Review — начните внедрять правила линтера
• Чистка Android-проекта для уменьшения размера APK, ускорения сборки и улучшения опыта разработки
• Кот в мешке: мастерство обработки ошибок внешних ключей SQLite
• State of Dependency Management in Android Studio
• Hilt, ViewModels & Assisted Injection
• A Weekend AI Project: Running LLaMA and Gemma AI Models on the Android Phone
• Monetizing Marvels: A Developer’s Guide to In-App Purchases on Android
#android
Apple разрешает распространение приложений с сайтов
Теперь благонадежные разработчики смогут распространять приложения с сайта.
1. Необходимо 2 года "хорошего поведения" в App Store (то есть Fortnite сразу нет 😀).
2. Необходим 1 миллион установок за предыдущий год.
3. Каждая установка за следующий год свыше 1 миллиона будет стоить €0.50 (Core Technology Fee).
4. Apple предоставит авторизованным разработчикам доступ к API, которые облегчат распространение их приложений через Интернет, интеграцию с системными функциями, резервное копирование и восстановление приложений пользователей и многое другое.
Лучшее из вчерашнего в #Android - Прекратите спорить в Code Review. Начните обеспечивать выполнение с правилами Lint (сcылка)
Инженеры не предназначены для запоминания информации. Но мы точно можем создать инструменты, которые будут делать это за нас. Всякий раз, когда мы согласовываем стиль кода, архитектуру нашего проекта или вообще любые лучшие практики, которым мы должны следовать, чтобы обеспечить здоровую и поддерживаемую кодовую базу, нам нужно будет создать автоматизацию, которая будет их выполнять. Это и есть правила Lint.Поставьте 10х👍, если хотите русский перевод.
Android
• Google вводит новые сборы с разработчиков в рамках соблюдения DMA
• Hilt в многомодульный проект — пособие по внедрению зависимостей для новичков
• Разработка новостного приложения. Часть 3
• Legado: читалка для Android
• Новый Fused Orientation Provider обеспечивает получение точных данных об ориентации устройства
• Imperative, declarative, object oriented, functional: four of a Kotlin kind
• Stop Debating in Code Reviews. Start Enforcing with Lint Rules
• How to create Glovo-like main screen animation using Jetpack Compose
• michalankiersztajn/kotlin-design-patterns-abstract-factory-explained-79c6594d7a70">Kotlin Design Patterns: Abstract Factory Explained
• Designing your account deletion experience with users in mind
• Downloadable and Preloaded Fonts on Android
#android
DetailsPro - это no-code инструмент проектирования на основе SwiftUI.
• Создавайте с помощью таких представлений SwiftUI, как VStack, Text, Image и др.
• Создавайте реальные дизайны без написания кода
• Экспорт в Xcode, Swift Playgrounds и др.
Сайт: https://detailspro.app/
Платформа: iOS
По граблям шрифтов
Подборка всех материалов за прошлую неделю - изоляция в iOS, адаптация UI/UX для людей с проблемами зрения, сложно ли сейчас быть Богом программистом, весенние выпуски маркетологов в мобайле, сериализация и десериализация и многое другое. Заходите!
iOS
• Моменты неотзывчивости iOS-приложений: как найти и исправить
• Swift-уроки: cоздание горизонтального меню с индикатором
• Swift Tooling: Windows Edition
• chockenberry/112095424613859371">If you use UserDefaults in an app
• SwiftUI Tasks Blocking the MainActor
• Hacking Disneyland's App to fix a Freeze
• Store a codable model into AppStorage
• Oh Sh*t, My App is Successful and I Didn’t Think About Accessibility
#ios
Приложение Apple Sports не смогло опередить конкурентов
В феврале Apple выпустила специальное приложение для наблюдения за спортивными результатами и интересно понаблюдать за его успехом в App Store.
1. Особого успеха нет.
2. Apple Sports вышло 22 февраля, и этот день стал самым высоким по количеству загрузок — 118 тысяч. По сравнению со среднесуточным показателем для аналогичных приложений это более чем на 1311% выше. Но это продолжалось недолго. В пятницу количество загрузок упало до 92 тысяч, в субботу — до 57 тысяч, а к следующему понедельнику составило всего 11 тысяч, что составляет примерно 1/10 часть от начального показателя. С момента запуска Apple Sports загрузили в общей сложности 413 тысяч человек. Большая часть этих загрузок пришлась на первые четыре дня после релиза.
3. Сейчас количество загрузок Apple Sports упало ниже, чем у ведущих конкурентов, которые имеют от 4 до 10 тысяч загрузок в сутки.
И что: почему бренд, которому принадлежит App Store, не выигрывает? Все дело в заметности. В поиске Apple Sports едва заметен. Fotmob, приложение для футбольных результатов и один из главных конкурентов в этой группе, занимает органические позиции по более чем 2,300 ключевым словам и появляется на первой строчке почти для всех комбинаций футбола, футбольных матчей и результатов. Apple Sports не занимает ни одного места. Возможно, Apple по каким-то причинам сдерживает себя (хотя аналогичная ситуация была и у Apple Music Classical — бурный старт и резкое падение сразу после). Но в целом на данный момент оптимизация App Store — это не просто приятная мелочь, а скорее необходимость.
Где лучше хранить игру: на собственном сервере или в облаке?
Специалисты облачной платформы Yandex Cloud поговорили с несколькими GameDev- и анимационными студиями и узнали, для чего эти компании используют облачные сервисы при разработке продукта, сборе игровой аналитики, а также продвижении и организации киберспортивных турниров.
Читайте об этом в блоге Yandex Cloud, в первой и второй части статьи. Будет особенно полезно тем, кто только начинает изучать возможности работы с облачными платформами.
Google I/O пройдет 14 мая
В прошлом I/O длилась три дня, но последние два года это мероприятие длится только один день.
1. Будет "небольшая живая аудитория", а для всех остальных будет организована прямая трансляция.
2. I/O 2024 начнется с выступления Сундара Пичаи в Shoreline Amphitheater в Маунтин-Вью. За ним последует основной доклад для разработчиков и технические сессии.
3. Для тех, кто будет присутствовать лично, будет организован второй день live кодинга 15 мая.
4. Google сообщит программу и список сессий ближе к началу конференции. Онлайн-регистрация уже открыта и является бесплатной.
Android
• How to Drag and Drop using Modifier.dragAndDropSource/Target - Jetpack Compose
• Unit Testing Tutorial for Android: Getting Started
• Seven recipes to understand flows and asynchrony in Kotlin
#android
Весенние выпуски спецпроекта «Маркетологи в мобайле» от коллег из Rocket10 и Bidease!
Героини проекта рассказали про эффективное планирование, поделились лайфхаками и привычками для соблюдения гармоничного баланса в жизни и на работе и посоветовали, как можно начать карьеру в digital-маркетинге.
• Ольга Бигбашева из Rendez-Vous
• Ярослава Адаменко из М.Видео и Эльдорадо
• Василина Кузенко из «ИЛЬ ДЕ БОТЭ»
• Мария Миткевич из Мегамаркета
• Ася Загирова из Premier
• Арина Еремян из Пятёрочки.Доставки
Вперёд за инсайтами!
Android
• Kotest: мощный, элегантный и гибкий фреймворк для тестирования Kotlin
• ViewModel. События как состояние — это антипаттерн
• Fastlane для Android разработчиков
• Автоматизируем рутину в Android разработке: плагин для создания шаблонного кода на примере создания -api -impl модулей
• ANR in Android & its types
• A comprehensive guide to understand Kotlin Flows
• Going edge-to-edge with Compose without losing it
• The Night’s Watch: Safeguarding store operations
• Trim, Transcode, Concatenate: Your Guide to Media3 Editing Libraries
#android
Полезных каналов много не бывает. Поэтому, предлагаю обратить внимание и подписаться на один из таких – iOS / Swift Tips.
Там найдете различные туториалы, best practices, материалы для подготовки к собесам и другие полезности 💪
Вот несколько топовых материалов
👉 Swift iOS interview questions and answers
👉 Многопоточность в iOS-разработке
👉 Swift Concurrency Recipes
👉 Awesome iOS Dev Tools
Подписывайтесь: @swift_tips
С мест докладывают, что Apple тестирует использование ИИ в App Store Search Ads. Что там тестировать пока не особо понятно, потому что размещений и форматов там кот наплакал (впрочем, наверняка можно достраивать аудиторные и качественные показатели, что даже более интересно), но очевидно, что Apple опоздала в ИИ и теперь пытается догнать всеми доступными способами. Крайне интересно что все таки будет в iOS 18, которую обещают сделать “амбициозной и неотразимой”.
Разработка
• Как Google испортил свою открытую культуру и скомпрометировал свой продукт
• Using my new Raspberry Pi to run an existing GitHub Action
• How It All Goes Live: An Overview of Discord’s Streaming Technology
• How Khan Academy Scaled to 30 Million Users
Маркетинг
• Apple тестирует ИИ в своей рекламной платформе
Кроссплатформа
• Что нового во Flutter 3.19
• Работа с Data Assets во Flutter
• Building a Flutter SDK Part 2: A Deep Dive Into pub.dev
• a1rwulf/flutter-offline-playback-for-video-player-e6113c13ed34">Flutter: Offline playback for video_player
iOS
• Concurrency Recipes: проблемы Swift Concurrency
• Apple разрешает распространение приложений с сайтов
• Rendering System Images in SwiftUI
• Test-Driven Development (TDD) for bug fixes in Swift
• Exploring SwiftUI: Creating a Scope View using DragGesture
• Global actors in Swift
#ios
А вот и статья:
Правила линтинга выступают в качестве письменных соглашений об архитектуре кодовой базы и установленных лучших и необходимых практиках команды. Они помогают поддерживать последовательность кодовой базы, устраняя двусмысленности, защищают наши проекты от мелких ошибок и значительно ускоряют написание и рецензирование кода.
Благодаря Konsist мы на Android наконец-то получили долгожданный инструмент, который делает написание правил линтинга простым и доступным, не требующим сложного обучения. Инструмент, который, безусловно, является важной вехой в написании пользовательских правил, благодаря своей гениальной идее переосмыслить их как юнит-тесты.
Эта музыка будет вечной. Apple снова разблокировала учетную запись Epic Games. Пишут, что на этом настояли европейский регулятор - Apple отступилась, fEpic обещал не нарушать правила. Так что игровой магазин на iOS, похоже, все таки в скором времени будет. Вместе с Fortnite.
Разработка
• Я.Субботник по мобильной разработке
• Avito Analytics meetup
• The most important goal in designing software is understandability
• You’re not a weak developer if you don’t always show off your technical excellence
• Context-switching - one of the worst productivity killers in the engineering industry
Маркетинг
• Маркетологи в мобайле (Spring Edition): Арина Еремян (Пятёрочка.Доставка)
• You can put your app's paywall in an Alert. But you probably shouldn’t
Кроссплатформа
• Адаптивная вёрстка во Flutter
• Сериализация и десериализация — вошли и вышли
• Приложение викторины: внедрение Cardoteka и основные паттерны проектирования с Riverpod
• Методы-расширения в Dart
• flavius.holerga/making-a-3d-looking-game-using-flutter-tutorial-35ac6bf9e26d">Making a 2.5D game using Flutter — Tutorial
iOS
• Вышла VisionOS 1.1
• Loopover: пазл в стиле кубика Рубика
• Optional в Swift: 5 вещей, которые вы должны знать
• Уроки Swift: UITextField с анимированным плейсхолдером
• Minimal Widget Product: путь к эффективной и гибкой реализации виджетов
• Поваренная книга SwiftUI: лучшие практики управления состояниями в SwiftUI
• Apple снова разблокировала учетную запись Epic Games
• How to build a draggable bottom sheet with a scroll view in SwiftUI
• Everything you need to know about Swift 5.10
• Concurrency Recipes
• How to Dynamically Construct Complex Predicates for SwiftData
• Aspect-Oriented Programming in Swift
• Implementing a TV Guide with SwiftUI
#ios
Новый Fused Orientation Provider обеспечивает получение точных данных об ориентации устройства
Ориентация или положение устройства используется в качестве входного сигнала во многих случаях: виртуальная или дополненная реальность, распознавание жестов, компас и навигация — в любом случае, когда приложению нужна ориентация устройства относительно окружающей среды. Fused Orientation Provider (FOP) — это новый API в сервисах Google Play, который обеспечивает качественную и стабильную ориентацию устройства путем объединения сигналов от акселерометра, гироскопа и магнитометра.
1. Хотя в настоящее время Rotation Vector в Android уже обеспечивает получение данных об ориентации устройства (и будет продолжать это делать), новый FOP обеспечивает более последовательное поведение и высокую производительность на всех устройствах.
2. FOP обеспечивает единую реализацию на всех устройствах - API реализован в Google Play Services, а значит нет различий в реализации на устройствах разных производителей. Обновления алгоритма могут быть выпущены быстро и независимо от обновлений платформы Android.
3. FOP учитывает местное магнитное склонение, если оно доступно и компенсирует более низкое качество датчиков и OEM-реализаций (например, смещение гироскопа, синхронизацию датчиков).
Fused Orientation Provider доступен на всех устройствах с сервисами Google Play на Android 5 (Lollipop) и выше.
Видео и подкасты за неделю:
• (iOS Ru)
Minimal Widget Product: путь к эффективной и гибкой реализации виджетов
• (iOS Ru)
Уроки Swift: UITextField с анимированным плейсхолдером
• (iOS En)
Paging ScrollView in SwiftUI for iOS 17
• (iOS En)
Visual Effect API - Stacked Cards - ScrollView
• (iOS En)
Custom Calendar Tallies in SwiftUI
• (iOS En)
Minimal Login Setup With Firebase Email Authentication
• (And Ru)
Разработка новостного приложения. Часть 3
• (And Ru)
Hilt в многомодульный проект — пособие по внедрению зависимостей для новичков
• (And En)
THIS Is How You Create Custom Shapes in Jetpack Compose
• (And En)
New Android 15 Changes, App Update Prompts & AI Document Scanning
• (And En)
Lyricist & Voyager - Navigating the Compose Multiverse
• (And En)
Imperative, declarative, object oriented, functional: four of a Kotlin kind
• (Crs Ru)
Сериализация и десериализация — вошли и вышли
• (Crs Ru)
Адаптивная вёрстка во Flutter
• (Dev Ru)
Я.Субботник по мобильной разработке
• (Dev En)
Firebase’s Release Monitoring dashboard, Dart 3.3 release, and more dev news!
• (Dev En)
Learn C# – Full Course with Mini-Projects
• (Anl Ru)
Avito Analytics meetup
Что вы интересного посмотрели/послушали про разработку на этой неделе? 🌐 @AppFiles