РБК Компании
Главная MobileUp 17 октября 2023

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

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

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

Причина

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  • Установка взаимодействия с библиотекой клиента. Для этого мы создали обертку для C++ библиотеки.
  • Выставление настроек. Установили частоту дискретизации и координаты четырех маяков звуковых сигналов.
  • Запись звука отдельными кусками по 0,3 секунды. Для этого мы использовали AVAudioEngine. 
  • Конвертация записи в .wav формат. Устройство записывало сигнал на встроенный микрофон. А мы производили кодирование звука в байты: микрофон — колеблющаяся мембрана, и iPhone преобразует колебания в электрический ток, изменение параметров которого уже кодируются в байты. Эти байты мы и передавали в библиотеку. На основе заданных параметров помещения и полученных данных ультразвукового сигнала библиотека высчитывала координату нашего устройства. После мы переходили к отрисовке новой координаты на карте. Но перед тем, как выбросить из памяти полученный звук, конвертировали его в .wav формат и сохраняли на устройство для последующего анализа и отладки. 
  • Построение маршрута на основе полученных координат. Зная текущие и прошлые координаты, мы могли нарисовать кривую линию из одной точки в другую. Для заказчика это оказался быстрый и подходящий вариант — на нем мы и остановились. Маршрут рисовали с помощью Path SwiftUI. 

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

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

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

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

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

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

Итог

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

  • реализовали методы подключения к доступным Wi-Fi сетям на iOS;
  • нашли возможность программно управлять переносом файлов с iPhone на MacBook с помощью скрипта на Python;
  • подготовили iOS-приложение для снятия аудиобуфера с микрофона и передачи в реальном времени порциями в библиотеку. Приложение записывает аудио-сигнал с микрофона мобильного устройства отрезками 300-400 миллисекунд и передает в библиотеку в цифровой форме для получения координат положения устройства
  • реализовали методы, которые позволяют выполнять автоматические операции по мониторингу аппаратных ресурсов iOS-устройства из среды операционной системы macOS в составе скриптов на Python. 
Результат

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

Интересное:

Новости отрасли:

Все новости:

Профиль

Дата регистрации12.01.2011
Уставной капитал10 000,00 ₽
Юридический адрес ГОРОД САНКТ-ПЕТЕРБУРГ УЛ. БОЛЬШАЯ МОСКОВСКАЯ Д. 1-3 ЛИТЕР А ПОМЕЩ. 31-Н
ОГРН 1117847002272
ИНН / КПП 7839437267 784001001
Среднесписочная численность44 сотрудника

Контакты

Адрес Россия, г. Санкт-Петербург, ул. Б. Московская, д. 1–3, офис 9
Телефон +78126488125

Социальные сети