В новом выпуске разбираемся со скруглением иконок (два раза!), с UI-тестами и MVI, мультиплатформенными приложениями и CI/CD, проектированием интерфейсов, самыми зарабатывающими приложениями и многим другим.
![](https://habrastorage.org/webt/1c/3g/gn/1c3ggnquuz_yusveh3hzdfmsjmi.png)
История с долгими поисками девайсов и/или проводов стала касаться меня ежедневно. Такая пустяковая задача, как найти Xiaomi Mi A1, занимала кучу времени и приносила душевные страдания. Спустя некоторое время, я пришёл к мысли, что меня это бесит и на поиск девайса столько времени уходить не должно. Я нашёл узкое горлышко в рабочих процессах и решил его ликвидировать.
Этот дайджест доступен в виде еженедельной рассылки. А ежедневно новости мы рассылаем в
Telegram-канале.
iOS
• (+66) Секрет формы иконок iOS: это сквиркл? Разбор
• (+3) Формулы переводов: хитрая локализация для iOS и не только
• (+3) Swift Best Practices которые не стыдно знать
• Apple откладывает защиту конфиденциальности в iOS 14 до следующего года
• Особенности реализации календаря с горизонтальным скролом
• В App Store запускаются промо-коды для подписок
• 10 советов по разработке виджетов для iOS 14
• Apple не будет задерживать исправление ошибок в App Store
• Apple делает свой поисковый сервис?
•
Мои любимые приложения для iOS-разработки в 2020 году
•
Как создать интерактивный Bottom Sheet в Swift 5
•
Встроенные покупки и StoreKit в iOS 14
•
Привязка к прокрутке элемента
•
Как создать навигатор для перехода на любую страницу в Swift
•
Ваш первый UITest на Swift
•
Что нового в Xcode 12.0?
•
Обработка видео в SwiftUI в реальном времени с использованием Core Image
•
Не делайте этого с помощью Swift Optionals
•
Ассемблер в iOS
•
Apple Silicon для разработчиков приложений
•
Swifty Guitar Chords: гитарные аккорды на Swift
•
MultiplatformApp: мультиплатформенное приложение на SwiftUI
Android
• (+10) На чем писать Android UI-тесты
• (+4) Быть или не быть: дискуссии о тестировании в мобильной разработке
• (+3) Загрузка и сборка AOSP
• (+2) Так для чего же нам все таки нужен MVI в мобильной разработке
• (+2) Как встроить голосового помощника в любое мобильное приложение. Разбираем на примере Habitica
• (+1) Анализ сервисов приема SMS для Android против сайтов-сервисов и опыт разработки нового функционала под Android
• Android Broadcast: Dagger Hilt: Deep Dive / No more Koin
• Android Broadcast: Kotlin 1.4: быстрее и лучше
• Вышла альфа Kotlin Multiplatform Mobile
• Thermal в Android
•
Приватные библиотеки в Android – почему вы должны рассмотреть это
•
Извлекаем взаимодействий из ViewModel
•
Распознавание касания, двойного касания, панорамирования и щипка в Android
•
Заставьте ваш (Kotlin) код выражать самого себя
•
Распространенные ошибки разработчиков при создании RecyclerViews и способы их устранения с помощью класса ViewRepresentation
•
Отформатируйте код Kotlin с помощью Ktlint
•
Shape Drawables — самый мощный инструмент для Android UI
•
Исследуем Kotlin Multiplatform
•
Настраиваем Logcat в Android Studio
•
20 инструментов Android-разработки о которых вы, вероятно, никогда не слышали
•
Добавляем ленту на иконку приложения в Android (снова))
•
Предпочитаемое хранение данных в Jetpack DataStore
•
Jetpack Release Tracker: отслеживание обновлений AndroidX
•
TrackerControl: отслеживание сбора данных на Android
•
Jetpack Compose Samples: примеры работы с Compose
Разработка
• (+43) Ваши квадрокруги — неправильные
• (+18) Создаем разрушаемые объекты в Unreal Engine 4 и Blender
• (+17) «Ну, покати!» или CI/CD мобильных приложений на основе контракта
• (+9) Как прошел открытый Demo Day в Райффайзенбанке
• (+7) Тестирование Flutter-приложений: инструменты, преимущества, проблемы
• (+7) Как работают мобильные кошельки на примере приложения «Mir Pay»
• (+4) Улучшаем работу со сценами с помощью ScriptableObject
• (+4) Продвинутое велосипедостроение или клиент-серверное приложение на базе C# .Net framework
• (+3) Совет инженерам по тестированию №1: Докеризируйте ваш Selenium Grid
• (+2) Победитель Apple Design Awards: статистически усреднённый портрет
• Podlodka #179: рациональность
• Как создать свой игровой бизнес
• Дизайн приложений: примеры для вдохновения #15
• Google и Apple разработали упрощенную систему предупреждения о COVID-19
• Pokemon GO прекращает поддержку старых смартфонов
• Unity Distribution Portal позволит работать сразу со многими магазинами приложений
• Проектирование игры в Sketch: интервью с создателем King Rabbit
• Не проектируйте для мобильных устройств (Mobile-first)
• С чего начать проектирование мобильного приложения. Основы UI дизайна
•
Что такое Actions Builder? Actions Builder и Actions SDK для Google Assistant
•
Реверс-инжиниринг: разработка эмулятора сервера для Marvel’s Avengers
•
10 лучших и самых популярных пакетов Flutter
•
5 советов для лучшего дизайна кнопок
•
Улучшаем Flutter-приложения с помощью автозаполнения
•
Чистый код для ведущих разработчиков
•
Автоматизация жизненного цикла Flutter-проекта с помощью GitHub Actions
•
Да, TDD вас замедляет
•
Разработка дневника настроения на Flutter за 2 часа
•
6 шагов в поиске подходящей среды автоматизации тестирования (с примером из практики)
Аналитика, маркетинг и монетизация
• Avo: аналитика нового поколения
• Самые зарабатывающие приложения в августе 2020
• Индия забанила PUBG и еще сотню приложений
• Google запустил Growth Academy для Украины и Беларуси
• App Annie представляет отчет по геймингу за первое полугодие
• myTracker анализирует доходы от рекламы в приложениях
• Локализация: как выйти на международный рынок и увеличить количество установок?
• Модель монетизации: меняем и дешево тестируем новую
•
Почему удержание — лучший способ роста
AI, Устройства, IoT
• (+20) Малиновый киноцентр или как сделать неубиваемый смарт-ТВ
• (+18) Как игры стали движущей силой двух школ исследований ИИ
• (+1) Микроволновка, знающая о тебе всё: что такое Интернет вещей (IoT)?
• Apple iPhone 11 стал самым продаваемым смартфоном в первой половине 2020
< Предыдущий дайджест. Если у вас есть другие интересные материалы или вы нашли ошибку — пришлите, пожалуйста, в почту.
![](https://habrastorage.org/webt/1c/3g/gn/1c3ggnquuz_yusveh3hzdfmsjmi.png)
История с долгими поисками девайсов и/или проводов стала касаться меня ежедневно. Такая пустяковая задача, как найти Xiaomi Mi A1, занимала кучу времени и приносила душевные страдания. Спустя некоторое время, я пришёл к мысли, что меня это бесит и на поиск девайса столько времени уходить не должно. Я нашёл узкое горлышко в рабочих процессах и решил его ликвидировать.
Этот дайджест доступен в виде еженедельной рассылки. А ежедневно новости мы рассылаем в
![](https://habrastorage.org/webt/5e/k7/bf/5ek7bfhjzilma-pbharuioaa7lw.png)
![](https://habrastorage.org/getpro/habr/post_images/f19/30a/c49/f1930ac4945596eb9707bc7a01bc5bdc.png)
• (+66) Секрет формы иконок iOS: это сквиркл? Разбор
• (+3) Формулы переводов: хитрая локализация для iOS и не только
• (+3) Swift Best Practices которые не стыдно знать
• Apple откладывает защиту конфиденциальности в iOS 14 до следующего года
• Особенности реализации календаря с горизонтальным скролом
• В App Store запускаются промо-коды для подписок
• 10 советов по разработке виджетов для iOS 14
• Apple не будет задерживать исправление ошибок в App Store
• Apple делает свой поисковый сервис?
•
![](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/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)
• (+10) На чем писать Android UI-тесты
• (+4) Быть или не быть: дискуссии о тестировании в мобильной разработке
• (+3) Загрузка и сборка AOSP
• (+2) Так для чего же нам все таки нужен MVI в мобильной разработке
• (+2) Как встроить голосового помощника в любое мобильное приложение. Разбираем на примере Habitica
• (+1) Анализ сервисов приема SMS для Android против сайтов-сервисов и опыт разработки нового функционала под Android
• Android Broadcast: Dagger Hilt: Deep Dive / No more Koin
• Android Broadcast: Kotlin 1.4: быстрее и лучше
• Вышла альфа Kotlin Multiplatform Mobile
• Thermal в 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/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)
• (+43) Ваши квадрокруги — неправильные
• (+18) Создаем разрушаемые объекты в Unreal Engine 4 и Blender
• (+17) «Ну, покати!» или CI/CD мобильных приложений на основе контракта
• (+9) Как прошел открытый Demo Day в Райффайзенбанке
• (+7) Тестирование Flutter-приложений: инструменты, преимущества, проблемы
• (+7) Как работают мобильные кошельки на примере приложения «Mir Pay»
• (+4) Улучшаем работу со сценами с помощью ScriptableObject
• (+4) Продвинутое велосипедостроение или клиент-серверное приложение на базе C# .Net framework
• (+3) Совет инженерам по тестированию №1: Докеризируйте ваш Selenium Grid
• (+2) Победитель Apple Design Awards: статистически усреднённый портрет
• Podlodka #179: рациональность
• Как создать свой игровой бизнес
• Дизайн приложений: примеры для вдохновения #15
• Google и Apple разработали упрощенную систему предупреждения о COVID-19
• Pokemon GO прекращает поддержку старых смартфонов
• Unity Distribution Portal позволит работать сразу со многими магазинами приложений
• Проектирование игры в Sketch: интервью с создателем King Rabbit
• Не проектируйте для мобильных устройств (Mobile-first)
• С чего начать проектирование мобильного приложения. Основы UI дизайна
•
![](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)
• Avo: аналитика нового поколения
• Самые зарабатывающие приложения в августе 2020
• Индия забанила PUBG и еще сотню приложений
• Google запустил Growth Academy для Украины и Беларуси
• App Annie представляет отчет по геймингу за первое полугодие
• myTracker анализирует доходы от рекламы в приложениях
• Локализация: как выйти на международный рынок и увеличить количество установок?
• Модель монетизации: меняем и дешево тестируем новую
•
![](https://habrastorage.org/files/377/ae0/333/377ae0333d0f4b7b97307c9eea5ee21a.gif)
![](https://habrastorage.org/getpro/habr/post_images/853/812/9f5/8538129f5e7b404a720121cb9c3814db.jpg)
• (+20) Малиновый киноцентр или как сделать неубиваемый смарт-ТВ
• (+18) Как игры стали движущей силой двух школ исследований ИИ
• (+1) Микроволновка, знающая о тебе всё: что такое Интернет вещей (IoT)?
• Apple iPhone 11 стал самым продаваемым смартфоном в первой половине 2020
< Предыдущий дайджест. Если у вас есть другие интересные материалы или вы нашли ошибку — пришлите, пожалуйста, в почту.