В этой подборке креши на старте и идеальный наблюдатель, новые MacBook Pro в компиляции проектов и эволюция CI, боты в мультиплеере, проблема разлогинов, вопросы удаления функций, фейковые приложения и многое другое!
![](https://habrastorage.org/r/w780q1/webt/dn/ie/6q/dnie6q6ikmia4svdwtfnumxz0fk.jpeg)
Этот дайджест доступен в виде еженедельной рассылки. А ежедневно новости мы рассылаем в
Telegram-канале.
iOS
• Исповедь iOS-разработчика из Google
• Кто крешит приложение на старте?
• Гайд по UIKeyboardLayoutGuide
• Apple Watch, статистика и Siri — как мы провели iOS-хакатон
• Идеальный наблюдатель на Swift
• Протокольно-ориентированное программирование в Swift
• Новые MacBook Pro 2021 протестировали в работе с Xcode
•
Отделение конкретных Координаторов от вашей навигационной системы в iOS
•
Отладка в iOS 15 с Xcode 12
•
SwiftUI под капотом: шрифты
•
Как я кастомизирую NavigationView в SwiftUI
•
Добавление дополнительных элементов управления в приложение для рисования на SwiftUI
•
Создаем свою собственную библиотеку тостов с нуля в iOS
•
Как представить настраиваемые Bottom Sheets в iOS 15
•
Courier — легкая система обмена сообщениями в реальном времени в iOS с MQTT
•
Linkedin UI SwiftUI: Linkedin на SwiftUI
•
Localizable Generator: Localizable.strings из таблицы
Android
• Эволюция CI в Android
• Установка Google сервисов на Windows Subsystem for Android
• Публикация Android библиотеки
• Что нового в Android Studio
• Handler vs RX vs Kotlin. Наглядный пример преимущества корутин
• Как натянуть сыр на страницу, или MVI Paging3 в Android
• Константин Петров («БКС Мир инвестиций»): «Мы ищем опытных разработчиков, которые бы помогли нам развиваться»
• Jetpack Compose. ViewModel. Как выбрать архитектуру для Compose?
• Google представил Android 12L для больших экранов
• Dagger 2 в многомодульном Android проекте
• Как я взломал приложение для Android, чтобы получить премиум-функцию
• Анимируем приложение с помощью Lottie
• Безопасный Android
•
Всегда указывайте Modifier параметр
•
Compose for Wear OS: ScalingLazyColumn
•
Создание вашей первого графика в Android с помощью Jetpack Compose
•
Лучшие приложения для Android с использованием продвинутой Архитектуры
•
Android View LifecycleOwner Extensions = Lifecycle + LifecycleScope в любом представлении
•
Выпускайте приложения быстрее с Fastlane
•
Современное хранилище данных на Android: встречайте Jetpack DataStore
•
Распознавание цифровых рисунков с помощью Google ML Kit на Android
•
Представляем Jetpack Media3
•
Лучшие бесплатные ресурсы для изучения разработки под Android с Kotlin в 2021 году
•
Slack Lints: правила Slack для кода Kotlin
•
Instant: социальная сеть на Kotlin, Compose и MVVM
•
Simple Stack: простая навигация для Android
Разработка
• Добавляем ботов в мультиплеерный шутер на Unity
• Метод проб и ошибок: как мы создавали кастомный импортер в Unity3D для текстурных массивов
• Почему важно учитывать дальтонизм в дизайне: пример игры Among Us
• Применяем Hooks из React во Flutter
• Как мы боролись с проблемой разлогинов в приложении «Магнита» и возвращали пользователей обратно
• Как правильно готовить автоматизацию или Что покрывать тестами в первую очередь
• Запись и воспроизведение голоса, а также отмена записи свайпом вправо с анимацией и изменением иконки на React Native
• Ускоряем работу с тестовой документацией. Экспорт данных из Allure-отчета в Confluence
• Зачем тестировщику знать французский: что такое MEV и как с ним работать
• Как и зачем мы встраивали одно Android-приложение в другое
• Удаление функций без раздражения пользователей (и почему их следует удалять)
• Дизайн приложений: примеры для вдохновения #62
• Podlodka #239: сети, часть 1: Интернет
• Видео Mobuis 2021 Piter
• Минцифры готовит суперприложение для чиновников
• Как WhatsApp вырос до 1 миллиарда пользователей всего с 50 инженерами
• Y42, full-stack дата платформа для непрограммистов, получила $31 млн
• Курсы по Unity в новой распродаже Humble Bundle
• Дружественные интервалы. Как организовать систему интервалов в дизайне
• Десять лет спустя: каким видели будущее программирования в 2012 году
• Приоритет количественных данных и принцип Парето в UX-дизайне
•
Кейс UI/UX: редизайн приложения IKEA
•
5 советов, как уменьшить количество ошибок в разработке ПО
•
Почему я прекращаю разработку после 10+ лет программирования
•
5 лучших локальных баз данных для Flutter
•
Как я потерял страсть к разработке
•
CupertinoPageRoute во Flutter
•
Основные тенденции Java в 2021 году
•
Лучшие расширения VS Code для ускорения работы вашего Git
•
Реактивная Firebase Realtime Database на Swift
•
Становятся ли избыточными ваши модульные тесты? Вот как писать их эффективно
•
Кейс: дизайн приложения для доставки этнической еды
•
Исследуем AbsorbPointer в Flutter
•
Как развернуть микросервис Kotlin в облаке AWS
•
Основы CI/CD
Аналитика, маркетинг и монетизация
• Абсолютный обман. Фейковые приложения для Android и iOS — почему в них верят
• Аналитический коктейль, или Кто такой инженер-аналитик в Кошельке
• SocialPeta помогает компаниям по разработке мобильных приложений в привлечении пользователей по всему миру
• Маркетологи в мобайле: Диана Габране-Жукова (Snapchat)
• Траты европейских потребителей на приложения в 3 квартале 2021 выросли на 21% до $4.6 млрд
• Как Okko пришел к самым эффективным YouTube-креативам, когда другие методы не работали
• Особенный подход: почему привычные правила рекламного рынка не подходят гиперказуальным играм
• В MyTracker появился новый инструмент для прогноза LTV по универсальному доходу
• Самые зарабатывающие приложения сентября в США
• Мне было скучно осваивать четвёртый иностранный язык и я создала CrossLingo — кроссворды для изучения английских слов
• Как заработать на гиперказуальных играх в сегменте HTML5. Опыт студии Justforward
• Как работать с Playable Ads для мобильных игр и неигровых приложений
AI, Устройства, IoT
• Мобильный подавитель микрофонов на Arduino. Принцип работы
• Большой брат (пока) подслеповат
• Hello, ZigBee! кастомные кластеры и поддержка в zigbee2mqtt
• Развитие систем криптографической защиты информации в IoT (часть 1-я)
• Eclipse Foundation анонсирует разработку ОС Oniro для IoT
• Skyryse получил $200 млн на стек технологий для упрощения полетов
• All Cups открывает курс “Введение в написание игрового искусственного интеллекта”
← Предыдущий дайджест. Если у вас есть другие интересные материалы или вы нашли ошибку — пришлите, пожалуйста, в почту.
![](https://habrastorage.org/webt/dn/ie/6q/dnie6q6ikmia4svdwtfnumxz0fk.jpeg)
Этот дайджест доступен в виде еженедельной рассылки. А ежедневно новости мы рассылаем в
![](https://habrastorage.org/webt/5e/k7/bf/5ek7bfhjzilma-pbharuioaa7lw.png)
![](https://habrastorage.org/getpro/habr/post_images/f19/30a/c49/f1930ac4945596eb9707bc7a01bc5bdc.png)
• Исповедь iOS-разработчика из Google
• Кто крешит приложение на старте?
• Гайд по UIKeyboardLayoutGuide
• Apple Watch, статистика и Siri — как мы провели iOS-хакатон
• Идеальный наблюдатель на Swift
• Протокольно-ориентированное программирование в Swift
• Новые MacBook Pro 2021 протестировали в работе с Xcode
•
![](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/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)
• Эволюция CI в Android
• Установка Google сервисов на Windows Subsystem for Android
• Публикация Android библиотеки
• Что нового в Android Studio
• Handler vs RX vs Kotlin. Наглядный пример преимущества корутин
• Как натянуть сыр на страницу, или MVI Paging3 в Android
• Константин Петров («БКС Мир инвестиций»): «Мы ищем опытных разработчиков, которые бы помогли нам развиваться»
• Jetpack Compose. ViewModel. Как выбрать архитектуру для Compose?
• Google представил Android 12L для больших экранов
• Dagger 2 в многомодульном Android проекте
• Как я взломал приложение для Android, чтобы получить премиум-функцию
• Анимируем приложение с помощью Lottie
• Безопасный Android
•
![](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/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/708/1c6/34e/7081c634ec176ab6b953d9d19e82a09a.png)
• Добавляем ботов в мультиплеерный шутер на Unity
• Метод проб и ошибок: как мы создавали кастомный импортер в Unity3D для текстурных массивов
• Почему важно учитывать дальтонизм в дизайне: пример игры Among Us
• Применяем Hooks из React во Flutter
• Как мы боролись с проблемой разлогинов в приложении «Магнита» и возвращали пользователей обратно
• Как правильно готовить автоматизацию или Что покрывать тестами в первую очередь
• Запись и воспроизведение голоса, а также отмена записи свайпом вправо с анимацией и изменением иконки на React Native
• Ускоряем работу с тестовой документацией. Экспорт данных из Allure-отчета в Confluence
• Зачем тестировщику знать французский: что такое MEV и как с ним работать
• Как и зачем мы встраивали одно Android-приложение в другое
• Удаление функций без раздражения пользователей (и почему их следует удалять)
• Дизайн приложений: примеры для вдохновения #62
• Podlodka #239: сети, часть 1: Интернет
• Видео Mobuis 2021 Piter
• Минцифры готовит суперприложение для чиновников
• Как WhatsApp вырос до 1 миллиарда пользователей всего с 50 инженерами
• Y42, full-stack дата платформа для непрограммистов, получила $31 млн
• Курсы по Unity в новой распродаже Humble Bundle
• Дружественные интервалы. Как организовать систему интервалов в дизайне
• Десять лет спустя: каким видели будущее программирования в 2012 году
• Приоритет количественных данных и принцип Парето в UX-дизайне
•
![](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/getpro/habr/post_images/509/dc9/bde/509dc9bde69347ecbe0c21ff2973d7e7.jpg)
• Абсолютный обман. Фейковые приложения для Android и iOS — почему в них верят
• Аналитический коктейль, или Кто такой инженер-аналитик в Кошельке
• SocialPeta помогает компаниям по разработке мобильных приложений в привлечении пользователей по всему миру
• Маркетологи в мобайле: Диана Габране-Жукова (Snapchat)
• Траты европейских потребителей на приложения в 3 квартале 2021 выросли на 21% до $4.6 млрд
• Как Okko пришел к самым эффективным YouTube-креативам, когда другие методы не работали
• Особенный подход: почему привычные правила рекламного рынка не подходят гиперказуальным играм
• В MyTracker появился новый инструмент для прогноза LTV по универсальному доходу
• Самые зарабатывающие приложения сентября в США
• Мне было скучно осваивать четвёртый иностранный язык и я создала CrossLingo — кроссворды для изучения английских слов
• Как заработать на гиперказуальных играх в сегменте HTML5. Опыт студии Justforward
• Как работать с Playable Ads для мобильных игр и неигровых приложений
![](https://habrastorage.org/getpro/habr/post_images/853/812/9f5/8538129f5e7b404a720121cb9c3814db.jpg)
• Мобильный подавитель микрофонов на Arduino. Принцип работы
• Большой брат (пока) подслеповат
• Hello, ZigBee! кастомные кластеры и поддержка в zigbee2mqtt
• Развитие систем криптографической защиты информации в IoT (часть 1-я)
• Eclipse Foundation анонсирует разработку ОС Oniro для IoT
• Skyryse получил $200 млн на стек технологий для упрощения полетов
• All Cups открывает курс “Введение в написание игрового искусственного интеллекта”
← Предыдущий дайджест. Если у вас есть другие интересные материалы или вы нашли ошибку — пришлите, пожалуйста, в почту.