Факт: Expo Go содержит фиксированный набор встроенных нативных библиотек — это ограничение описано в документации Expo. Если нужного проекту нативного кода в этом наборе нет, переустановка Expo Go и повторная установка JavaScript-зависимости обычно не помогут: переходите на development build — собственную учебную версию приложения.
На Windows можно продолжать писать код и использовать облачную сборку. Но если нужно запустить iOS Simulator или отлаживать проект средствами Xcode, потребуется macOS — например, компьютер учебного заведения или удалённый Mac.
Эта инструкция для вас, если вы делаете учебное приложение на Expo или React Native и впервые столкнулись с ошибкой нативного модуля.
Если у вас только Windows или компьютер учебного заведения, здесь можно выбрать маршрут для дальнейшей работы над iOS-проектом.
Если вы уже подключили нативную зависимость, вы пройдёте проверку, которая покажет, действительно ли development build готов к использованию.
Ошибка нативного модуля в Expo Go: сначала определите источник
Не всякая ошибка при запуске проекта означает, что Expo Go не поддерживает нужную библиотеку. Сначала выясните, на каком этапе возникает сбой: при установке пакета, в JavaScript-коде или при обращении к нативной части. Это поможет не тратить время на повторные установки и очистку кэша, если причина находится в другом месте.
Различайте три типичных случая.
- Пакет не находится при сборке или запуске JavaScript. Проверьте, добавлена ли зависимость в проект, из правильной ли папки вы запускаете команду и совпадает ли имя импорта с документацией пакета. Это ещё не доказывает, что Expo Go не подходит: приложение могло просто не найти JavaScript-библиотеку.
- Приложение запускается, но появляется ошибка JavaScript. Посмотрите на строку ошибки и место вызова. Неправильный аргумент, неинициализированное значение или ошибка в собственном коде могут привести к сбою независимо от способа сборки.
- Пакет импортируется, но приложение сообщает, что нативный модуль не найден или недоступен. Здесь вероятно расхождение между JavaScript-кодом проекта и нативной частью приложения, в котором этот код работает.
Нативный модуль — это часть, связывающая JavaScript с возможностями операционной системы или кодом, собранным для приложения. Например, библиотеке может быть недостаточно обычного JavaScript: ей требуется соответствующая нативная реализация внутри установленного приложения.
Проверьте документацию самой библиотеки и официальный список сторонних библиотек Expo. Важно выяснить не только, совместима ли библиотека с Expo, но и каким способом её предлагают использовать. Если пакет поддерживается в Expo Go, выясните, требуются ли дополнительные настройки. Если ему нужен код, отсутствующий в Expo Go, переходите к собственной сборке.
Установка пакета не изменяет внутреннее устройство Expo Go. Пакет добавляется в проект, а приложение на телефоне остаётся заранее собранным приложением с определённым набором нативных компонентов. Поэтому повторная установка того же пакета, очистка кэша и перезапуск редактора не добавят в Expo Go отсутствующую реализацию.
Переходите на development build, если проекту нужен свой нативный код
Development build — это ваша версия приложения для разработки, собранная с нативными зависимостями проекта. Она не расширяет Expo Go и не устанавливает в него плагины. Вместо этого вы запускаете проект в отдельном приложении, которое подготовлено для нужного набора зависимостей. Expo объясняет этот переход в руководстве по development build.
Действуйте последовательно:
- Зафиксируйте исходную ошибку. Скопируйте точный текст сообщения, укажите пакет и действие, после которого оно появляется. Отметьте, запускается ли приложение до вызова проблемной функции. Это позволит после сборки проверить именно тот сбой, с которого началась диагностика.
- Подтвердите требования библиотеки. Найдите в её документации требования к нативной части и настройке проекта. Проверьте, есть ли подходящий раздел в документации Expo. Не добавляйте конфигурацию наугад: неправильное изменение может заменить одну ошибку другой.
- Проверьте изменения проекта. Убедитесь, что зависимость записана в проекте, а изменения конфигурации сохранены. Если библиотеке нужен config plugin или другая настройка нативного проекта, выполните её по актуальной инструкции библиотеки. Документация Expo о настройке нативной части описывает, почему такие изменения относятся к проекту приложения, а не к Expo Go.
- Выберите подходящую сборку. Укажите, где будете тестировать приложение: на устройстве или в симуляторе. Для iOS-симулятора нужен вариант сборки для симулятора, а для физического устройства — вариант, рассчитанный на запуск на устройстве. Не считайте эти файлы взаимозаменяемыми.
- Создайте и установите development build. Используйте поддерживаемый Expo способ локальной или облачной сборки. Установка новой версии development build необходима, когда в проект добавились нативная зависимость или нативная настройка. Подробности работы с готовым приложением приведены в инструкции Expo по использованию development build.
- Повторите исходный сценарий. Запустите приложение, вызовите тот же модуль тем же способом и отдельно проверьте обычные изменения JavaScript. Если модуль по-прежнему не работает, проверьте совместимость библиотеки, конфигурацию и соответствие установленной сборки текущему проекту.
После этого разделяйте два вида изменений. Когда вы исправили только JavaScript, обычно нужно обновить код в уже запущенном приложении, а не собирать нативную часть заново. Когда добавили нативный пакет, изменили нативную конфигурацию или подключили код, который должен попасть внутрь приложения, проверьте документацию зависимости и создайте новую сборку. Правило простое: сборка должна соответствовать текущему набору нативных компонентов проекта.
У development build есть плюсы и ограничения.
- Плюс: проект может использовать нативные зависимости, недоступные в Expo Go.
- Плюс: вы проверяете приложение в более близком к реальному проекту составе.
- Ограничение: после изменения нативной части нужна новая сборка, а не только перезапуск JavaScript-кода.
- Ограничение: сборка, установка и запуск — разные задачи. Успешная сборка ещё не подтверждает, что приложение установлено на нужное устройство и доступно для проверки.
Выберите путь для Windows: код, облачная сборка или устройство
Windows вполне подходит для редактирования проекта и работы с JavaScript. Дальше выбор зависит от того, что требует задание: проверить базовую логику, запустить собственную сборку на физическом устройстве или подтвердить результат в симуляторе iOS.
| Вариант | Для чего подходит | Что нужно учитывать |
|---|---|---|
| Expo Go | Первые упражнения и проверка кода с библиотеками, которые уже доступны в этом приложении | Нельзя добавить в Expo Go отсутствующую нативную реализацию только установкой пакета |
| Development build на устройстве | Проверка собственного приложения с нативными зависимостями | Сборка и способ установки должны соответствовать устройству; проверьте требования курса и проекта |
| EAS Build | Облачная подготовка iOS-сборки, когда вы редактируете проект на Windows | Облачная сборка не запускает симулятор на Windows; выбранный тип сборки должен соответствовать будущей проверке |
| iOS Simulator в macOS | Проверка приложения в виртуальном устройстве Apple и работа с инструментами Xcode | Симулятор запускается в macOS, а не как часть Windows и не автоматически после облачной сборки |
EAS Build — это облачная сборка проекта; она позволяет поручить подготовку сборки удалённой инфраструктуре. Это не синоним симулятора и не способ запустить iOS Simulator в Windows. В официальном руководстве по сборке приложения для iOS Simulator разделены подготовка подходящей сборки и её последующий запуск в симуляторе. А руководство Expo по iOS Simulator поясняет платформенную границу: симулятор работает в macOS.
Выбирайте маршрут по требованию курса, а не по тому, какой инструмент звучит привычнее.
- Если задание проверяет основы JavaScript, интерфейс и логику, сначала используйте Expo Go, пока проект укладывается в его возможности.
- Если проект требует нативную библиотеку, подготовьте development build. Для первичной проверки можно использовать совместимое физическое устройство, если это подходит курсу и проекту.
- Если преподаватель просит показать результат именно в симуляторе iOS или требует работу с Xcode, запланируйте доступ к macOS. Облачная сборка может подготовить приложение, но не заменит среду для запуска симулятора.
- Если нужно лишь получить файл сборки, проверьте, разрешает ли задание облачный маршрут и какой именно артефакт требуется сдать.
Не помещайте пароли, ключи и другие секреты проекта в открытый репозиторий и не пересылайте их вместе с исходным кодом. Если приложению нужны переменные окружения для сборки, проверьте их назначение и правила хранения в документации Expo по переменным EAS. Секрет для сборочной среды и обычная настройка приложения — не одно и то же; не публикуйте значения, которые дают доступ к аккаунту или сервису.
Проверьте симулятор и подключите macOS только для нужного этапа
Если курс требует проверить приложение в iOS Simulator, заранее выясните, что именно сдаётся: скриншот, запись экрана, проверка конкретной функции или результат работы Xcode. Так вы поймёте, нужен ли вам симулятор обязательно или достаточно облачно собранного приложения на физическом устройстве. Не переименовывайте облачную сборку в «тест в симуляторе»: это разные этапы проверки.
Для проверки через симулятор используйте такую последовательность:
- Убедитесь, что в проекте сохранены актуальные изменения JavaScript, зависимости и настройки.
- Проверьте, что подготовлен вариант приложения именно для iOS Simulator. Если вы не уверены в выбранном типе сборки, сверьтесь с руководством по симуляторной сборке.
- Запустите iOS Simulator в macOS и установите подходящую сборку. Windows-компьютер может оставаться местом, где вы редактируете файлы, но сам симулятор работает в macOS.
- Откройте приложение и проверьте, что оно проходит стартовый экран без ошибки.
- Выполните действие, вызывающее проблемный нативный модуль. Смотрите не только на то, исчезло ли сообщение: проверьте, сработала ли функция, ради которой вы добавили зависимость.
- Измените небольшой участок JavaScript-кода и убедитесь, что приложение получает это обновление. Так вы отдельно проверите работу с кодом и работу встроенного в приложение нативного модуля.
- Сравните результат с заданием. Если требуется действие через Xcode или работа с конкретным состоянием симулятора, выполните именно это требование, а не только проверьте запуск приложения.
Если после изменения только JavaScript приложение обновилось, а нативная функция продолжает выдавать ошибку, снова сопоставьте установленный development build с текущим проектом. Проверьте, не добавлялась ли зависимость уже после сборки и не менялась ли нативная конфигурация. Если да, обновление JavaScript само по себе не обновит состав приложения — подготовьте новую сборку и повторите проверку.
Доступ к удалённому Mac может быть полезен, когда у вас Windows, но курс требует macOS, Xcode или запуска iOS Simulator. Это не обязательный шаг для каждого Expo-проекта: если достаточно Expo Go, облачной сборки или подходящего физического устройства, удалённая среда может оказаться лишней. Сверьте требования своей задачи с возможностями MACCOME, прежде чем выбирать такой вариант. Если вам важны именно Xcode и симулятор, в удалённой среде отдельно проверьте доступность нужных инструментов, способ подключения, правила сохранения проекта и то, как вы будете переносить файлы.
Частые вопросы
Почему пакет установлен, а Expo Go всё равно не видит модуль?
Установка JavaScript-пакета не добавляет его нативную часть в уже собранное приложение Expo Go. Сначала проверьте, есть ли нужная библиотека среди поддерживаемых встроенных библиотек и какие настройки требует её документация. Если реализация отсутствует, следующий шаг — development build, а не ещё одна установка того же пакета.
Как понять, что пора оставить Expo Go?
Переходите на development build, когда ошибка указывает на отсутствующий нативный модуль или проекту нужны собственные нативные настройки. Если сообщение связано с обычной ошибкой JavaScript, сначала исправьте её и повторите запуск. Новый способ сборки нужен для изменения состава приложения, а не как универсальное средство исправления любого сбоя.
Можно ли продолжить работу над iOS-проектом на Windows?
Да. Вы можете редактировать проект и использовать облачную сборку, если это отвечает требованиям задания. Но облачная сборка не означает, что iOS Simulator запустится на Windows. Для проверки именно в симуляторе нужна macOS; если преподавателю достаточно теста на совместимом физическом устройстве, уточните это до выбора маршрута.
Что проверить перед сдачей проекта?
Подтвердите, что установлена сборка для нужного типа устройства, приложение запускается, а проблемный модуль выполняет требуемую функцию. Затем отдельно проверьте обновление JavaScript и сверьте результат с заданием. Если использовался симулятор, убедитесь, что проверка действительно выполнена в macOS, а не только завершена облачная сборка.
Сверьте результат с заданием и выберите среду по необходимости
Для учебного проекта не требуется заранее переходить на Mac или собирать приложение собственным способом. Сначала выясните, что именно сломалось. Если причина — JavaScript, исправьте код. Если проекту нужен нативный модуль вне встроенного набора Expo Go, создайте development build. Если для курса требуется симулятор или Xcode, добавьте в маршрут macOS.
У Windows-маршрута есть свои сильные стороны: можно продолжать редактирование и использовать EAS Build без локального Mac. Но он не закрывает запуск iOS Simulator и работу с Xcode. Школьный Mac может решить эту задачу, если он доступен в нужное время и разрешает установить или проверить нужный проект. Удалённый Mac полезен как временная macOS-среда, но зависит от качества соединения и не подходит, если заданию необходим физический интерфейс или длительная работа на собственном компьютере.
Если курс требует только облачной сборки, аренда Mac не обязательна. Если же вам нужно выполнить Xcode-проверку, запустить симулятор и нет доступа к школьному Mac, рассмотрите удалённый Mac как временный учебный инструмент. Перед началом проверьте, как подключиться и где хранить проект; варианты оформления доступны на странице удалённого Mac MACCOME.