Обновить

Технотекст

Отображение возраста контактов в Гугл календаре на день их рождения

Уровень сложностиПростой
Время на прочтение3 мин
Охват и читатели6.2K

Я уже много лет пользуюсь Гугл календарём и Гугл контактами и единственная вещь которая мне не нравится это отдельный календарь, который не отображает возраст, а показывает только сам факт дня рождения. Ещё в 2019 году я написал скрипт, который решает эту проблему, но прошло 3 года и с помощью одного из читателей Хабра мы добавили склонения слов на русском языке при обозначения возраста и ещё несколько технических функций.

А ещё обновили похожий скрипт для детей: это когда каждый месяц скрипт автоматически создаёт событие в Гугл календаре, в заголовке к которому указано сколько исполнилось годов и месяцев вашему малышу (работает с самого рождения, 0 лет), а в описании указан возраст (годы и месяцы) каждого из родителей. Я сам обычно не помню даты и эти скрипты стали для меня настоящим спасением. 

Пошаговая инструкция внутри

Как внедрить KMM в существующие проекты и не пожалеть: теория, наш опыт и гайд

Время на прочтение18 мин
Охват и читатели8.2K

Новые технологии упрощают работу. Но если уже есть проект, на создание которого потрачено большое количество времени и денег, морально тяжело что-то менять. А мы рискнули, набили шишек, но теперь знаем, как внедрить новую технологию без проблем. В этой статье наш опыт — от провала до любви к Kotlin Multiplatform Mobile — и гайд, как перейти на нее легко и быстро.

Читать далее

Оптимизируй или сдохни: профилирование и оптимизация Jetpack Compose

Время на прочтение14 мин
Охват и читатели19K

В Google Play сыпятся жалобы на зависания и заторможенность вашего новенького-свеженького приложения на Compose? Вам пригодятся советы из данной статьи, чтобы это исправить.

Читать далее

Полдюжины правил для статического анализатора Detekt

Время на прочтение4 мин
Охват и читатели3.7K

Техлид Android-команды KODE Дмитрий Суздалев выпустил полноценный опенсорс-проект: набор улучшений для статического анализатора Kotlin-кода Detekt, которые обучают его проверять соблюдение различных правил при использовании библиотеки Jetpack Compose.

Набор правил попал в еженедельный Compose Newsletter, так что теперь самое время поделиться им с сообществом Хабра.

Читать далее

Core Data в современном интерьере SwftUI. Взаимосвязь объектов. Динамический @FetchRequest. часть 2

Время на прочтение18 мин
Охват и читатели3.2K
В первой части этой статьи мы рассмотрели основы работы с Core Data в SwiftUI на примере шаблонного приложения, предложенное Apple. Это было тривиальное приложение, в котором всего лишь один объект Core Data с одним единственным атрибутом, и тем не менее было показано, что давая объектам Core Data дополнительную функциональность с помощью „синтаксического сахара“ в расширении extension их классов class, автоматически генерируемых Xcode, можно добиться комфортной работы с Core Data в SwiftUI. Эти классы являются миниатюрными ViewModels для наших SwiftUI Views, так как они реализуют протоколы ObservableObject и Identifiable. И Apple научила их прекрасно «играть» на поле реактивности SwiftUI.

Во второй части статьи я хочу показать, что роль автоматически генерируемых Xcode классов class для объектов Core Data существенно возрастает при работе с реальными взаимосвязанными объектами — рейсами Flights, аэропортами Airports и авиакомпаниями AirLines, которые мы получаем в интернете на сайте компании FlightAware и размещаем в локальной базе данных Core Data.

Создаваемое в этой части статьи приложение с именем CoreDataSwiftUIFlights является сильно упрощенной модификацией реального приложения Enroute из стэнфордских курсов CS193P 2020, которое оперативно подкачивает данные с сервера FlightAware и требует от вас платной подписки на сервис FlightAware .

Однако, просто зарегистрировавшись на сайте компании FlightAware, вы можете бесплатно получить временной срез любой интересующей вас информации о рейсах Flights, аэропортах Airports и авиакомпаниях Airlines в JSON формате. Эти данные размещаются в Core Data с учетом взаимосвязей этих объектов, и вы можете не просто видеть всю информацию о рейсах, но и делать различные запросы к ней с помощью фильтров и сортировать ее нужным вам способом.



Код находится на Github.
Читать дальше →

Изморозь на пицце: делаем новогоднюю анимацию в Android-приложении

Время на прочтение5 мин
Охват и читатели5.3K

Всем привет! Новый год уже близко, а значит, самое время добавить новогодней атмосферы.

Мы в Dodo стараемся сделать приложения в первую очередь качественными, но и не забываем добавлять интересных фич для наших любимых клиентов. Так, например, мы создали анимацию «Летающая Пицца», а в канун Нового года решили сделать праздничную зимнюю анимацию под названием «Изморозь».

В статье поделюсь этим опытом и расскажу, как за несколько шагов сделать стираемую с экрана анимацию и в вашем приложении.

Читать далее

Danger. Автоматизируем ревью на CI и пишем свой плагин

Время на прочтение8 мин
Охват и читатели4.4K

Привет, я Татьяна Родионова, Android-разработчица в Lamoda. Как-то раз передо мной появилась задача упростить ревью пул-реквестов с помощью Danger. Я решила добавить автоматическую проверку код стайла, используя ktlint. Но оказалось, что Danger не поддерживает такое решение, поэтому я добавила такую проверку сама :) 

Моя статья поможет разобраться в том, как настроить Danger и как заставить его выполнять задачи немного сложнее тех, которые есть в официальном туториале.

Читать далее

Как добавить Live Activity в существующий проект. Часть I

Время на прочтение8 мин
Охват и читатели9.9K

Live Activity был показан Apple на презентации iOS 16 и нового iPhone с Dynamic Island. Обновление доступно только для тех, кто обновил iOS до 16.1. 

Меня зовут Азиз, я iOS-разработчик в inDrive. В статье расскажу, как мы добавляли Live Activity в наше iOS-приложение. Постараюсь ответить на все вопросы, которые возникли у нас в процессе разработки.

Читать далее

Сборка мусора во Flutter

Время на прочтение4 мин
Охват и читатели8.3K

В РСХБ мобильную разработку мы ведём преимущественно на Flutter. В новой статье поговорим об алгоритме, который используется в любом приложении – о сборщике мусора (англ. Garbage collection). Его основной задачей, как в любом высокоуровневом языке программирования, является наблюдение за ссылками и очистка областей памяти с целью предотвращения переполнения памяти. Под катом рассказываем о том, как во Flutter работает процесс сборки “мусора” - неактивных и неиспользуемых ссылок, а также локальных и глобальных экземпляров языка Dart.

В языке Dart применяется сборщик мусора по поколениям объектов. Сборщик мусора для сборки экземпляров с коротким жизненным циклом и сборщик мусора для долгоживущих экземпляров, переживших более одного цикла сборки мусора.

В процессе сборки мусора слой Framework Dart создает канал взаимодействия со слоем Flutter Engine, посредством которого узнает о моментах простоя приложения и отсутствия пользовательского взаимодействия. В эти моменты Framework Dart запускает процесс оптимизации памяти, что позволяет сократить влияния на пользовательский опыт и стабильность приложения. Кроме того, в процессе работы приложения используется скользящее сжатие, что сводит к минимуму нагрузку на память за счет уменьшения фрагментации памяти.

Читать далее

Как обработать deep link со сложным path? Вот так

Время на прочтение10 мин
Охват и читатели3.9K

Привет, Хабр! Хоть раз приходилось настраивать deep link? А для такого scheme://domain/path/user/2022?

В Android это сделать непросто. Нет никаких инструментов для обработки сложных path в deep link. По крайней мере, их не было до этого дня…

Узнать, как обработать сложный path

За гранью App Store, или Что нового открывает MDM и Supervised для B2B в iOS

Время на прочтение14 мин
Охват и читатели14K
Привет! Меня зовут Денис Кудинов, я iOS-Development team lead в «Лаборатории Касперского». В этой статье расскажу об Mobile Device Management, а также о supervised- и BYOD-режимах — как работает технология и что с ее помощью можно сделать такого, что недоступно обычным приложениям из App Store. Считайте это презентацией возможностей Configuration Profiles, да и Apple MDM в целом :)

image

Статья будет полезна разработчикам B2B-приложений для iOS, которые хотят разбавить свои инструменты новыми фичами, а также для product owner-ов и бэкенд-разработчиков, которые хотят поддержать взаимодействие с мобильными устройствами.
Читать дальше →

Улучшаем производительность android-приложения с помощью Baseline profiles

Время на прочтение7 мин
Охват и читатели14K


Производительность важна для формирования положительного пользовательского опыта использования приложения, поэтому разработчики стремятся ускорить работу своих программ. Для приложений в области безопасности важно время инициализации: пара секунд может стать роковой для пользователя. Поэтому в «Лаборатории Касперского» мы пристально следим за производительностью наших приложений, анализируем влияние новых доработок на ключевые метрики и регулярно улучшаем их.

В большинстве случаев работа над производительностью сводится к оптимизации исходного кода: сперва находят узкие места при помощи метрик, утилит и инструментов, затем разработчик обращается к коду для поиска и устранения проблем. Иногда Google предоставляет дополнительные возможности для оптимизации. Baseline profile стал одной из таких возможностей и был анонсирован совсем недавно. Безусловно, такие доработки очень приятны для разработчиков и полезны для приложений, поэтому мы с огромным интересом знакомимся с новой возможностью и начинаем применять ее к нашему проекту.

В этой статье я хочу поделиться нашим опытом и результатами. Сперва мы коротко вспомним виды компиляции в Android, поймем принцип, на котором основывается данная оптимизация. Затем ознакомимся с пошаговой инструкцией по интеграции в свой проект и посмотрим на полученные результаты. В конце я расскажу о наших дальнейших шагах и планах.
Читать дальше →

Дизайн-система в inDriver: не пытайтесь покинуть Oymyakon

Время на прочтение6 мин
Охват и читатели4.5K

Всем привет, я Алексей, iOS-разработчик в inDriver. Наше приложение представляет собой суперапп с множеством сервисов и услуг: городские, межгородские и грузовые поездки, курьерская доставка, услуги мастеров и так далее. Над каждым сервисом работают отдельные команды, которые имеют свободу принятия решений и вольны делать с продуктом почти все, что захотят.

Но давайте представим, что им дали полную свободу в дизайне. Что из этого может получиться? Скорее всего, хаос. Поэтому у нас есть команда дизайн-системы, о которой я и расскажу под катом. 

Читать далее

Яндекс выпускает Yatagan — опенсорс-фреймворк для внедрения зависимостей, позволяющий ускорить сборку

Время на прочтение29 мин
Охват и читатели25K


Меня зовут Фёдор Игнаткевич, я делаю приложение Яндекс и мобильный Яндекс Браузер для Android. Примерно год назад я предложил команде идею фреймворка для внедрения зависимостей, который более чем вдвое ускорил сборку обоих проектов и который мы сегодня выложили на Гитхаб — чтобы разработчики других приложений тоже могли улучшить скорость сборки. Я с нуля реализовал фреймворк, а затем мы вместе с командой интегрировали его в проекты и сейчас активно используем.

Как раз про свой опыт разработки я и хочу рассказать. Давайте попробуем разобраться, какие есть факторы замедления сборки, как Yatagan, совместимый с Dagger по API, с ними справляется и какие ещё задачи могут стоять перед DI-фреймворком — например, в части зависимостей под рантайм-условиями. Кстати, нативная поддержка этих зависимостей в Yatagan избавила нас от ручной обработки состояний A/B-экспериментов в DI.

Статья содержит много технических моментов, которые я открыл для себя по ходу исследований. В конце посмотрим, каким проектам Yatagan может быть полезен в качестве замены, а в каких польза от него будет невелика.
Читать дальше →

Яндекс выпускает DivKit — фреймворк для server-driven UI с открытым кодом

Время на прочтение12 мин
Охват и читатели65K
Привет! Сегодня Яндекс выкладывает в опенсорс DivKit — фреймворк для отрисовки интерфейсов из ответа сервера. Серверная вёрстка поможет ускорить разработку: наладить отправку апдейтов от сервера разным версиям приложения, создать прототип или просто написать интерфейс один раз для нескольких платформ.


Фреймворк включает в себя несколько библиотек: клиентскую часть по отрисовке интерфейсов для Android, iOS и веба, а также DSL для формирования ответа сервера на Kotlin, TypeScript и Python. Исходный код опубликован на Гитхабе под лицензией Apache 2.0.

Сейчас DivKit используется в приложении Яндекс, Алисе, Едадиле, Маркете, ТВ и других приложениях. В этом посте я постараюсь вспомнить историю фреймворка, затем мы напишем с его помощью небольшой просмотрщик ленты Хабра, а в конце я покажу ещё несколько простых примеров интеграции.
Читать дальше →

Зачем Clojure Flutter

Время на прочтение13 мин
Охват и читатели9.1K

”Если вам нравятся Руби, Свифт, Дарт, Эликсир, Эльм, С++, Питон или даже С, используйте их ради бога. Но выучите Кложур, и выучите его хорошо” — Дядя Боб (твит, а также твиты: 1, 2, 3).

Статей о Clojure написано много, цель этой — дать свое видение некоторых преимуществ языка для кросплатформенной разработки на Flutter. Ориентируюсь в первую очередь на dart-разработчиков, но статья может быть интересна всем, кто работает с Clojure и/или Flutter.

Читать далее

Kotlin Symbol Processing. От теории до практики

Уровень сложностиСредний
Время на прочтение28 мин
Охват и читатели18K

Я расскажу в этой статье о Kotlin Symbol Processing, также известном как KSP.

Сначала обсудим теоретические основы работы KSP, после, конечно же, перейдём к практике. На примере небольшой задачи, подобной той, что мы решаем с помощью KSP в нашей компании, покажу, как анализировать код с помощью KSP, генерировать файлы, соблюдать контракты, описанные разработчиками KSP. 

Читать далее

Как мы создали Digital Workplace для сотрудников

Время на прочтение6 мин
Охват и читатели12K

Коллективу Альфа-Банка и корпоративным коммуникациям больше 30 лет. За нашу историю накопилось огромное количество систем, которые внедрялись разными командами. Отпуска мы планируем в SAP HCM, командировку оформляем в SAP АХД, кандидатов ведём в E-Staff, обучение проходим в WebTutor — список внушительный. Что это значит для сотрудника? У каждой системы свой интерфейс, и нужно разбираться, где что находится. Неудобно.

Неудобства проявлялись не так явно, когда команда собиралась в офисе. В нём проще выдать доступы, бэйджи, распечатать заявления, отнести на подпись, забрать. Но весной 2020-го, когда все ушли на удалёнку, появились пробелы в коммуникациях и процессах. При этом в пандемию мы также должны были нанимать, но без визита в HR и вовлекать в корпоративную жизнь сотрудников, работающих из дома. В статье расскажем, как мы решили эти проблемы, создав единую площадку, где можно оформить документы, начислить премию или забронировать место в коворкинге.

Материал будет больше полезен HR и руководителям.

Читать дальше

Знакомьтесь: библиотека TiRecycler

Время на прочтение9 мин
Охват и читатели7.4K

Всем привет! Меня зовут Александр Гузенко, и в Тинькофф я занимаюсь всякими техническими вещами вроде CI/CD, gradle и внедрением новых подходов. Хочу рассказать вам про библиотеку, которую мы создали в команде Тинькофф Бизнеса, когда столкнулись с многословными адаптер-делегатами.

Прочитать подробнее

Как снимать логи с устройств на Android и iOS: разбираемся с инструментами

Время на прочтение8 мин
Охват и читатели167K

Краткая инструкция по чтению и разбору логов мобильных устройств на Android и iOS, а также необходимые инструменты для Windows и MacOS.

Статья подготовлена red_mad_robot и «Альфа-Банком» на основе доклада Senior QA red_mad_robot Ольги Никитиной «Инструменты для снятия логов с Android / iOS устройств. Чтение и разбор» на митапе «QАчественное общение» при поддержке red_mad_robot.

Читать далее
1