В этом выпуске разбираемся с оперативной памятью и подписками, с безопасностью и амбициозными проектами, с полезными привычками и самыми-самыми приложениями, с тем как дизайн может убить ваш продукт и многим другим!
![](https://habrastorage.org/webt/6y/x1/uy/6yx1uyajb3afo_xxmamnmewbgxy.jpeg)
Из года в год Android-производители форсируют железную часть смартфонов: 108 МП, 8к-видеосъемка 12гб оперативной памяти… Но подождите, у iPhone всего 4 ГБ ОЗУ. И это не мешает ему работать на уровне или даже быстрее своих конкурентов! И как же удалось компании Apple добиться такого результата? С каждым годом требования к in-app подпискам в мобильных приложениях в App Store и Google Play меняются, становится все сложнее учесть их с первого раза и не получить серию реджектов, тем самым откладывая релиз порой на несколько месяцев. Если про требования для App Store уже достаточно много публикаций, то с правилами in-app подписок для Google Play все еще иногда возникают вопросы.
Этот дайджест доступен в виде еженедельной рассылки. А ежедневно новости мы рассылаем в
Telegram-канале.
iOS
• (+48) Так ли безопасен ваш iPhone? Обзор уязвимостей и тайных ходов в iOS
• (+26) Как Apple при помощи нерыночных методов занимается вымогательством у разработчиков
• (+8) Материалы Avito iOS meetup #8: видео и презентации
• (+7) Создаем калькулятор на Swift 5
• (+6) AppCode 2020.2: поддержка Swift Package Manager, улучшенное быстродействие, Change Signature для Swift и многое другое
• (+4) Реализация Grid раскладки на SwiftUI
• Apple фактически запретила стриминговые игры Stadia и xCloud
• Apple опубликовала требования к браузерами и почтовым клиентам по умолчанию
• Фил Шиллер перестанет заниматься маркетингом Apple
• Apple купила канадский финтех Mobeewave
• Тысячи приложений удалены из китайского App Store
•
Делаем прилипчивый заголовок в ScrollView на SwiftUI
•
Делаем перетаскиваемую карточку на SwiftUI
•
Apple может потерять толпу разработчиков
•
matchGeometryEffect от SwiftUI в iOS 14
•
Современные модульные приложения с Xcode 12 и Swift Package Manager
•
Почему SwiftUI делает вас лучшим программистом
•
Распознавание текста на iOS-устройстве с помощью SwiftUI
•
Чистый AppDelegate
•
Сделайте ваше приложение на SwiftUI масштабируемым и готовым к разным размерам экрана
•
iOS-разработка в VSCode
•
SwiftFortuneWheel: «Колесо фортуны» на Swift
•
YouTag: музыкальный плеер для iOS
Android
• (+17) Композитная сборка как альтернатива buildSrc в Gradle
• (+11) Android изнутри: сравнение Dalvik и ART
• (+7) Трансформация Android-разработки с Jetpack Compose и Корутинами
• (+7) RecyclerView.ItemDecoration: используем по максимуму
• (+7) RxRelay – это магия? Subject vs RxRelay
• (+6) Реализация функции сканирования штрихкодов с помощью HMS Core Scan SDK
• (+5) Топ самых важных функций Android для слепых – мнение незрячих экспертов
• Xiaomi отказалась от программы Android One
• Google стал продавцом ВСЕХ приложений в Европе
• Android Broadcast: ламповые посиделки. Артем Зиннатуллин@Lyft
•
Union, Intersect, Subtract в Kotlin
•
ViewPager2 – копаемся во внутренних API для работы с DiffUtil
•
Как оставаться современным Android-разработчиком
•
Реверс-инжиниринг Android-приложений
•
Внедрение поискового фильтра с использованием Kotlin Channels и Flows
•
Используем In-App Review API для отзывов в Google Play
•
Шаблон Репозиторий в Android
•
Material Components для Android 1.2.0
•
GraphView: графики для Android
•
Scrcast: запись экрана в приложении для Android
Разработка
• (+25) Сказ о разработке амбициозного проекта 16-ти летним парнем (file547)
• (+13) Какие навыки можно прокачать на проекте c большой кодовой базой
• (+10) Защищаемся от трекеров на мобильных платформах
• (+8) FigmaExport: как автоматизировать экспорт UI-Kit из Figma в Xcode и Android Studio проекты
• (+6) Управление сценами в Unity без боли и страданий
• (+5) Тестирование для мобильных разработчиков: полезные видео с Android-митапа
• make sense: О практике Jobs-To-Be-Done, разных уровнях применения, мифах и вреде продуктоцентричности
• Podlodka #175: имитационное моделирование
• Google запустил распознавание рукописного ввода в ML Kit
• Дизайн приложений: примеры для вдохновения #12
• 5 вещей, которые лучше понять до того, как начать стажировку в стартапе
• Дело о Маленьких и Больших Буквах
• Тестирование сервиса без ругани с программистом
• Почему быстрый дизайн убьёт ваш продукт?
• Правила хорошего интерфейса: изучаем UI-дизайн на примере LEGO
•
Как сделать многопользовательскую (.io) веб-игру
•
Slack теряет разработчиков, Discord получает
•
Я сделал Plague Inc. для калькулятора
•
Как индустрия рингтонов проложила путь магазинам приложений, а затем исчезла
•
Как Flutter выиграет десктопы
•
4 ключевых фактора, которые нужны, чтобы стать успешным разработчиком
•
Конфигурируем VS Code как профессионалы
•
Что делает движок Godot отличным для приложений с продвинутым GUI
•
Как я повысил производительность программной системы на 35,000%
•
Единственный фактор, который сделает вас Senior-разработчиком
•
Мои 2 цента о кроссплатформе
•
Миф о стоимости качества ПО
•
Локализуйте свое приложение на Flutter за 3 шага
•
Уроки, извлеченные из создания первых 10 коммерческих приложений на Flutter
•
6 советов разработчикам по борьбе с синдромом самозванца
•
FigmaToCode: макет в код для Flutter и SwiftUI
Аналитика, маркетинг и монетизация
• (+13) [Фреймворк формирования полезных привычек] и максимального вовлечения юзеров на примере изучения английского языка
• (+1) Как IDFA и контроль клиентских данных приведут к доверительному маркетингу
• LOVEMOBILE #08: Adjust
• Самые скачиваемые приложения в июле 2020
• Самые зарабатывающие приложения в июле 2020
• Radish: микрочтение фантастики
• Доходы мобильных игр во 2 квартале поставили новый рекорд
• Как игра One Guy Run получила 100.000+ установок за 2 дня?
• Мобильное видео заменяет телевизор
• iOS 14 & IDFA & мобильная атрибуция трафика: глобальное изменение на мобильном рынке рекламы
•
Тестирование цен для подписных приложений
•
Как разработать приложение, которое само по себе продвигает
•
Платные приложения мертвы. Что будет дальше с монетизацией?
•
12 правил виральности, которые я узнал, создавая видео-приложение со взрывным ростом
AI, Устройства, IoT
• (+32) Языковые модели как двигатель прогресса: необычные применения для GPT-3
• (+20) Как машинное обучение спасает деревья в Екатеринбурге
• (+14) Azure RTOS. Часть 1: обзор и запуск (STM32 + CubeIDE + HAL)
• Исследователи сделали ИИ для превращения селфи в нормальные портреты
• Google представил Pixel 4A
< Предыдущий дайджест. Если у вас есть другие интересные материалы или вы нашли ошибку — пришлите, пожалуйста, в почту.
![](https://habrastorage.org/webt/6y/x1/uy/6yx1uyajb3afo_xxmamnmewbgxy.jpeg)
Из года в год Android-производители форсируют железную часть смартфонов: 108 МП, 8к-видеосъемка 12гб оперативной памяти… Но подождите, у iPhone всего 4 ГБ ОЗУ. И это не мешает ему работать на уровне или даже быстрее своих конкурентов! И как же удалось компании Apple добиться такого результата? С каждым годом требования к in-app подпискам в мобильных приложениях в App Store и Google Play меняются, становится все сложнее учесть их с первого раза и не получить серию реджектов, тем самым откладывая релиз порой на несколько месяцев. Если про требования для App Store уже достаточно много публикаций, то с правилами in-app подписок для Google Play все еще иногда возникают вопросы.
Этот дайджест доступен в виде еженедельной рассылки. А ежедневно новости мы рассылаем в
![](https://habrastorage.org/webt/5e/k7/bf/5ek7bfhjzilma-pbharuioaa7lw.png)
![](https://habrastorage.org/getpro/habr/post_images/f19/30a/c49/f1930ac4945596eb9707bc7a01bc5bdc.png)
• (+48) Так ли безопасен ваш iPhone? Обзор уязвимостей и тайных ходов в iOS
• (+26) Как Apple при помощи нерыночных методов занимается вымогательством у разработчиков
• (+8) Материалы Avito iOS meetup #8: видео и презентации
• (+7) Создаем калькулятор на Swift 5
• (+6) AppCode 2020.2: поддержка Swift Package Manager, улучшенное быстродействие, Change Signature для Swift и многое другое
• (+4) Реализация Grid раскладки на SwiftUI
• Apple фактически запретила стриминговые игры Stadia и xCloud
• Apple опубликовала требования к браузерами и почтовым клиентам по умолчанию
• Фил Шиллер перестанет заниматься маркетингом Apple
• Apple купила канадский финтех Mobeewave
• Тысячи приложений удалены из китайского App Store
•
![](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)
• (+17) Композитная сборка как альтернатива buildSrc в Gradle
• (+11) Android изнутри: сравнение Dalvik и ART
• (+7) Трансформация Android-разработки с Jetpack Compose и Корутинами
• (+7) RecyclerView.ItemDecoration: используем по максимуму
• (+7) RxRelay – это магия? Subject vs RxRelay
• (+6) Реализация функции сканирования штрихкодов с помощью HMS Core Scan SDK
• (+5) Топ самых важных функций Android для слепых – мнение незрячих экспертов
• Xiaomi отказалась от программы Android One
• Google стал продавцом ВСЕХ приложений в Европе
• Android Broadcast: ламповые посиделки. Артем Зиннатуллин@Lyft
•
![](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/708/1c6/34e/7081c634ec176ab6b953d9d19e82a09a.png)
• (+25) Сказ о разработке амбициозного проекта 16-ти летним парнем (file547)
• (+13) Какие навыки можно прокачать на проекте c большой кодовой базой
• (+10) Защищаемся от трекеров на мобильных платформах
• (+8) FigmaExport: как автоматизировать экспорт UI-Kit из Figma в Xcode и Android Studio проекты
• (+6) Управление сценами в Unity без боли и страданий
• (+5) Тестирование для мобильных разработчиков: полезные видео с Android-митапа
• make sense: О практике Jobs-To-Be-Done, разных уровнях применения, мифах и вреде продуктоцентричности
• Podlodka #175: имитационное моделирование
• Google запустил распознавание рукописного ввода в ML Kit
• Дизайн приложений: примеры для вдохновения #12
• 5 вещей, которые лучше понять до того, как начать стажировку в стартапе
• Дело о Маленьких и Больших Буквах
• Тестирование сервиса без ругани с программистом
• Почему быстрый дизайн убьёт ваш продукт?
• Правила хорошего интерфейса: изучаем UI-дизайн на примере LEGO
•
![](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/files/377/ae0/333/377ae0333d0f4b7b97307c9eea5ee21a.gif)
•
![](https://habrastorage.org/files/967/16b/cb9/96716bcb926741e79bb1c284a88083ca.png)
![](https://habrastorage.org/getpro/habr/post_images/509/dc9/bde/509dc9bde69347ecbe0c21ff2973d7e7.jpg)
• (+13) [Фреймворк формирования полезных привычек] и максимального вовлечения юзеров на примере изучения английского языка
• (+1) Как IDFA и контроль клиентских данных приведут к доверительному маркетингу
• LOVEMOBILE #08: Adjust
• Самые скачиваемые приложения в июле 2020
• Самые зарабатывающие приложения в июле 2020
• Radish: микрочтение фантастики
• Доходы мобильных игр во 2 квартале поставили новый рекорд
• Как игра One Guy Run получила 100.000+ установок за 2 дня?
• Мобильное видео заменяет телевизор
• iOS 14 & IDFA & мобильная атрибуция трафика: глобальное изменение на мобильном рынке рекламы
•
![](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/853/812/9f5/8538129f5e7b404a720121cb9c3814db.jpg)
• (+32) Языковые модели как двигатель прогресса: необычные применения для GPT-3
• (+20) Как машинное обучение спасает деревья в Екатеринбурге
• (+14) Azure RTOS. Часть 1: обзор и запуск (STM32 + CubeIDE + HAL)
• Исследователи сделали ИИ для превращения селфи в нормальные портреты
• Google представил Pixel 4A
< Предыдущий дайджест. Если у вас есть другие интересные материалы или вы нашли ошибку — пришлите, пожалуйста, в почту.