Как стать автором
Обновить
25
0

Пользователь

Отправить сообщение

Создавай и упрощай: оптимизируем Android-приложение с видеоконтентом

Уровень сложностиСредний
Время на прочтение5 мин
Количество просмотров662

Современные мобильные приложения с пользовательским контентом играют огромную роль в нашей повседневной жизни. Сейчас почти не встретишь людей, особенно подростков, кто не пользовался бы такими сервисами, как TikTok, YouTube, ВКонтакте и соцсетью с картинками. На волне хайпа вертикальных коротких многие платформы и соцсети разработали собственные аналоги TikTok и YouTube, где стал популярен такой формат.

Поскольку просмотр видео является основной функцией подобных приложений, следует учитывать, чтобы именно эта часть была более надежной. Рассмотрим поближе формат вертикальных коротких видеороликов. Здесь важно, чтобы процесс перехода между другими видео и их загрузкой занимал минимальное количество времени, и пользователь меньше отвлекался в процессе просмотра контента. И, таким образом, пользователь наверняка проведет больше времени в приложении, что в свою очередь позволит показать ему больше контента или рекламы, вместо ожидания загрузки.

Меня зовут Рустам и я Android‑разработчик в компании SimbirSoft. Рекомендую свою статью тем, кто сталкивается с видеоконтентом на проектах, и кому хотелось бы оптимизировать свою работу с ним. Я рассказал о таких методах на примере стандартных инструментов из библиотеки ExoPlayer, поэтому у middle‑разработчиков и выше не должно возникнуть трудностей.

Читать далее
Всего голосов 2: ↑2 и ↓0+4
Комментарии1

Быстрый старт, или Как ускорить запуск iOS-приложений

Уровень сложностиСредний
Время на прочтение7 мин
Количество просмотров2.7K

Всем привет! Меня зовут Фируза, я iOS-разработчик в компании SimbirSoft. В этой статье мы попробуем разобраться, как ускорить запуск приложения, а именно:

что происходит от момента нажатия на иконку приложения до представления возможности пользователю взаимодействовать с UI;

как собрать актуальные метрики скорости запуска и отзывчивости приложения; 

какие тактики применить, чтобы ускорить старт и отзывчивость запуска.

Статья будет полезна для iOS-разработчиков любого уровня, желающих улучшить производительность своих приложений.

Ускориться ?
Всего голосов 7: ↑7 и ↓0+7
Комментарии5

Step by step: интегрируем интерактивные 2D/3D-объекты в iOS-приложение

Уровень сложностиСредний
Время на прочтение10 мин
Количество просмотров1.6K

Привет, Хабр! Меня зовут Степан, я iOS-разработчик SimbirSoft.

В очередной раз открыв одно из ежедневных приложений, я обнаружил любопытную фичу: интерактивный 3D-элемент в виде звездочки. Казалось бы, ничего необычного, но это сделало взаимодействие с приложением немного приятнее. Так появилась идея для пет-проекта — нативно создать MVP интерактивного 3D-объекта.

Данная статья — step by step от интерактивных 2D-объектов к 3D. В конце статьи вы найдете ссылку на репозиторий.

Читать далее
Всего голосов 5: ↑5 и ↓0+5
Комментарии0

Полезные iOS-инструменты для дебаггинга

Уровень сложностиСредний
Время на прочтение15 мин
Количество просмотров7.7K

Привет! Меня зовут Альберт, я занимаюсь iOS-разработкой в компании SimbirSoft! Хочу поделиться инструментами для дебаггинга iOS-приложений, которые юзаю лично сам. Любой разработчик наверняка знает, что создание высококачественного приложения требует не только написания кода. Одна из важнейших составляющих достижения успеха в этом деле — эффективная отладка. К счастью, существует множество инструментов, которые помогут быстро и эффективно диагностировать, а также устранять проблемы. В этой статье мы подробно рассмотрим нативные и сторонние инструменты, доступные для отладки iOS-приложений, как использовать эти инструменты для диагностики и устранения распространенных проблем. Если интересно, тогда ныряйте под кат.

Читать далее
Всего голосов 5: ↑5 и ↓0+5
Комментарии15

Интеграция рекламы в Android-приложение: Yandex Mobile Ads Vs. Google AdMob

Уровень сложностиСредний
Время на прочтение13 мин
Количество просмотров11K

Привет, Хабр! Меня зовут Александр, я Android-разработчик в IT-компании SimbirSoft. В конце 2022 года на одном из проектов мы с командой столкнулись с трудностями в работе мобильной рекламы — тогда у нас была подключена сеть AdMob от Google. Приходилось искать много обходных путей для продолжения монетизации приложения. Поэтому решили мигрировать на платформу, с которой не будет проблем из-за санкций. Коллеги-аналитики взялись изучить доступные платформы. 

Я поделюсь результатами этой работы и совместными выводами. Но главным образом разберу процесс интеграции Google AdMob и Yandex SDK, их плюсы и минусы, шаги интеграции, и расскажу, почему мы выбрали Yandex SDK. 

Сегодня использовать зарубежные решения не столько сложно, сколько бессмысленно, если пользователи находятся в России. Многие провайдеры уходят из страны и отказываются выплачивать доход от рекламы, бизнес теряет деньги. Статья будет полезна Android-разработчикам, которые столкнулись с выбором SDK.

Читать далее
Всего голосов 3: ↑2 и ↓1+2
Комментарии4

Combine: часть 2. Вершина айсберга

Уровень сложностиСредний
Время на прочтение15 мин
Количество просмотров8.1K

Привет, Хабр! На связи Сергей, iOS-разработчик в компании SimbirSoft.

В прошлой статье мы познакомились с концепцией реактивного программирования с использованием фреймворка Combine и сравнили его с RxSwift. В этой части мы более подробно разберем виды основных компонентов Combine, а также их отличия и способы применения.

Интеграция Combine в проект будет полезна для обеих сторон — бизнеса и команды разработки:

1. Процесс работы становится быстрее, а значит дешевле.

2. Фреймворк считается достаточно модным. Есть большое количество разработчиков, которым нравится использовать реактивный подход, и которые хотят поработать с новым инструментом — повышается интерес соискателей к вакансиям, в которых фигурирует эта технология.

3. Combine способствует легкой поддержке и удобном переходе на современные технологии в будущем (например, на SwiftUI).

Читать далее
Всего голосов 2: ↑2 и ↓0+2
Комментарии0

Как настроить автомиграцию в Room

Уровень сложностиСредний
Время на прочтение7 мин
Количество просмотров4.1K

Привет, Хабр! Меня зовут Роман, я Android-разработчик в IT-компании SimbirSoft. В этой статье я расскажу про автомиграцию в Room (версия не ниже Room 2.4.0), варианты ее использования, преимущества, которые она дает, и проблемы, с которыми мы можем столкнуться.

Автомиграция поможет упростить процесс работы с базой данных, особенно если она большая, и в нее часто вносятся изменения. Она позволит не писать самостоятельно сложные SQL-запросы, а сгенерирует их автоматически в специально отведенной директории. Это позволит избежать опечаток при миграции и сэкономить время (если у нас запросы с огромным количеством полей).

Дисклеймер: в этой статье я буду ориентироваться на то, что мы уже умеем работать с Room и знаем, для чего нужна миграция. Материал будет полезен Android-разработчикам уровня Middle.

Читать далее
Всего голосов 5: ↑5 и ↓0+5
Комментарии0

Как не потерять голову (и память) при поиске утечек в iOS

Уровень сложностиСредний
Время на прочтение6 мин
Количество просмотров8K

Всем привет! Меня зовут Фируза, я занимаюсь iOS-разработкой в компании SimbirSoft. Хочу поделиться результатами исследования утечек памяти, с которыми я столкнулась на одном из проектов.

Все началось с того, что я заметила подтормаживания UI и обратила внимание на рост занимаемой памяти в процессе использования приложения. В пределах нескольких сценариев расход памяти незначительно колебался – объекты создавались и освобождались. Другие сценарии при непродолжительном использовании приводили к значительному росту памяти, используемой приложением. При активном и продолжительном использовании могут «убежать» сотни мегабайт.

Утечки памяти – это частая проблема, с ней сталкиваются многие разработчики. Поэтому предлагаю разобрать основные причины возникновения и способы обнаружения утечек.

Статья будет интересна для iOS-разработчиков любого уровня. Изучив материал, вы сможете увеличить производительность вашего приложения, а также разобраться в том, как работают инструменты Xcode.

Читать далее
Всего голосов 4: ↑4 и ↓0+4
Комментарии3

Один плагин, чтоб править всеми. Как разработать сканер на Flutter для 3 платформ и ускорить ввод данных в 2 раза

Уровень сложностиСредний
Время на прочтение11 мин
Количество просмотров5.5K

Привет! Меня зовут Сергей, я Flutter‑разработчик SimbirSoft. В этой статье хочу поделиться интересным платформоспецифичным кейсом для мобильных устройств и ТСД. Нам с командой удалось сократить затраты на разработку и ускорить процесс ввода данных в 2 раза.

Клиент располагает крупными товарными складами, на которых сотрудники используют сканеры 1-D/2-D кодов — это смартфоны на iOS, Android, а также терминалы сбора данных с установленным Flutter‑приложением для сборки заказов. Нашей задачей стало обновить плагин сканера, не привлекая отдельные команды для разных платформ.

Очевидно, что данная функциональность сильно полагается на платформу, и Flutter из коробки не умеет работать с ТСД. Как мы решили эту задачу, расскажу по порядку, а в конце поделюсь результатами тестов и ссылкой на исходный код. Спойлер: по сравнению с ручным вводом штрихкодов скорость выросла в 13,4 раза, а с предыдущей версией сканера — в 2 раза.

Подобный кейс применим везде, где требуется сканировать 1-D/2-D коды в большом количестве. Поэтому материал будет полезен разработчикам кроссплатформенных приложений для решения подобных задач, а также их заказчикам.

Читать далее
Всего голосов 8: ↑8 и ↓0+8
Комментарии12

Combine: часть 1. Погружение в реактивное программирование

Время на прочтение10 мин
Количество просмотров15K

Привет, Хабр! Меня зовут Сергей, я iOS-разработчик в компании SimbirSoft.

Уже наступил 2023 год, а обсуждения на тему выбора инструмента для обработки асинхронных событий не утихают. На сцене привычные колбэки, нотификейшн-центры с «бородатыми» Objective-C-селекторами, разные фреймворки для реактивной разработки, а не так давно Apple представила модный Swift Concurrency.

Combine все больше набирает популярность в продакшене. За счет нативного происхождения у него хороший уровень оптимизации, его легко «склеивать» как с существующими легаси-инструментами, так и с новыми — SwiftUI или async/await.

Пестрый «зоопарк» заставляет задуматься: что выбрать для нового проекта, а что для приложения с многолетней историей?

Поскольку Combine является отличным претендентом для разработки современных приложений с перспективой на будущее, о нем и поговорим подробнее.

Это первая часть статьи, где мы познакомимся с Combine, сравним его с RxSwift. Материал будет полезен для тех, кто до этого не сталкивался с реактивщиной, а также тем, кто успел поработать с аналогичными инструментами.

Читать далее
Всего голосов 3: ↑3 и ↓0+3
Комментарии5

Состояние навигации в Jetpack Compose

Время на прочтение21 мин
Количество просмотров9.6K

Хотя стабильная версия Jetpack Compose вышла уже достаточно давно, вопрос навигации в Compose до сих пор остается одним из самых обсуждаемых в сообществе Android-разработчиков. Именно поэтому мы решили перевести статью, в которой автор указывает на проблемы официального решения навигации для Compose, перечисляет плюсы и минусы популярных библиотек-альтернатив, а также на основе своего опыта разработки рассуждает о том, какой функциональностью должен обладать хороший фреймворк навигации. 

Данная статья будет полезна Android-разработчикам, которые встали перед выбором подходящей библиотеку навигации для проекта на Jetpack Compose.

Читать далее
Всего голосов 3: ↑3 и ↓0+3
Комментарии1

Генерация кода API клиента приложения на основе пакета dart openapi generator

Время на прочтение6 мин
Количество просмотров11K

Привет! Меня зовут Даниил, около трех лет я занимаюсь mobile-разработкой. В начале работы над коммерческими проектами с использованием Flutter и языка Dart мне приходилось тратить много часов на реализации методов обращения к REST API бэкенда проекта. Тогда я задумался, как можно оптимизировать написание кода сервисов,  которые работают с удалённым сервером заказчика. Это позволило мне сократить трудозатраты и время на разработку почти в 10 раз, а клиенту — быстрее  получать готовый продукт.

В этой статье я рассмотрю целесообразность и практический опыт кодогенерации для клиентский приложений написанных на Flutter, REST API с помощью таких библиотек, как openapi_generator и swagger_dart_code_generator.

Читать далее
Всего голосов 4: ↑4 и ↓0+4
Комментарии2

Диспетчеризация в Swift: погружение в теорию и практику

Время на прочтение6 мин
Количество просмотров32K

Все iOS-разработчики так или иначе сталкиваются с диспетчеризацией (Method Dispatch), но далеко не каждый понимает, как это работает. Зная, как проходит процесс диспетчеризации под капотом программы, вы можете повысить производительность своего кода. 

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

Материал будет полезен для всех iOS-разработчиков, которые хотят улучшить производительность своего кода. Кроме того, этот материал поможет при подготовке к собеседованию, где вопросы о Method Dispatch встречаются достаточно часто.

Читать далее
Всего голосов 5: ↑4 и ↓1+3
Комментарии10

Сравниваем готовые решения для реализации MVI-архитектуры на Android

Время на прочтение8 мин
Количество просмотров19K


Когда прежние инструменты не соответствуют растущей сложности программ, появляются новые подходы в программировании, паттерны проектирования. MVI помогает там, где не справляются MVP- и MVVM-подходы. Сейчас, в том числе, этот подход активно используется и на многих крупных приложениях. В одних случаях MVI задействован только на части экранов, в других – все экраны построены на нем. В нашей команде знание MVI – одно из обязательных требований.

В этой статье мы разберем решения для реализации MVI-архитектуры на Android, большинство из которых применимы в работе. Описали их преимущества и недостатки, основываясь на опыте коллег и собственной практике. Материал будет полезен для разработчиков, ещё не знакомых с паттерном MVI, и для тех, кто выбирает библиотеку для своего проекта.
Читать дальше →
Всего голосов 4: ↑4 и ↓0+4
Комментарии2

Разбираем SceneDelegate и AppDelegate в iOS 13

Время на прочтение4 мин
Количество просмотров17K

Продолжаем делиться своей практикой и переводами статей, которые могут быть полезны мобильному разработчику. В прошлых статьях мы разобрали инструменты тестирования и оптимизацию внедрения зависимостей в Android, а сейчас рассмотрим одно из нововведений в iOS 13 – поддержку многооконного режима и разделение AppDelegate (жизненный цикл и настройка приложения) и SceneDelegate (отображение приложения). 

От автора: Ещё до Xcode 11, при создании нового проекта вы знали, что по умолчанию создаются некоторые файлы, такие как AppDelegate.swift, ViewController.swift и StoryBoard, а также некоторые другие. Но в Xcode 11 вы могли заметить, что наряду с файлами по умолчанию, указанными выше, создается новый файл – SceneDelegate.swift.

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

Читать далее
Всего голосов 3: ↑3 и ↓0+3
Комментарии0

Инструменты разработчика для тестирования Android-приложений

Время на прочтение7 мин
Количество просмотров9.2K

В командной разработке тесты – это, как правило, задача QA- и SDET-специалистов. Вместе с тем навыки тестирования полезны и разработчикам, позволяя им проверить свои приложения и повысить стабильность их работы.

Эта статья предназначена в первую очередь начинающим мобильным разработчикам, которые хотят изучить процессы тестирования и свое участие в них. На примере  Android-разработки обсудим подходящие инструменты тестирования – от JUnit до Kaspresso, а также немного познакомимся с методологиями Test Driven Development (TDD) и Behaviour Driven Development (BDD). Наконец, рассмотрим их отличия на примере кейса.

Читать далее
Всего голосов 3: ↑3 и ↓0+3
Комментарии2

Многомодульность в Android и Dagger: пошаговый пример

Время на прочтение17 мин
Количество просмотров14K

Наше мобильное направление продолжает делиться собственным опытом, а также переводить те статьи, которые могут сослужить разработчику хорошую службу. Эту статью по Android, написанную в 2020 году, мы выбрали, изучая вопросы оптимизации внедрения зависимостей на проекте, и перевели с разрешения автора. С практической точки зрения он освещает проблемы, возникающие при использовании Dagger в многомодульном проекте, и дает рекомендации о том, как их избежать, сохранив при  этом гибкость и поддерживаемость кода.

Если вы только начинаете погружаться в тему многомодульности и Dagger, эта статья поможет избежать ряда проблем и быстрее решить те, с которыми вы уже могли столкнуться. Разработчики с опытом тоже, вероятно, найдут для себя полезные советы или же идеи, которые подскажут новые пути для того, чтобы улучшить свои способы решения задач, связанных с зависимостями в многомодульном проекте.

От автора: прежде, чем мы начнем, стоит отметить, что статья будет длинной. Вместе мы шаг за шагом найдем различные решения возникающих проблем и рассмотрим требования к продукту. Целью было поэтапно показать, как с помощью Dagger внедрять зависимости в многомодульном проекте. Для каждого шага будет дана ссылка на коммит, в котором сделаны эти изменения, кроме того, покажем некоторые фрагменты кода.

Читать далее
Всего голосов 5: ↑5 и ↓0+5
Комментарии1

Работа с ML Kit в Android: как распознавать штрихкоды

Время на прочтение5 мин
Количество просмотров8.1K

Первую в мире покупку по штрихкоду относят к 26 июня 1974 года – это была упаковка жевательной резинки в одном из супермаркетов США. Считывая информацию со штрихкода, по различным оценкам, можно ускорить операции с товарами в среднем на 30%. Сейчас штрихкоды сканируют и продавцы, и работники склада, и покупатели – например, если они хотят сделать покупку на кассе самообслуживания.

В статье рассмотрим некоторые особенности распознавания штрихкодов с помощью библиотеки ML Kit. Материал может быть полезен как начинающим разработчикам с базовыми навыками, так и опытным специалистам, которые хотят изучить новый инструмент.

ML Kit – это бесплатный мобильный SDK от Google, который позволяет использовать машинное обучение на устройствах с операционными системами Android, iOS и Flutter. В мобильной разработке это, пожалуй, простейший способ для добавления нейронных сетей в приложение. В свою очередь, это позволяет упростить реализацию некоторых функций.

Читать далее
Всего голосов 3: ↑2 и ↓1+1
Комментарии6

Реализуем чистую архитектуру на Flutter с cubit

Время на прочтение8 мин
Количество просмотров20K

Соблюдать принципы чистой архитектуры – значит обеспечить удобство тестирования, поддержки и модернизации приложения. Понимание архитектуры и state management – это база, необходимая начинающему специалисту для успешной командной работы. В этой статье мы расскажем, как с помощью Cubit реализовать чистую архитектуру на примере стартового приложения Flutter – счетчика нажатий на кнопку. 

Читать далее
Всего голосов 4: ↑3 и ↓1+2
Комментарии15

Flutter: открытие виджетов ключами

Время на прочтение12 мин
Количество просмотров9.7K

Всем привет! Мы продолжаем делиться полезными советами для мобильных разработчиков. С разрешения автора переводим свежий гайд по ключам Flutter, который может быть интересен как начинающим, так и опытным специалистам.

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

А вы задумывались, когда нужно использовать ключ и что происходит “под капотом”? В этом руководстве мы найдем ответ, создав простое приложение для управления списком задач и отображения заголовков новостей. Вы узнаете:

- Какие бывают ключи и как они работают.

- Когда использовать ключ.

- Как работать с разными типами ключей

Читать далее
Всего голосов 2: ↑2 и ↓0+2
Комментарии6
1

Информация

В рейтинге
Не участвует
Работает в
Зарегистрирован
Активность