Що значить «Ні розшарування URL справжні» в зреагувати рідний?


199

Коли я запускаю рідний проект, що реагує на реакцію, я отримую помилку no bundle URL present, але не знаю, які помилки роблю, я сильно розгубився.

введіть тут опис зображення


2
Я зіткнувся з цією проблемою в реагуванні на рідну програму iOS. Просто відкрийте папку xcodeproj в ios в xcode і запустіть її звідти. Переконайтеся, що ви не на проксі.
— Абхай Широ

9
Більшу частину часу мені допомагає очищення каталогу rm -rf ios/build/
— збірок

Це допомагає мені в більшості ситуацій. Але в цьому конкретному випадку мені вдалося виправити цю помилку за допомогою цієї команди (реагувати-нативно: "0.60.4"):watchman watch-del-all
— О. Боркухін

Зазвичай це означає, що ваш постачальник метрополітену не працює, деякі люди це запускають у власних терміналах або на стандартному комп'ютерному терміналі. Зазвичай я закриваю термінал, перезавантажую програму і це виправляє.
— Сара Інес Кальдерон

Відповіді:


128

Вирішіть помилку No bundle URL present:

  • Виконайте в кореневому каталозі проекту наступну команду, щоб видалити каталог збірки iOS та знищити інші сеанси React Native (якщо припустити, що вони працюють на порту 8081 за замовчуванням) перед повторним складанням:

rm -rf ios/build/; kill $(lsof -t -i:8081); react-native run-ios

  • Оновіть свій робочий процес React Native, щоб уникнути виникнення цих помилок, поєднавши вищевказану комбінацію команд у псевдонімі та додавши її до вашого файлу конфігурації Bash .bashrc за допомогою цієї команди:

echo "alias rni=\"kill \$(lsof -t -i:8081); rm -rf ios/build/; react-native run-ios\"" >> ~/.bashrc; source ~/.bashrc

Тепер ви можете запустити збірку React Native iOS (не турбуючись про деякі поширені червоні екрани помилок, що з’являються) за допомогою простого ярлика:

rni


1
Дуже корисно для мене. Єдине, що мені довелося зробити - це покинути тренажер, якщо він ще не закритий.
— AnnawanDev

74

Я просто зіткнувся з цією проблемою (вперше розпочавши роботу з React Native). Проблема зникла, коли - під час ios-симуляції ( react-native run-ios) працював - я побіг, npm installа потім react-native run-iosзнову. У вікні терміналу було показано, що воно в'язане, а потім тренажер показав вітальний екран.

Перевірте це посилання на інструменти після react-native init PropertyFinderспроби використання рядка npm start(Цей для мене працює)

===================================================== =======================

ОНОВЛЕННЯ за 16.9

Мій порт 8081 був заблокований McAfee. Використання іншого порту безпосередньо не працювало react-native start --port=8082іreact-native run-ios --port=8082

Випробували майже всі рішення, наведені тут. але нічого не вийшло.

        "react": "16.9.0",
        "react-dom": "^16.12.0",
        "react-native": "0.61.5",

Рішення:

Шукали 8081 в Xcode і замінили їх на 8082. Потім запустіть ті самі команди, щоб створити та запустити додаток. Додаток працює безперебійно

react-native start --port=8082
react-native run-ios --port=8082

введіть тут опис зображення


2
@dcp Ви вже кілька разів намагалися запустити "реактивний запуск run-ios", поки він уже завантажений? Схоже, щоразу, коли я закручую додаток, мені потрібно це робити щонайменше двічі (між ними чекаючи приблизно 2 хвилини).
— Пропустити Суву

працює для мене, але хотілося б знайти довгострокове виправлення, яке не передбачало цього кроку кожного разу.
— mheavers

31

Була така ж проблема, коли я робив пакет своєї програми. Переконайтеся, що ваш main.jsbundleнацілений на ваш основний проект


3
Це якимось чином трапилося зі мною як частина мого модернізованого оновлення 0,60.
— IonicBurger

відео посилання для того ж, youtube.com/watch?v=eCs2GsWNkoo
— jrhamza

це сталося і зі мною. але потім я натиснув на нього. але все-таки випуск
— Джейсон Г

29

Як зазначено в повідомленні про помилку:

Погодившись на ліцензію Xcode / iOS, потрібні права адміністратора, будь ласка, запустіть "sudo xcodebuild -license" та повторіть цю команду.

Запуск наступної команди працював:

sudo xcodebuild -license

tks це робота для мене після запуску в терміналі та побудови в xcode after
— tess hsu

Ні. Все ще не працює для мене. Я біжу в інший порт, 8081 заблокований
— Ashish Singh Rawat

27

Ця проблема виникає, коли ви не дозволяєте незахищених з'єднань через localhost або, можливо, ви намагалися прийняти незахищені з'єднання через http.

Щоб виправити це, додайте це info.plist:

<key>NSAppTransportSecurity</key>
    <dict>
        <key>NSAllowsArbitraryLoads</key>
        <true/>
        <key>NSAllowsArbitraryLoadsInWebContent</key>
        <true/>
        <key>NSAllowsLocalNetworking</key>
        <true/>
    </dict>

4
Який герой цей хлопець. Врятувало мене та мою книжку з вистрибування у вікно! Я змінив свій домен виключення з localhostмоєї адреси локальної мережі в Info.plist, а значить, він не вирішив. Я додав блок для "localhost" як домен виключення, і він спрацював.
— Дарій

1
Серйозно ваша відповідь прийшла як бог до мене .... брате, ти качаєшся ..... У мене немає слів. дякую, я застряг у ньому з четверга.
— Тушар Пандей

26

Закрийте ваш тренажер та термінал. Відкрийте нову та перейдіть до свого проекту, а потім оновіть свою реакцію:

react-native upgrade

Випуск у: Нескінченна рекурсія в RCTFatal, коли пакет не виконується .


1
так, але в моєму випадку мені не потрібно було оновлювати. Замикаючий термінал і тренажер мені вистачило.
— gianni

@gianni Яку версію ви робите, коли ви реалізуєтесь?
— Матео Марконі

1
Здавалося, нічого не змінило, все ще бачачи помилку.
— SSH Цього

2
Це працювало для мене, але вам доведеться також закрити тренажер, а потім запустити реактивний цикл run - ios
— James O'Brien

1
Не допомогла `` `інформація. Немає версії. Отримання останнього ... попередження Вказана версія "0.61.5" вже встановлена ​​у node_modules, і вона задовольняє діапазон север "0.61.5". Не потрібно оновлювати `` `
— Ashish Singh Rawat

19

Причина:

Це тому, що додаток не може знайти сервер (який обслуговує інтерфейс користувача - за допомогою коду JavaScript).

Рішення:

  • Переконайтесь, що все, що стосується реагування на рідну мову, закрито (не потрібно, просто щоб мати чистий початок для мого рішення, після мого пояснення, ви можете зрозуміти, потрібно це чи ні)
  • бігати npm run startчи yarn startспочатку
  • зачекайте, коли ця команда виконана робота (зазвичай ви побачите Loading dependency graph, done.)
  • бігати react-native run-ios/android

Пояснення:

  • React Native постачається з 2 частин:

    • Рідна частина
    • Частина Javascript
  • Створення команд:

    • react-native run-ios/androidполягає в тому, щоб створити нативну частину, потім розгорнути її на пристрої та запустити додаток на пристроях (симулятор / емулятор / реальний пристрій). Зазвичай на це пішло 3 ~ 4 хвилини.

    • npm run startабо yarn startце створити частину javascript і запустити сервер розробників для обслуговування вбудованого інтерфейсу в додаток. Зазвичай на це пішло 30 секунд.

=> Зазвичай частина JavaScript закінчується спочатку, а рідна частина - пізніше. (виходячи з часу, який вони використовували).

=> це справедливо лише при першій збірці (свіжа збірка).

=> для відновлення:

  • Нативній частині просто було потрібно 10 ~ 15 секунд, щоб перевірити зміни, і тому що жодна зміна для рідної частини => не робилася до того, як частина Java була створена та обслуговувалася. (Я не впевнений, що частина JavaScript була відновлена ​​чи ні, але це зайняло багато часу, ніж рідна частина)

  • Отож, тому у нас виникла ця проблема, програма запущена і потрібна річ, яка ще не існувала.

Бонус:

  • react-native run-ios/android автоматично запустить сервер розробників для вас.
  • Ось чому, коли ви побігли react-native run-ios/androidодразу react-native init <app_name>, все пройшло добре. (тому що функція автоматичного запуску та час для свіжої збірки було взято як стан вище).
  • Інші рішення "для видалення" працювали, оскільки вони примушували відбудовуватися.

Час, використаний на цю відповідь, був відносно моєї машини => може відрізнятися від інших.


14

Спробуйте запустити цей код:

$ sudo xcodebuild -license

Це може вирішити проблему. Це працює для мене.


11

У мене була така ж помилка, і я зміг запустити додаток лише через Xcode. react-native run-iosне працює. Щоб вирішити проблему, потрібно видалити buildпапку на YOUR_PROJECT/ios/build/. Після цього ви зможете запустити додаток react-native run-iosзаново. Сподіваюсь, це допомагає.


9

У більшості випадків ця проблема виникає, коли пошук DNS / IP-пошуку не вдається знайти localhost.

Рішення:

Спробуйте додати localhost ip до хост-файлу тощо.

ви можете додати рядки нижче до файлу хоста etc (/ etc / hosts)

127.0.0.1 localhost

255.255.255.255 радіомовлення

:: 1 л. окалхост

Для підтвердження цього питання ви можете натиснути на URL-адресу пакета на сафарі (якщо ви спробуєте його в хромі, це вирішиться, але сафарі не зможе його вирішити). http: // localhost: 8081 / index.ios.bundle? platform = ios & dev = true & minify = false


Після переходу на абсолютно новий комп’ютер це було те, що мені було потрібно. ТИ!
— jeffctown

Так, тут на новому комп’ютері!
— Вішал

Моєю проблемою було встановлення проксі в моїй мережевій конфігурації, я просто видаляю проксі, і він працює добре.
— Ахмад Хані

8

Переконайтесь, що ваші налаштування ATS правильні у .plist-файлі.

Ви можете знайти файл за адресою /ios/{{project_name}}/Info.plist

localhost повинен бути визначений як ціль запиту винятків, як це:

<key>NSAppTransportSecurity</key>
    <dict>
    <key>NSExceptionDomains</key>
    <dict>
        <key>localhost</key>
        <dict>
            <key>NSExceptionAllowsInsecureHTTPLoads</key>
            <true/>
        </dict>
    </dict>
</dict>

* (не забудьте видалити це у версії випуску ..)


7

Для мене проблема полягає в тому, що він не міг створити пакет JS. Він не вказує на помилку при побудові з Xcode, тому ви не можете це знати. Щоб знайти помилку, запустіть наступну команду.

react-native bundle --platform ios --dev false --entry-file index.ios.js --bundle-output ./ios/release/main.jsbundle --assets-dest ./ios/release/main.jsbundle

Для мене помилка була в чомусь із відсутнім компонентом PureRenderMixin. З яким рішенням можна ознайомитися тут: https://github.com/facebook/react-native/isissue/13078 . Потрібно вручну встановити react@16.0.0-alpha.3. Це можна зробити за допомогою виконання цієї команди.

npm i --save react@16.0.0-alpha.3

Ця проблема зараз трапляється для всіх, оскільки випускаються новіші версії реагуючих альфа (особливо альфа 5), і вони порушують вбудовані реакції.


команда 'react-native bundle --platform ios --dev false --entry-file index.ios.js --bundle-output ./ios/release/main.jsbundle --assets-dest ./ios/release/ main.jsbundle 'опише будь-яку помилку при складанні пакету. поки ця команда не буде успішною, run-ios не працюватиме
— eric f.

моя поточна помилка в тому, що "@connect" "react-redux" якимось чином не розпізнається?
— eric f.

Можливо, спробуйте додати "plugins": ["transform-decorators-legacy"]до файлу .babelrc. Або спробуйте підключити HOC.
— urbancvek

@urbancvek, для мене помилка полягає в цьому The node type SpreadProperty has been renamed to SpreadElementі в його @babelбібліотеці посилань всередині node_modules, я не знайшов нічого, що би вирішило це.
— Даніель

7

Рішення -> npm startтоді відкрийте новий Термінал і перейдіть до свого шляху проекту, а потім натисніть, щоб react-native run-iosвін працював на мене


7

Що це вирішило для мене:

  • Відкрийте вікно терміналу
  • cd в YOUR_PROJECT/ios
  • Видаліть папку збірки за допомогою rm -r build
  • Біжи react-native run-iosзнову

Можна також відкрити Finder, перейти до YOUR_PROJECT/iosта видалити buildпапку.

Потім react-native run-iosзнову біжи .

Джерело: Ендрю Банкрофт


5

Це проблема з нативною реакцією v0.42.1. Спробуйте закрити всі екземпляри терміналу та XCode та запустіть:

launchctl unload ~/Library/LaunchAgents/com.github.facebook.watchman.plist
watchman version
react-native run-ios

3
"Це проблема з нативною реакцією v0.42.1." - Вона існує і з v.0.43.
— dcp


5

Просто запустіть у Терміналі react-native start:

cd your react native app directory/ react-native start 

Він запустить пакувач, тепер не закривайте це вікно терміналу, в іншому вікні терміналу запустіть проект. Це єдине прагнення, яке я виявив, щоб він працював належним чином.


4

Я знайшов найпростіший / швидкий спосіб обійти це - вийти з програми в симуляторі (2 х Cmd + Shift + H) і повторно запустити.


4

У мене був цей самий випуск. Але моя проблема полягала в тому, що мої Mac та iPhone не були в одній мережі Wi-Fi.

Тому переконайтеся, що вони всі в одній мережі та відновіться ще раз. Якщо це не так, спробуйте рішення, згадані іншими членами тут.


3

перевірити мережевий проксі, краще закрити його.

або ви повинні знайти інший спосіб підтримки сервера упаковки


Дякую, я відкрив глобальну VPN, щоб перетнути Велику вогневу стіну!
— BaiJiFeiLong

Я відключив автоматичну конфігурацію проксі в Mac. Це спрацювало через 2 дні зусиль: D ... Спасибі.
— Нірав Джайн

Я справді працював з VPN, якого навіть не пам’ятав. його вимкнення спрацювало!
— Педро Маркес

3

Це сталося і зі мною, після перезавантаження мого Mac. Під час запуску програми на тренажері відкривається вікно терміналу запускаПакер. Я закрив це вікно і припинив процес (я також закрив тренажер), після чого запустіть знову реагувати-нативні run-ios і все працює добре.


3

У моєму випадку проблема була усунена перезавантаженням adbсервера:adb kill-server && adb start-server


3

У мене ця проблема сталася і для мене ... проблема в тому, що пакувач не працював, здавалося, ймовірно, тому, що моя оболонка за замовчуванням була zsh. шини реагують, щоб відкрити нове вікно терміналу та запустити, .../node_modules/react-native/packager/launchPackager.commandале це не запустилось. Ручне виконання, що (і підтримує його функціонування) виправило це для мене.


3

перевірте свій ключ "localhost" на сторінці NSExceptionDomains у info.plist

якщо його не існує, це спричиняє помилку.


2

Припустимо, що ви використовуєте nvmта встановлено кілька версій вузла, ось таке рішення:

  1. Скажіть , що ви працюєте npm install -g react-native-cliвnode v6.9.5 .
  2. Тепер зробіть node v6.9.5 за замовчуванням запускnvm alias default 6.9.5
  3. Тепер біжи react-native run-ios

Проблема полягає в тому, що у вас встановлено кілька версій вузла через nvmі для встановлення react-native-cliви переключились або встановили останню версію вузла, яка ще не позначена як вузол за замовчуванням, на який слід вказати nvm. Після запуску react-native run-iosце відкриває ще одне нове вікно терміналу, в якому за замовчуванням nvmне вказано версію вузла, де ви встановили react-native-cli. Просто дотримуйтесь наведених вище налаштувань, я сподіваюся, що це допоможе.


2

переконайтеся, що у вашому проекті є .jsbundle

Додайте

react-native bundle --dev false --entry-file index.js --bundle-output ios/main.jsbundle --platform ios

у власному коді реакції спробуйте знову відкрити проект


1

Я працюю RN 0.49.5. Я спробував безліч методів, але ніхто не працює. Нарешті я опрацював це. Це просто і легко.

Основна ідея - змінити localhostна 127.0.0.1, але це не те, де вам каже RN. Це в RCTBundleURLProvider.m # - (BOOL) isPackagerRunning: (NSString *) хост .

Зміни коду: oc - NSString *host = ipGuess ?: @"localhost"; + NSString *host = ipGuess ?: @"127.0.0.1"; це нормально для тренажера. Якщо це пристрій, просто змініть ip-адресу на свою машину.


Не могли б ви детальніше розглянути своє рішення?
— Ашіш Сінгх Рават

1

Ще одна річ, яка працює для мене, - це відкрити проект у xcode, а потім очистити та створити його. зазвичай це перезавантажує пакувальний сервер і вирішує проблему.


1

Виконай нижче команду:

killall -9 node
rm -rf ios/build
react-native run-ios

він відкриє startpackager.command і додаток встановиться на тренажері ios


0

Переконайтеся, що launchPackage.commandви працюєте в терміналі та спробуйте запустити ще раз. Це побудує розшарування. Це як би webpack-dev-сервер.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.