Обновить

Мобильная разработка

Сначала показывать
Порог рейтинга

TalkBack в 2ГИС

Уже несколько лет мы поддерживаем VoiceOver на iOS — это был сложный и многоступенчатый путь к доступности приложения. После релиза мы увидели, что это реально работает, и людям с нарушением зрения стало проще пользоваться 2ГИС. В этом году мы решили, что пришло время для Android. 

Под капотом — собственный мини-фреймворк

Дальше рассказывает ведущий разработчик Дмитрий Торопчин.

Когда начинаешь делать доступность под Android, кажется, что всё уже предусмотрено. Каждый View знает, как предоставить своё описание для служб доступности, как выполнять действия и какие события отправлять после их выполнения.

2ГИС устроен немного иначе: наш интерфейс написан на Qt Quick и с точки зрения Android это один пустой View. Никаких кнопок, списков и текстовых полей TalkBack «внутри» не видит. Сам Qt предоставляет кроссплатформенный API для работы со службами доступности из Qt Quick, но его платформенная интеграция для Android на данный момент поддерживает весьма ограниченный набор методов, которого категорически не хватает для разработки по-настоящему удобных и доступных приложений.

Поэтому мы решили написать свой мини-фреймворк для работы со службами доступности Android из Qt Quick. Основную архитектуру мы подсмотрели в Qt:

  • визуальные элементы в Qt Quick размечаются через attached-свойства;

  • из этой разметки получается дерево accessibility-узлов, управляемое из C++;

  • это дерево accessibility-узлов предоставляется службам доступности Android через virtual view hierarchy посредством JNI.

При этом мы добавили поддержку многих недостающих API из Android SDK:

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

  • научились описывать коллекции элементов;

  • поддержали автоматическую прокрутку списков при перемещении accessibility-фокуса;

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

Пользовательские сценарии

Мы честно признали, что озвучить всё приложение сразу невозможно. Поэтому сделали MVP. Теперь можно:

  • найти место и узнать актуальную информацию о нём;

  • прослушать карточку организации и быстро сориентироваться в деталях;

  • позвонить по контактному номеру прямо из карточки;

  • построить маршрут и пройти его шаг за шагом;

  • понять, какой транспорт подходит, где садиться и на какой остановке выходить.

Для этих сценариев мы разметили 555 UI‑элементов.

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

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

Критический успех

4 июня собираемся с мобильными разработчиками в атмосфере любимых фэнтези и настольных ролевых игр — на Alfa Mobile D&D party. Впереди приключение для истинных авантюристов: объединяйтесь в отряды и открывайте секреты башни.

Друиды поделятся мудростью:

 С техническим лидером Android-разработки Виталием Перятиным обсудим, что на самом деле под капотом у MCP. Спойлер: всё просто

 С ведущим iOS-разработчиком Петросом Тепояном погрузимся в мир ИИ-разработки и приключений, или Туда и обратно

Завершим игру вечеринкой. Советуем подумать над образом своего персонажа: за 3 лучших подарим подарки!

Где: в секретном баре в Москве. Локацию пришлём с соколом в письме.

Регистрируйтесь на приключение!

Теги:
Всего голосов 2: ↑0 и ↓2-2
Комментарии0

Как сделать мобильное приложение для УК, которое не удалят?

CTO Doubletapp Никита Анчутин выступил на «Неспальном митапе» от Сделка.рф — неформальной встрече девелоперов и цифровизаторов. Никита рассказал, как сделать приложение для управляющей компании, которым жильцы реально будут пользоваться, а не удалят сразу после установки.

Часто приложения УК не приживаются: жильцы ими не пользуются, а УК не получают обратной связи. Причина — разрыв между ожиданиями пользователей и видением заказчика. В видео — инструкция, как создать цифровой инструмент, который станет качественным посредником между сторонами:

  • поможет УК слышать жильцов и оперативно решать проблемы;

  • даст жителям удобный доступ к услугам и каналам коммуникации;

  • объединит интересы обеих сторон в одном интерфейсе.

В видео — разбор: как совместить потребности жильцов и УК; какие функции критически важны для обеих сторон; каких ошибок заказчикам стоит избегать при постановке задач.

Будет полезно девелоперам, продуктовым менеджерам, представителям УК и застройщиков, UX/UI‑дизайнерам и IT‑руководителям.

Doubletapp — IT‑компания, разрабатывающая мобильные приложения с 2015 года. Мы создаём эффективные инструменты для бизнеса и удобные решения для пользователей.

Теги:
Всего голосов 2: ↑1 и ↓10
Комментарии0

Инструменты, которые упрощают iOS-разработку

Старый код усложняет рефакторинг, тесты в команде запускаются по‑разному, баги не воспроизводятся на хорошем Wi‑Fi, а после обновления инструментов локальная сборка начинает расходиться с CI — по отдельности все это мелочи, но именно они постепенно начинают тормозить разработку.

Ринат, iOS‑разработчик Naumen, рассказал об инструментах, которые помогают ему решать такие задачи и упрощать повседневную работу.

  • Periphery: поиск мертвого кода в Swift‑проектах

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

Periphery помогает находить такие места и наводить порядок перед изменениями в кодовой базе.

Как использую

Запускаю Periphery перед рефакторингом — например, когда нужно обновить модуль профиля с сотнями файлов.

periphery scan

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

Что важно знать: результаты всегда нужно проверять вручную. Инструмент может не учитывать динамические вызовы, reflection, Objective-C runtime, storyboard-ссылки или код, который используется через строки.

  • Network Link Conditioner: тестирование слабой сети

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

Network Link Conditioner — инструмент от Apple, который помогает эмулировать разные сетевые условия. Например, индикатор загрузки крутится бесконечно, повторная попытка не срабатывает, время ожидания слишком короткое, а пользователь не получает понятного сообщения об ошибке.

Как использую

Обычно проверяю сценарии авторизации, оплаты, загрузки медиа и офлайн‑режимы. Для этого включаю профиль вроде плохого 3G, высокой задержки или потери пакетов и смотрю, как приложение ведет себя в нестабильной сети.

Что важно знать: проверять стоит не только низкую скорость интернета, но и нестабильность сети. А еще важно не забывать выключать Conditioner после проверки :)

  • just: короткие команды вместо длинных инструкций

В iOS‑проектах быстро накапливаются команды, которые приходится запускать постоянно: тесты, форматирование, генерация ресурсов. Со временем это превращается либо в огромный онбординг‑документ, либо в постоянный поиск нужной команды в документации.

just собирает основные сценарии работы в одном месте и запускает их через короткие понятные команды. В итоге justfile становится чем‑то вроде живой документации проекта.

Как использую

Чтобы каждый раз не вспоминать синтаксис, храню основные сценарии работы в justfile.

test:
    xcodebuild test -scheme MyApp -destination 'platform=iOS Simulator,name=iPhone 15'
format:
    swiftformat .
    swiftlint
clean:
    rm -rf ~/Library/Developer/Xcode/DerivedData

После этого вместо длинных команд достаточно написать:

just test
just format
just clean

Что важно знать: just не заменяет CI, Makefile или build system. Это скорее удобный слой для повседневных команд. Поэтому лучше держать justfile простым и не превращать его в большой набор скриптов.

  • Mint: фиксация версий CLI-инструментов на Swift

Когда у разработчиков разные версии линтеров, форматтеров и других CLI‑инструментов, могут появиться расхождения. Mint помогает зафиксировать набор инструментов внутри проекта и сделать локальный запуск ближе к CI, чтобы у всей команды был одинаковый результат.

Как использую

Вместо глобальной установки SwiftLint, SwiftFormat, XcodeGen или других CLI‑инструментов можно хранить версии в Mintfile и запускать их одинаково у всех разработчиков.

mint run realm/SwiftLint
mint run nicklockwood/SwiftFormat

Что важно знать: Mint полезен именно для Swift CLI-пакетов. Для Ruby-gems, Node.js-инструментов или системных утилит понадобятся другие менеджеры. Также важно кэшировать установленные бинарные файлы в CI, иначе сборки могут тратить лишнее время на установку инструментов.

Теги:
Рейтинг0
Комментарии0

Save the date: встречаемся 22 апреля на iOS Meetup Wildberries & Russ

22 апреля в 19:00 мск приглашаем на iOS-митап. В программе три технических доклада и нетворкинг с инженерами, которые ежедневно строят мобильную разработку в Wildberries & Russ. Поговорим про автоматизацию релизного процесса, масштабируемое UI-тестирование и тонкости работы с файловой системой iOS.

Регистрация

Доклады:

— Автоматизация релизов в Wildberries | Севастьян Жуков, Deploy Lab Team Lead

Как команда с нуля создала инструмент для управления релизным процессом мобильного приложения и масштабировала его на другие продукты компании. Разберём этапы автоматизации и работу с App Store API: управление релизами и отслеживание их статуса.

— UI-тестирование приложения Wildberries | Руслан Колчаков, iOS TestLab Lead и Валерий Карачаков, iOS TestLab Dev

Руслан расскажет про вызовы при организации тестирования, инфраструктуру и метрики здоровья TestLab. Валерий дополнит докладом про распределённое UI-тестирование на динамически формируемом кластере раннеров: как избежать простоев, эффективно утилизировать ресурсы и ускорить тестирование.

— Работа с файловой системой на iOS | Александр Игнатьев, iOS-разработчик команды Асто

Разберём нюансы работы с файлами, структуру iOS Sandbox и App Group как способ выйти за её пределы.

⏹️Формат: офлайн в Москве + онлайн-трансляция

Регистрация

Теги:
Рейтинг0
Комментарии0

От хакатонного эксперимента до релиза, или как появился параллельный режим в CarPlay

Раньше при подключении CarPlay пользователи видели в приложении 2ГИС на телефоне «заглушку» — почти пустой экран. И наш iOS‑разработчик Ваня задумался: «Почему бы не добавить полезности?»

Идея родилась на внутреннем хакатоне. Он решил не переносить интерфейс целиком, а разделить роли между устройствами. Телефон — для действий. CarPlay — для результата.

Собрал прототип, а затем команда подхватила инициативу. И это одна из самых быстрых задач, которая дошла до релиза.

Все действия выполняются на телефоне и сразу отображаются на экране в машине. Без переходов, без ожидания и без разрыва между устройствами
Все действия выполняются на телефоне и сразу отображаются на экране в машине. Без переходов, без ожидания и без разрыва между устройствами

Это интересно, потому что: 

  • новый сценарий для автомобилистов: теперь можно взаимодействовать с приложением на телефоне, пока навигация идёт в CarPlay; 

  • красивый обход архитектурного ограничения; 

  • инженерная инициатива, которая с хакатона дошла до прода.

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

Как стать IOS-разработчиком?

Недавно мы делали подборку необходимых инструментов для Android-разработчиков, но на этом мир операционных систем не заканчивается — чтобы развиваться, важно выбрать ту, которая больше всего подходит именно вам.

Если нравится экосистема Apple и хочется работать в закрытой, но при этом цельной среде — попробуйте разработку под IOS. На Хабр Карьере как раз есть множество учебных программ по этому направлению, а ниже — подборка ключевых инструментов "яблочного" разработчика.

SWIFT. Основной язык программирования для iOS.

Xcode. Официальная среда разработки от Apple.

CocoaPods.  Менеджер зависимостей для подключения библиотек.

Realm. Локальная база для хранения данных в приложении.

GCD. Технология для работы с многопоточностью.

UIKit. Фреймворк для создания интерфейсов приложений.

Начать учиться можно здесь

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

Как стать Android-разработчиком?

Войти в Android-разработку проще, чем кажется: начать можно с освоения базовых инструментов, а затем постепенно углубляться и закреплять знания на практике. Главное — двигаться последовательно и не пытаться охватить всё сразу.

Сегодня мы собрали подборку для тех, кто хочет стать Android-разработчиком и разобраться в основе профессии. А на Хабр Карьере есть все, чтобы выстроить понятный маршрут: сотни учебных программ — от базовых знаний до практики и первых проектов.

  • Java. Базовый язык программирования для Android

  • Kotlin. Кроссплатформенный язык программирования

  • Android Studio. Среда разработки (IDE) для приложений

  • Retrofit2. Типобезопасный HTTP‑клиент

  • Mockito. Фреймворк для модульного тестирования

Еще больше полезных инструментов для разработчиков на нашей витрине

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

Сегодня с 10 часов адрес https://api.telegram.org/bot недоступен. Этот адрес взаимодействия ботов с платформой телеграмм. Как итог телеграмм боты "легли".  Если точнее, телеграмм вызывает обработчик, но обратно в телеграмм отправить ничего нельзя.

Пока те боты, которые получают из телеграмм и отправляют ещё живут..

Одно из решений: использование приватных проски.

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

Выпустили мобильное приложение для Интернетометра от Яндекса

Команда Yandex Infrastructure разработала приложение под iOS и Android для бесплатного сервиса Интернетометр. Как и в веб‑версии сервиса в приложении можно замерять скорость скачивания, скорость загрузки и время задержки интернет‑соединения в миллисекундах. 

В приложении доступны светлая и тёмная темы
В приложении доступны светлая и тёмная темы

Сбор информации организован с использованием сети CDN‑серверов Яндекса: для большей точности сервис опрашивает не один, а сразу несколько ближайших серверов. Ежемесячно Интернетометром пользуются 5,5 миллионов человек — в среднем они запускают 18 миллионов измерений. 

Сервис предоставляет ключевую информацию о подключении: IP‑адрес, версию браузера, разрешение экрана и так далее. В будущем в приложении будет доступен расширенный режим измерений: он будет особенно полезен для технических специалистов, которые настраивают интернет‑соединение. Также у провайдеров проводной и беспроводной связи появится личный кабинет, где они смогут отслеживать замеры в зоне своего покрытия.

Теги:
Всего голосов 9: ↑8 и ↓1+7
Комментарии2

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

12 марта 20:00
>> Профессиональные модульные тесты в Android: как тесты улучшают код
Открытый вебинар курса «Android-разработчик. Продвинутый уровень»
Урок о том, как писать в Android осмысленные модульные тесты для ViewModel, репозиториев и бизнес-логики, чтобы они не маскировали проблемы, а реально улучшали архитектуру и поддержку кода. Записаться на урок

18 марта 20:00
>> Пишем простой проигрыватель на SwiftUI
Открытый вебинар курса «IOS-разработчик»
Соберете на SwiftUI простой медиапроигрыватель с интерактивным интерфейсом, освоите работу с локальными аудио- и видеофайлами в iOS и наметите путь к интеграции внешних сервисов. Записаться на урок

19 марта 20:00
>> Современная архитектура приложения и внедрение зависимостей
Открытый вебинар курса «Android-разработчик. Продвинутый уровень»
Разберемся, как выстроить Android-приложение на основе чистой архитектуры, связать слои через MVVM и настроить внедрение зависимостей с помощью Koin без лишней магии. Записаться на урок

23 марта 20:00
>> Навигация Pro-уровня в SwiftUI: как строить масштабируемые iOS-приложения без хаоса в переходах
Открытый вебинар курса «IOS-разработчик. Продвинутый уровень»
Как в SwiftUI проектировать навигацию без архитектурного хаоса: отделять переходы от интерфейса, управлять deep link и модальными экранами, строить масштабируемую структуру приложения. Записаться на урок

25 марта 20:00
>> Как писать Flutter-код так, чтобы ИИ правильно его дописывал
Открытый вебинар курса «Flutter-разработчик»
Поймете, почему искусственный интеллект ошибается при генерации Flutter-кода, и освоите приёмы, которые улучшат подсказки, повысят читаемость проекта и ускорят дальнейшую разработку. Записаться на урок

Еще больше бесплатных уроков от преподавателей курсов по всем ИТ-направлениям можно посмотреть в календаре мероприятий.

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

Новый китайский модульный смартфон из дополнительных компонентов выглядит интереснее чем то, что показывает Apple на презентации iPhone.

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

AI может вернуть TDD в мейнстрим

Долгие годы его выбирали либо фанаты дисциплины, либо команды на сверхкритичных проектах — слишком дорого. Писать тесты до кода медленно, поддерживать тестовый контур сложно, поэтому большинство команд жили по схеме: сначала код, потом «когда-нибудь допишем тесты». Но AI резко меняет экономику разработки: юнит-тесты генерируются за минуты, E2E собираются из user flow, интеграционные тесты склеиваются по контрактам. И появляется эффект, который разработчики любят больше всего — код становится не страшно менять.

Но есть важный нюанс. AI действительно отлично ускоряет тесты после разработки, но не спасает плохую архитектуру. Если система спроектирована криво — вы просто быстрее автоматизируете хаос. Поэтому всё чаще возвращаемся к идее тестов как инструмента проектирования. TDD перестаёт быть «религией» и становится способом делать контракты проще, зависимости чище, а систему — слабосвязанной.

И да, AI ускоряет не всех. Он усиливает системных людей и вскрывает хаос. Если требования мутные, архитектура плавает, а процессы держатся на чате — AI лишь ускорит производство багов.

Я — Мария Лещинская, руковожу тестированием в Surf. Мы много экспериментируем с AI в разработке, тестировании и процессах — и регулярно делимся инсайтами из практики.

Если вам интересно, как меняется разработка прямо сейчас — подписывайтесь и читайте больше материалов от экспертов Surf на нашем Телеграм-канале «Директорат Surf обсуждает». Впереди ещё много практических наблюдений и кейсов с реальными результатами. Ничего не скрываем — рассказываем как есть.

Теги:
Всего голосов 5: ↑1 и ↓4-1
Комментарии0

Ближайшие события

Разработчик на iOS получает по $5 млн каждый месяц на 24 ИИ‑приложениях в App Store. В реальности это одно приложение в разных обёртках: распознавание камней, монет, древесины и даже звёзд. Фотографии пользователей по API передаются на серверы OpenAI, после чего ChatGPT идентифицирует предмет.

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

Ахиллесова пята SharedPreferences

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

SharedPreferences часто используют «по привычке» — сохранить токен, флажок, пару строк. Но в какой-то момент это начинает тормозить интерфейс и даже приводить к ANR, особенно если запись/чтение происходит не там и не тогда, где вы ожидаете. Автор делится измерениями производительности, показывает, как деградация превращается в потерю кадров при переходах между экранами, а затем сравнивает варианты.

Ахиллесова пята SharedPreferences и стоит ли внедрять Datastore как альтернативу
В этой статье я расскажу то, о чём не спрашивают на собесeдованиях и не рассказывают на курсах по An...
habr.com

Эта статья будет особенно интересна Android-разработчикам и тимлидам, которые уже сталкивались с мистическими ANR, просадками перформанса и фризами на слабых девайсах, а также тем, кто держит в приложении много сторонних SDK и хочет понимать, как неявные записи в SharedPreferences могут незаметно копить нагрузку.

Читайте статью «Ахиллесова пята SharedPreferences и стоит ли внедрять Datastore как альтернативу»

Теги:
Рейтинг0
Комментарии0

Основы работы с Helm: как упростить деплой в Kubernetes

Helm — это менеджер пакетов для Kubernetes. По сути, он делает для кластеров то же, что apt для Linux или npm для JavaScript: позволяет устанавливать приложения как готовые пакеты, а не собирать всё вручную из десятков YAML-файлов.

В основе Helm — чарт: набор шаблонов с описанием ресурсов Kubernetes. При установке создается релиз с собственной историей версий — можно обновлять приложения, отслеживать изменения и при необходимости быстро откатываться. А еще Helm объединяет десятки ресурсов в один пакет и позволяет переиспользовать конфигурации для разных окружений через values.yaml.

В блоге разобрали установку Helm, основные команды, работу с репозиториями и релизами, проверку чартов перед деплоем, управление зависимостями и откаты. Читайте на сайте Рег.облака.

Теги:
Всего голосов 5: ↑3 и ↓2+1
Комментарии0

SpaceWeb объединил управление хостингом, VPS и доменами в одном мобильном приложении

SpaceWeb перезапустил мобильное приложение и перевел его на технологию Progressive Web App (PWA). Теперь все ключевые функции управления услугами доступны в одном интерфейсе прямо со смартфона — без ограничений по функциональности.

Приложение полностью повторяет возможности веб-панели управления. Пользователи могут заказывать и контролировать хостинг, VPS/VDS и облачные сервисы, управлять доменами, DNS и SSL/TLS-сертификатами, отслеживать баланс и нагрузку, настраивать доступы. Также доступны пополнение счёта, автоплатежи и участие в партнерской программе.

Переход на PWA позволил синхронизировать обновления: все новые функции, которые появляются в основной панели управления, сразу становятся доступны и в мобильной версии.

Все подробности о перезапуске — на сайте SpaceWeb.

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

Пользователь сделал игру про лучника, который стреляет во врагов, а управление происходит за счёт вставления и вытаскивания зарядного кабеля из разъёма при подключённом блоке питания. Никаких кнопок, тачскрина и свайпов — только провод и порт.

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

Превращаем обои на iPhone в стильный календарь — он показывает текущую дату на и каждую ночь обновляется. При этом не нужны сторонние приложения — хватит встроенного приложения «Команды».

  • Открываем сайт проекта и выбираем модель iPhone, стиль оформления, цветовую схему и часовой пояс;

  • Копируем ссылку, которую сгенерирует сайт;

  • Заходим в приложение «Команды», открываем вкладку «Автоматизация» внизу и жмём на знак «+»;

  • Создаём новую автоматизацию по времени суток: выставляем 00:01, выбираем «Немедленный запуск» и отключаем уведомления;

  • Добавляем действие «Получить содержимое URL» и вставляем туда скопированную ссылку с сайта;

  • Делаем второе действие «Установить фото как обои», выбираем только «Экран блокировки» (снимите галочку с домашнего экрана);

  • Разворачиваем настройки действия и отключаем «Показать окно просмотра»;

  • Нажмите «Play» внизу справа, чтобы проверить команду — обои должны смениться мгновенно.

  • Бонусом внизу будет отображаться прогресс года, чтобы вам удобнее было переживать из-за того, что до Нового года осталось 348 дней.

Теги:
Всего голосов 3: ↑0 и ↓3-3
Комментарии0

Клиент YouTube для Android под названием Download YT PRO весит всего 60 кБ (48 кБ в архиве). Приложение не требует Root-прав, убирает рекламу, даже спонсорскую. Видео не ставится на паузу, если свернуть приложение или заблокировать экран. Есть встроенный загрузчик видео и шортсов. Добавлен ИИ Gemini, который сразу сделает саммари даже часовых лекций и выдаст факты и советы по контенту.

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