Xcode 27 заменяет Simulator.app. Expo CLI и expo-device-hub уже в курсе.

Источник: Expo Blog•

Xcode 27 заменяет Simulator.app. Expo CLI и expo-device-hub уже в курсе.

SDK 58 запускает симуляторы через Device Hub в Xcode 27, а новый плагин expo-device-hub переносит ваши симуляторы и эмуляторы во вкладку браузера.

Вы обновляете Xcode. Вы запускаете npx expo start, нажимаете i, и ничего не происходит. Simulator.app пропал. Вы находите UDID устройства, вручную запускаете его с помощью simctl, запускаете сборку напрямую на него и теряете быструю перезагрузку (fast refresh) в процессе. Так прошла неделя с Xcode 27 для многих людей, а тред на r/expo под названием "Updated Xcode and iOS Simulator App can't be found" говорит сам за себя.

Expo CLI теперь обнаруживает Device Hub в Xcode 27, запускает через него симуляторы и переводит фокус на нужное устройство с помощью deep link devices://. Нажмите i, и все заработает так же, как с Simulator.app.

SDK 58 также представляет expo-device-hub, плагин инструментов разработки, который превращает ваш браузер в панель управления устройствами. Он работает с SDK 57 и более поздними версиями. Установите его, запустите npx expo start, и вы получите трансляцию ваших iOS-симуляторов и Android-эмуляторов в реальном времени с элементами управления касаниями, свайпами и вводом текста, возможностью включения и выключения, графиками использования ЦП, памяти и сети во время работы приложения, а также переключателями темы оформления, Liquid Glass, размера текста и настроек доступности. Он распространяется под лицензией MIT и работает на вашей машине.

Что изменилось в Xcode 27?

В Xcode 27 удалили Simulator.app и заменили его на Device Hub, новое приложение для управления симулированными и физическими устройствами. Любой инструмент, который открывал Simulator.app по имени, перестал работать. Expo CLI был одним из таких инструментов.

Основное исправление состояло из двух частей. Во-первых, Expo CLI проверяет наличие как Simulator.app, так и Device Hub, и считает Device Hub действительной целью, когда Simulator.app отсутствует. во-вторых, когда CLI загружает устройство и знает его UDID, он открывает devices://device/open?id=<udid>, чтобы Device Hub вывел это устройство на передний план. Без UDID он возвращается к использованию open -a DeviceHub. Исходная поддержка Device Hub могла запускать устройство, но не имела способа сфокусироваться на нем, и deep link закрыл этот пробел.

SDK 58 добавляет еще одно исправление. Xcode 27 выводит симуляторы в выводе devicectl рядом с физическими устройствами, поэтому expo run:ios пытался установить приложение на симулятор так, будто это «железо», и завершался ошибкой на шаге установки. Теперь Expo CLI игнорирует симуляторы, о которых сообщает devicectl.

Вам ничего из этого не нужно настраивать вручную. Обновитесь до SDK 58, и expo start, expo run:ios, а также expo start --ios сами обработают Xcode 27. Обнаружение Device Hub и фокусировка также были добавлены в Expo CLI для SDK 56 и SDK 57.

Что добавляет expo-device-hub

Device Hub решает проблему «куда делся мой симулятор». expo-device-hub — это то, что вы делаете после его запуска.

Это плагин инструментов разработки Expo. Когда он установлен, npx expo start выводит ссылку:

Откройте эту ссылку, и вы получите панель управления в браузере с вашими локальными симуляторами и эмуляторами. Вы можете:

  • Смотреть видео в реальном времени с каждого iOS-симулятора и Android-эмулятора и взаимодействовать с ними: касаться, свайпать и вводить текст.
  • Запускать и выключать устройства, не покидая браузер.
  • Читать графики ЦП, памяти и сети. Они появляются только во время работы вашего приложения.
  • Переключать тему оформления (светлую и темную), Liquid Glass, размер текста и настройки доступности с боковой панели вместо того, чтобы копаться в настройках на самом устройстве.

Уровень потоковой передачи основан на проектах с открытым исходным кодом serve-sim и serve-emu, которые теперь поддерживаются в том же репозитории (serve-sim публикуется в npm как @expo/serve-sim). Как iOS, так и Android предлагают H.264-трансляцию с низкой задержкой и высоким битрейтом для локального использования, а также WebRTC для удаленной трансляции. В зависимости от платформы и доступного оборудования доступны другие варианты (MJPEG, VP8, VP9) для наилучшего качества. Общий пакет @expo/hub-client объединяет обе платформы за одними и теми же хуками, поэтому пользовательскому интерфейсу все равно, на какую платформу он смотрит.

Тот же клиент управляет потоковой передачей устройств в браузере на expo.dev. Если вам нужен такой опыт без локальной установки Xcode или Android Studio, для этого предназначены Expo Simulators, наш облачный сервис симуляторов. Он находится в стадии бета-тестирования для существующих клиентов Expo и пока недоступен широкой публике. expo-device-hub — это локальная часть этой истории, и она остается бесплатной и с открытым исходным кодом. Он также питает панель устройств в T3 Code, которая документирует expo-device-hub как инструмент, транслирующий ее симуляторы и эмуляторы.

Как включить

Затем откройте ссылку Expo Device Hub, выводимую CLI. Вы также можете нажать Shift + M в терминале, чтобы увидеть все плагины инструментов разработки для проекта.

Чтобы использовать панель управления без запущенного проекта Expo, запустите ее как автономный сервер с помощью npx expo-device-hub.

Плагин написан только на JavaScript, поэтому он работает со сборками для разработки и Expo Go. Если вы добавите его в общий репозиторий, он может находиться в devDependencies.

Ограничения

  • expo-device-hub имеет версию до 1.0. Ожидайте изменений в панели управления между релизами.
  • Управление симулятором iOS использует simctl, поэтому для этой части требуется macOS с Xcode. Управление эмулятором Android работает везде, где установлены инструменты Android SDK (emulator, adb), включая Windows.
  • Потоковая передача физических устройств iOS не входит в этот релиз. Она находится в дорожной карте для более поздней версии и зависит от возможностей iOS 27.
  • Expo CLI по-прежнему проверяет наличие Simulator.app перед Device Hub. На Xcode 26 ничего не меняется.
  • Для плагина пока нет страницы документации. Справочником на данный момент является GitHub README.

Обратная связь

Если обнаружение Device Hub пропускает вашу настройку или панель управления ведет себя странно с конкретным устройством, создайте тикет на expo/expo-device-hub или найдите нас в Expo Discord.

О чём эта статья

Ещё в разделе «Разработка ПО»

Все →

Ещё от Expo