Провели исследование для одного из крупнейших производителей электроники и бытовой техники

  • Автоматизация

  • Исследование

  • iOS

Intro

Проделали большую исследовательскую работу и нашли решение, которое поможет автоматизировать процессы тестирования на iOS‑платформе.

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

01

Задача

Разработать решение, которое поможет автоматизировать процессы тестирования

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

02

Решение

Провели исследование по автоматизации и нашли подходящее решение

Если разбить весь процесс на этапы, мы:

  • автоматизировали запись видео с экрана iPhone и перенос файла записи с устройства на локальный компьютер;

  • автоматизировали операции по работе с Wi-Fi;

  • построили инфраструктуру вокруг эхолокации;

  • автоматизировали операции по мониторингу ресурсов iOS-устройства.

Заголовок

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

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

Дима Ванин

Руководитель проекта

Решили задачу с автоматизацией записи экрана и переносом файла

Предстояло придумать, как автоматизировать запись происходящего на экране iPhone и последующую передачу файла на MacBook. Процесс можно разбить на две части. Первая связана с записью экрана. Вторая — с передачей файла.

Заголовок

Запись экрана IPhone — пожалуй, самый интересный момент в этой задаче. ReplayKit позволяет достаточно легко записать экран нашего приложения, но как только мы сворачиваем приложение, запись останавливается. Нужно было найти решение, которое бы помогло победить это ограничение.

Наш взгляд упал на App Extensions. Конкретно на Broadcast Upload Extension — инструмент, который позволяет записать экран iPhone независимо от вызывающего приложения.

Максим Алиев

iOS‑разработчик

Требовалось понять, как наладить «общение» между вызывающим приложением и App Extensions, ведь фактически у них разные хранилища. Здесь на помощь пришла такая штука как App Group.

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

Во время записи в App Extensions поступают сэмплы видео. BroadcastWriter, под капотом которого AVAssetWriter, собирает из этих кусков полноценное видео. По окончанию записи это видео сохраняется в Shared Container. Мы обращаемся к Shared Container из вызывающего приложения и можем прочитать видео.

Заголовок

Следующий шаг — передача записи на локальный компьютер. Для этого на iPhone предусмотрена стандартная опция Activity. Она позволяет пересылать файлы по почте, в сообщениях, через Airdrop и др. Чтобы избежать неоднозначностей, мы оставили только Airdrop. Такой вариант наиболее удобен, так как легко идентифицирует устройство по названию.

Максим Алиев

iOS‑разработчик

Мы оставили в Activity только Airdrop и реализовали это в виде скрипта для автотестов. Вот, как всё работает:

Когда запись экрана готова, скрипт вызывает кнопку Send, выбирает Airdrop и устройство.

Исследовали Wi-Fi сети

Следующая задача — автоматизировать операции по работе с Wi-Fi. Конкретно:

  • получение списка точек доступа;

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

  • подключение и отключение от выбранной точки доступа — Hotspot Configuration.

В теории для всего этого на iPhone есть расширение Network Extension. Но чтобы использовать его, нужно пройти сертификацию от Apple. Этот вариант накладывает неудобные ограничения. Например, нельзя напрямую получить доступ ко всем Wi-Fi сетям — сначала нужно дождаться завершения их сканирования. Поэтому мы нашли другое решение.

Заголовок

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

Коля Чаусов

iOS‑разработчик

Помогали работать эхолокации

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

Задачу можно разбить на несколько этапов.

  • Установка взаимодействия с библиотекой и выставление настроек. Установили частоту дискретизации и координаты четырёх маяков звуковых сигналов.

  • Запись звука отдельными кусками по 0,3 секунды. Устройство записывало сигнал на встроенный микрофон, а мы производили кодирование звука в байты. Эти байты передавали в библиотеку, которая на основе параметров помещения и полученных данных высчитывала координату устройства. После переходили к отрисовке новой координаты.

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

  • Построение маршрута на основе полученных координат. Зная текущие и прошлые координаты, мы могли нарисовать кривую линию из одной точки в другую. Для заказчика это оказался быстрый и подходящий вариант — на нём мы и остановились. Маршрут рисовали с помощью Path SwiftUI.

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

Автоматизировали мониторинг ресурсов

Финальная задача связана с мониторингом ресурсов — клиент хотел получать как можно больше данных о том, что происходит на iPhone. К сожалению, здесь наши возможности ограничены из-за архитектурных особенностей iOS. Приложения запускаются в «отдельных песочницах» и не имеют прямого доступа к операционной системе. Всё, что нам доступно, — методы общих библиотек.

Ещё можно использовать небезопасные запросы, но на этот случай не предусмотрено никакой документации. Следовательно, мы не можем знать, что случится после очередного обновления iOS.

Заголовок

Чтобы не тратить время на отладку приватного API и отслеживания состояния устройства через косвенные признаки, мы выбрали другой путь. Так как решение не обязательно должно работать из под устройства, мы воспользовались инструментами мониторинга, заботливо разработанными Apple.

Наша среда разработки Xcode поддерживает множество параметров профилирования устройства. Нам оставалось только разобраться, какой вид профилирования отдаст нужные данные, а затем запустить инструмент из командной строки и распарсить полученный XML. Полученные данные мы упаковали в подробные инструкции и передали команде заказчика. Теперь клиент сможет быстро настроить автоматизацию сбора и анализа данных, просто развернув у себя Xcode и подключив iPhone.

Коля Чаусов

iOS‑разработчик

У вас есть похожая задача? Давайте обсудим!

03

Итог

Мы приобрели колоссальный опыт и справились со всеми задачами, поставленными на старте

  • Реализовали методы подключения к доступным Wi-Fi сетям на iOS.

  • Нашли возможность программно управлять переносом файлов с iPhone на MacBook с помощью скрипта на Python.

  • Подготовили iOS-приложение для снятия аудиобуфера с микрофона и передачи в реальном времени порциями в библиотеку. Приложение записывает аудио-сигнал с микрофона мобильного устройства отрезками 300‑400 миллисекунд и передаёт в библиотеку в цифровой форме для получения координат положения устройства.

  • Реализовали методы, которые позволяют выполнять автоматические операции по мониторингу аппаратных ресурсов iOS-устройства из среды операционной системы macOS в составе скриптов на Python.

Готовое решение передали внутренней команде заказчика. И ждём новых исследовательских задач.

04

Команда

Команда проекта

  • Коммерческий директор

    Найки Еременко

  • Руководитель проекта

    Дима Ванин

  • iOS-разработчики

    Максим Алиев, Коля Чаусов

01

Похожие проекты

02

Сотрудничество

Контакты

Мы всегда рады сотрудничеству и новым проектам.

Опишите задачу, и мы с вами свяжемся.
Или напишите в Телеграм.

Давайте знакомиться!

ВыбратьОткуда вы о нас узнали
  • Рейтинги
  • Рекомендации
  • Конференции
  • Публикации
  • Соцсети
  • Другое

Нажимая «Отправить», вы даете согласие на обработку персональных данных и соглашаетесь c политикой конфиденциальности

Ваша заявка успешно отправлена

Мы все изучим и скоро выйдем на связь