Firebase Kotlin SDK - это Kotlin-first SDK для Firebase. API аналогичен Kotlin-расширениям Firebase Android SDK, но также поддерживает мультиплатформенные проекты, позволяя использовать Firebase непосредственно из единого источника, ориентированного на iOS, Android, Desktop или Web, что дает возможность использовать Firebase в качестве бэкенда, например, для Compose Multiplatform.
Firebase Kotlin SDK на GitHub: https://github.com/GitLiveApp/firebase-kotlin-sdk
Платформа: Android
⭐️: 882
Firebase Kotlin SDK на GitHub: https://github.com/GitLiveApp/firebase-kotlin-sdk
Платформа: Android
⭐️: 882
👍3
EeveeSpotify - это твик для Spotify, который дает некоторые функции премиум-подписки.
Как это работает
При входе в систему Spotify получает данные пользователя, включая активную подписку, и кэширует их в файле offline.bnk в каталоге /Library/Application Support/PersistentCache. Для хранения данных используется собственный двоичный формат, включающий, помимо прочих условностей, байт длины перед каждым значением. Некоторые ключи, такие как player-license, financial-product и type, определяют возможности пользователя.
Твик исправляет этот файл при инициализации. Spotify загружает его и предполагает, что у вас есть Premium. Честно говоря, это не совсем патч, а именно обходной твик, из-за проблем с динамической длиной и разными байтами. В идеале должен быть парсер, способный десериализовать и сериализовать такой формат. Однако пока твик просто извлекает имя пользователя из текущего файла offline.bnk и вставляет его в premiumblank.bnk (файл, содержащий все предустановленные значения Premium), заменяя им offline.bnk.
EeveeSpotify на GitHub: https://github.com/whoeevee/EeveeSpotify
Платформа: разработка/Swift
⭐️: 102
Как это работает
При входе в систему Spotify получает данные пользователя, включая активную подписку, и кэширует их в файле offline.bnk в каталоге /Library/Application Support/PersistentCache. Для хранения данных используется собственный двоичный формат, включающий, помимо прочих условностей, байт длины перед каждым значением. Некоторые ключи, такие как player-license, financial-product и type, определяют возможности пользователя.
Твик исправляет этот файл при инициализации. Spotify загружает его и предполагает, что у вас есть Premium. Честно говоря, это не совсем патч, а именно обходной твик, из-за проблем с динамической длиной и разными байтами. В идеале должен быть парсер, способный десериализовать и сериализовать такой формат. Однако пока твик просто извлекает имя пользователя из текущего файла offline.bnk и вставляет его в premiumblank.bnk (файл, содержащий все предустановленные значения Premium), заменяя им offline.bnk.
EeveeSpotify на GitHub: https://github.com/whoeevee/EeveeSpotify
Платформа: разработка/Swift
⭐️: 102
🤔1
Осваиваем ViewModel в Android: «можно» и «нельзя» — Часть 3
В предыдущих частях мы обсудили:
1. Избегайте инициализации состояния в блоке init{}.
2. Избегайте раскрытия мутабельных состояний.
3. Используйте update{} при использовании MutableStateFlows.
В этой части мы обсудим 4 и 5 пункты из списка:
4. Старайтесь не импортировать зависимости Android в ViewModel.
5. Лениво внедряйте зависимости в конструктор.
Статья: https://apptractor.ru/info/articles/osvaivaem-viewmodel-v-android-mozhno-i-nelzya-chast-3.html
Платформа: Android
В предыдущих частях мы обсудили:
1. Избегайте инициализации состояния в блоке init{}.
2. Избегайте раскрытия мутабельных состояний.
3. Используйте update{} при использовании MutableStateFlows.
В этой части мы обсудим 4 и 5 пункты из списка:
4. Старайтесь не импортировать зависимости Android в ViewModel.
5. Лениво внедряйте зависимости в конструктор.
Статья: https://apptractor.ru/info/articles/osvaivaem-viewmodel-v-android-mozhno-i-nelzya-chast-3.html
Платформа: Android
Оптимизируем обновление местоположения с помощью CLLocationUpdate в Swift
На WWDC 23 Apple значительно улучшила процесс обновления местоположения, представив класс CLLocationUpdate. Этот новый класс использует возможности современного Swift Concurrency, упрощая получение и управление данными о местоположении в ваших приложениях.
Статья: https://apptractor.ru/info/articles/optimiziruem-obnovlenie-mestopolozheniya-s-pomoschyu-cllocationupdate-v-swift.html
Платформа: iOS
На WWDC 23 Apple значительно улучшила процесс обновления местоположения, представив класс CLLocationUpdate. Этот новый класс использует возможности современного Swift Concurrency, упрощая получение и управление данными о местоположении в ваших приложениях.
Статья: https://apptractor.ru/info/articles/optimiziruem-obnovlenie-mestopolozheniya-s-pomoschyu-cllocationupdate-v-swift.html
Платформа: iOS
Jetpack Compose для ленивых
Если вы еще не используете Compose в своих проектах, то определенно стоит подумать о том, что бы начать, поскольку он позволяет делать сложные вещи простыми и, что самое главное, экономит время (и нервы).
Хочу надеяться, что мой опыт окажется полезным и поможет другим разработчикам в создании нестандартных экранов. И не бойтесь изучать что-то новое. Возможно когда-нибудь это новое сделает вашу жизнь чуточку легче.
Статья: https://habr.com/ru/articles/810123/
Платформа: Android
Если вы еще не используете Compose в своих проектах, то определенно стоит подумать о том, что бы начать, поскольку он позволяет делать сложные вещи простыми и, что самое главное, экономит время (и нервы).
Хочу надеяться, что мой опыт окажется полезным и поможет другим разработчикам в создании нестандартных экранов. И не бойтесь изучать что-то новое. Возможно когда-нибудь это новое сделает вашу жизнь чуточку легче.
Статья: https://habr.com/ru/articles/810123/
Платформа: Android
N8 - библиотека навигации на основе состояний. Цель - чистый Kotlin, необходимость в минимуме конфигурации, минимальная связанность, безопасность типов и очевидный API. В N8 нет необходимости указывать навигационные маршруты заранее, N8 просто строит навигационный граф по мере продвижения, гарантируя, что операции возврата всегда будут иметь смысл. Чтобы использовать N8 в своем приложении, вам не нужно реализовывать никаких специальных интерфейсов на экранах, поэтому ваш пользовательский код остается в значительной степени независимым от самого N8.
N8 на GitHub: https://github.com/erdo/n8
Платформа: Android
⭐️: 35
N8 на GitHub: https://github.com/erdo/n8
Платформа: Android
⭐️: 35
Цикломатическая сложность в Swift
Цикломатическая сложность — это модный термин, обозначающий количество точек принятия решений в коде. На самом деле это очень просто. По сути, чем больше у вас точек принятия решений — например, операторов if, switch, циклов и так далее, — тем сложнее становится ваш код. А чем сложнее код, тем труднее его понимать, тестировать и поддерживать.
Статья: https://apptractor.ru/info/articles/tsiklomaticheskaya-slozhnost-v-swift.html
Платформа: разработка/Swift
Цикломатическая сложность — это модный термин, обозначающий количество точек принятия решений в коде. На самом деле это очень просто. По сути, чем больше у вас точек принятия решений — например, операторов if, switch, циклов и так далее, — тем сложнее становится ваш код. А чем сложнее код, тем труднее его понимать, тестировать и поддерживать.
Статья: https://apptractor.ru/info/articles/tsiklomaticheskaya-slozhnost-v-swift.html
Платформа: разработка/Swift
EasyCrypto - простое приложение для iOS с курсами криптовалют. Внутри все самые модные технологии и инструменты разработки - SwiftUI, Core Data, Combine, чистая архитектура, MVVM, паттерн Координатор, инъекция зависимостей, SwiftLint, юнит-тесты.
EasyCrypto на GitHub: https://github.com/mehrankmlf/EasyCrypto
Платформа: iOS
⭐️: 44
EasyCrypto на GitHub: https://github.com/mehrankmlf/EasyCrypto
Платформа: iOS
⭐️: 44
👨💻2
Вы, случайно, не мобильный разработчик? Тогда откуда для вас такой оффер?
18 и 19 мая пройдет Mobile Weekend Offer в Тинькофф. Для iOS- и Android-разработчиков с опытом от 3 лет.
Вот что будет:
— пройдете все этапы собеседования за выходные;
— познакомитесь с командой;
— если все хорошо, получите оффер на неделе. уже в воскресенье.
Дальше — будете решать масштабные финтех-задачи, развивать продукты для миллионов, пользоваться бенефитами и расти.
Оставьте заявку до 15 мая
18 и 19 мая пройдет Mobile Weekend Offer в Тинькофф. Для iOS- и Android-разработчиков с опытом от 3 лет.
Вот что будет:
— пройдете все этапы собеседования за выходные;
— познакомитесь с командой;
— если все хорошо, получите оффер на неделе. уже в воскресенье.
Дальше — будете решать масштабные финтех-задачи, развивать продукты для миллионов, пользоваться бенефитами и расти.
Оставьте заявку до 15 мая
Реклама. АО «Тинькофф Банк», ИНН 7710140679FlowExt - это библиотека Kotlin Multiplatform, которая предоставляет множество операторов и расширений для Flow. FlowExt предоставляет коллекцию операторов, потоков и утилит для Flow, которые не предусмотрены самими корутинами, но распространены в других реактивных фреймворках (rxjs, RxJava, RxSwift, rxdart, ...) и стандартах.
FlowExt на GitHub: https://github.com/hoc081098/FlowExt
Платформа: Android
⭐️: 285
FlowExt на GitHub: https://github.com/hoc081098/FlowExt
Платформа: Android
⭐️: 285
Видео и подкасты за неделю:
•
•
•
•
•
•
•
•
•
•
•
•
Посоветуйте в комментариях интересные каналы по мобильной разработке? 🌐 @AppFiles
•
(iOS Ru) Организация и поддержка нативных UI-тестов в iOS•
(iOS En) SwiftUI Range Slider•
(iOS En) Swift Server Side Meetup•
(iOS En) SwiftData Value Transformers With Transformable•
(And Ru) Находим и увольняем low-перформеров•
(And En) Why YOU Have the WRONG Focus as an Android Developer•
(And En) 4 Ways To Debug Recomposition in Your Jetpack Compose UI•
(Dev Ru) Как сделать игру интересной•
(Dev Ru) Встраиваем Unity в мобильное приложение. Боль и костыли•
(Dev Ru) Особенности построения интерфейса для разных платформ•
(Dev Ru) Как проходит архитектурная секция в команду мобильной разработки Яндекс 360 (+ все собеседования)•
(Dev Ru) Настройка CI/CDПосоветуйте в комментариях интересные каналы по мобильной разработке? 🌐 @AppFiles
AppTractor
Организация и поддержка нативных UI-тестов в iOS
Surf iOS Developer Дима рассказал, как мы распределяем ответственность между командой iOS-разработки и AQA.
This media is not supported in your browser
VIEW IN TELEGRAM
Survey View - библиотека для Android, написанная на Jetpack Compose, позволяющая делать опросы.
Survey View на GitHub: https://github.com/zekierciyas/survey-compose
Платформа: Android
⭐️: 16
Survey View на GitHub: https://github.com/zekierciyas/survey-compose
Платформа: Android
⭐️: 16
Поля содержимого (content margin) в SwiftUI
В SwiftUI появился набор модификаторов представлений, позволяющий эффективно управлять безопасной областью в наших представлениях. Во многих случаях безопасная область — это то место, где вы хотите разместить свой контент. Сегодня мы узнаем о новой концепции content margin, которую представил SwiftUI, и о том, чем она отличается от safe area (безопасной области).
Статья: https://apptractor.ru/info/articles/polya-soderzhimogo-v-swiftui.html
Платформа: iOS
В SwiftUI появился набор модификаторов представлений, позволяющий эффективно управлять безопасной областью в наших представлениях. Во многих случаях безопасная область — это то место, где вы хотите разместить свой контент. Сегодня мы узнаем о новой концепции content margin, которую представил SwiftUI, и о том, чем она отличается от safe area (безопасной области).
Статья: https://apptractor.ru/info/articles/polya-soderzhimogo-v-swiftui.html
Платформа: iOS
👍2
Рекомпозиция в Compose: что не видно разработчику невооруженным глазом
Я рассмотрел основной и базовый механизм работы Сompose, на котором строится все остальное. В рамках статьи затронута только часть реализации, но именно это позволит понять, как все работает под капотом. Уже на данном этапе, даже не описывая реализацию remember, ясна суть устройства алгоритма работы данной функции.
А зачем знать, как это работает? Чтобы создать качественное приложение на Compose, требуется понимать правила игры. Иначе будет возникать много неочевидных моментов в виде подвисаний и некорректных отображений данных, которые в результате приводят к удалению пользователем продукта.
Статья: https://habr.com/ru/companies/astralinux/articles/810549/
Платформа: Android
Я рассмотрел основной и базовый механизм работы Сompose, на котором строится все остальное. В рамках статьи затронута только часть реализации, но именно это позволит понять, как все работает под капотом. Уже на данном этапе, даже не описывая реализацию remember, ясна суть устройства алгоритма работы данной функции.
А зачем знать, как это работает? Чтобы создать качественное приложение на Compose, требуется понимать правила игры. Иначе будет возникать много неочевидных моментов в виде подвисаний и некорректных отображений данных, которые в результате приводят к удалению пользователем продукта.
Статья: https://habr.com/ru/companies/astralinux/articles/810549/
Платформа: Android
YMFF - это небольшая библиотека, которая позволяет управлять функциями с помощью флагов функций и управлять самими флагами функций, благодаря макросам и оберткам свойств Swift.
YMFF поставляется полностью готовым к использованию прямо “из коробки” - вы получаете все необходимое для начала работы всего за несколько минут. Но вы также можете заменить практически любой компонент системы своей собственной, индивидуальной реализацией. Поставляемая реализация и протоколы хранятся в двух отдельных целях (YMFF и YMFFProtocols, соответственно).
YMFF на GitHub: https://github.com/yakovmanshin/YMFF
Платформа: iOS
⭐️: 27
YMFF поставляется полностью готовым к использованию прямо “из коробки” - вы получаете все необходимое для начала работы всего за несколько минут. Но вы также можете заменить практически любой компонент системы своей собственной, индивидуальной реализацией. Поставляемая реализация и протоколы хранятся в двух отдельных целях (YMFF и YMFFProtocols, соответственно).
YMFF на GitHub: https://github.com/yakovmanshin/YMFF
Платформа: iOS
⭐️: 27
Видео и подкасты за неделю:
•
•
•
•
•
•
•
•
•
•
•
Посоветуйте в комментариях интересные каналы по мобильной или не очень разработке? 🌐 @AppFiles
•
(iOS En) Design and build apps for watchOS 10•
(iOS En) Make features discoverable with TipKit•
(iOS En) Share files with SharePlay•
(And Ru) Всегда ли нужна чистая архитектура?•
(And En) What’s new in Android Studio Jellyfish•
(And En) Now in Android: 104 - Android Studio Jellyfish, A/B testing power consumption, AndroidX, and more•
(And En) Learn to Build a Multi-Module Running Tracker App + Wear OS App•
(And En) Three Simple Rules for Subtypes•
(Dev Ru) Будущее магазинов приложений•
(Dev Ru) 100% способ пройти собеседование•
(Dev Ru) Как увеличить свою продуктивность. Полный гайд по NotionПосоветуйте в комментариях интересные каналы по мобильной или не очень разработке? 🌐 @AppFiles
YouTube
WWDC23: Design and build apps for watchOS 10 | Apple
Dive into the details of watchOS design principles and learn how to apply them in your app using SwiftUI. We’ll show you how to build an app for the redesigned user interface to surface timely information, communicate focused content at a glance, and make…
SwiftOBD2 - это библиотека Swift, предназначенная для упрощения взаимодействия с автомобилями, использующими адаптер OBD2 (в том числе через Bluetooth Low Energy). Она предоставляет простой и мощный интерфейс для взаимодействия с бортовой системой диагностики вашего автомобиля, позволяя получать данные в реальном времени и проводить диагностику.
SwiftOBD2 на GitHub: https://github.com/kkonteh97/SwiftOBD2
Платформа: iOS
⭐️: 15
SwiftOBD2 на GitHub: https://github.com/kkonteh97/SwiftOBD2
Платформа: iOS
⭐️: 15
🔥2
Новые коллекции в Android
Зачем вообще нужно было строгать новые коллекции и переписывать старые?
На это есть как минимум три причины:
1. Эффективный расход памяти - думаю не секрет что даже при наличии 8Gb ОЗУ на вашем телефоне память не бесконечна, поэтому новые коллекции были написаны, придерживаясь принципа "минимум объектов".
2. Эффективная реализация алгоритмов - старые реализации могут содержать не очень эффективные алгоритмы и устаревшие решения, требующие рефакторинга.
3. Kotlin Multiplatform - при написании общего кода на Kotlin под разные платформы требуется минимальное количество зависимостей от платформенных структур данных, например таких как android.util.SparseArray.
А теперь перейдём к самой вкусной части статьи, разберёмся что за магические штуки наколдовали Google кодеры и самое главное как они работают под капотом.
Статья: https://habr.com/ru/articles/811415/
Платформа: Android
Зачем вообще нужно было строгать новые коллекции и переписывать старые?
На это есть как минимум три причины:
1. Эффективный расход памяти - думаю не секрет что даже при наличии 8Gb ОЗУ на вашем телефоне память не бесконечна, поэтому новые коллекции были написаны, придерживаясь принципа "минимум объектов".
2. Эффективная реализация алгоритмов - старые реализации могут содержать не очень эффективные алгоритмы и устаревшие решения, требующие рефакторинга.
3. Kotlin Multiplatform - при написании общего кода на Kotlin под разные платформы требуется минимальное количество зависимостей от платформенных структур данных, например таких как android.util.SparseArray.
А теперь перейдём к самой вкусной части статьи, разберёмся что за магические штуки наколдовали Google кодеры и самое главное как они работают под капотом.
Статья: https://habr.com/ru/articles/811415/
Платформа: Android
Создание онлайн видео плеера
Меня зовут Игорь, я занимаюсь мобильной разработкой в компании ГРИ, часть холдинга Sunlight. Сегодня хочу поделиться опытом создания плеера для воспроизведения плейлистов в форматах m3u и m3u8.
Статья: https://habr.com/ru/articles/810793/
Платформа: iOS
Меня зовут Игорь, я занимаюсь мобильной разработкой в компании ГРИ, часть холдинга Sunlight. Сегодня хочу поделиться опытом создания плеера для воспроизведения плейлистов в форматах m3u и m3u8.
Статья: https://habr.com/ru/articles/810793/
Платформа: iOS
Лучший способ структурировать iOS-проект
Важно поддерживать структуру проекта в чистоте и порядке. Когда вы работаете над большим проектом с сотнями файлов в большой команде, вы хотите, чтобы вы и ваши товарищи могли найти все, что вам нужно, в течение нескольких секунд. Проект должен быть организован с самого начала, и все члены команды должны следовать той структуре, которая у вас есть, потому что некоторые разработчики могут уйти, а новые могут присоединиться.
В этой статье я расскажу вам о некоторых распространенных ошибках, которые допускают junior-разработчики, и поделюсь тем, как я структурирую каждый проект, над которым работаю.
Статья: https://apptractor.ru/info/articles/luchshiy-sposob-strukturirovat-ios-proekt.html
Платформа: iOS
Важно поддерживать структуру проекта в чистоте и порядке. Когда вы работаете над большим проектом с сотнями файлов в большой команде, вы хотите, чтобы вы и ваши товарищи могли найти все, что вам нужно, в течение нескольких секунд. Проект должен быть организован с самого начала, и все члены команды должны следовать той структуре, которая у вас есть, потому что некоторые разработчики могут уйти, а новые могут присоединиться.
В этой статье я расскажу вам о некоторых распространенных ошибках, которые допускают junior-разработчики, и поделюсь тем, как я структурирую каждый проект, над которым работаю.
Статья: https://apptractor.ru/info/articles/luchshiy-sposob-strukturirovat-ios-proekt.html
Платформа: iOS