'没有包含URL的含义是什么'反应原生?

时间:2017-03-05 15:16:48

标签: ios reactjs react-native

当我运行一个本机反应项目时,我收到一个错误no bundle URL present,但我不知道我做了什么错,我很困惑。

enter image description here

61 个答案:

答案 0 :(得分:96)

通过以下方式解决错误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 :(得分:63)

我也遇到了这个问题(第一次开始使用React Native)。当ios模拟(react-native run-ios)正在运行时,问题就消失了 - 我再次运行npm install然后react-native run-ios。在终端窗口中,它显示它正在捆绑,然后模拟器显示欢迎屏幕。

react-native init PropertyFinder行尝试使用npm start之后

Check this link for briefs(这个适用于我)

答案 2 :(得分:27)

关闭模拟器和终端。打开一个新项目并转到您的项目,然后像这样升级您的反应原生:

react-native upgrade

问题:https://github.com/facebook/react-native/issues/5090

答案 3 :(得分:25)

按照错误消息中的说明:

  

同意Xcode / iOS许可证需要管理员权限,请运行“sudo xcodebuild -license”,然后重试此命令。

...我运行了以下命令:

sudo xcodebuild -license

现在有效。

答案 4 :(得分:18)

如果您不允许通过localhost进行不安全的连接,或者您尝试通过http接受不安全的连接,则会出现此问题。

要解决此问题,请在info.plist上添加:

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

答案 5 :(得分:17)

当我捆绑我的应用程序时遇到同样的问题。 检查您的main.jsbundle是否定位到主项目

答案 6 :(得分:13)

原因:

这是因为应用程序找不到服务器(通过javascript代码为UI提供服务)。

解决方案:

  • 确保所有相关的内容都与本机关闭(不是必需的,只是为了让我的解决方案有一个干净的开始,在我的解释之后,你可以知道这是否需要)
  • 首先运行npm run startyarn start
  • 等待这个命令完成的工作(通常你会看到Loading dependency graph, done.
  • 运行react-native run-ios/android

说明:

  • React Native包含两部分:

    • 原生部分
    • Javascript part
  • 构建命令:

    • react-native run-ios/android是构建本机部分然后部署到设备并在设备上启动应用程序(模拟器/模拟器/真实设备)。这通常需要3到4分钟才能完成。

    • npm run startyarn start是构建javascript部分并启动开发服务器以向应用提供构建的UI。这通常需要30秒才能完成。

=&GT;通常,javascript部分首先完成,然后本机部分稍后出现。 (根据他们使用的时间)。

=&GT;这只适用于第一次构建(新构建)。

=&GT;重建:

  • 原生部分只花了10~15秒来检查变化,因为原生部分没有变化=&gt;在构建和提供javascript部分之前完成。 (我不确定javascript部分是否已经重建但是它比原生部分需要很长时间)

  • 这就是为什么我们遇到这个问题,应用程序运行并且需要尚未存在的东西。

加成:

  • react-native run-ios/android将为您自动启动开发服务器。
  • 这就是为什么当您在react-native run-ios/android之后立即运行react-native init <app_name>时,一切运行良好。 (因为自动启动功能和上面所述的新构建时间)。
  • 其他“删除”解决方案有效,因为它们被迫重建。

这个答案使用的时间是相对于我的机器=&gt;可能与其他人不同。

答案 7 :(得分:11)

我遇到了同样的错误,只能通过Xcode运行应用程序。 react-native run-ios没有用。要解决此问题,您需要删除build处的YOUR_PROJECT/ios/build/文件夹。在此之后,您应该可以再次通过react-native run-ios运行您的应用。希望这会有所帮助。

答案 8 :(得分:7)

尝试运行此代码---

sudo xcodebuild -license

这可以解决问题。这对我有用。

答案 9 :(得分:6)

执行以下步骤:

  • 使用xcode打开ios文件项目
  • 在项目包中删除main.jsbundle文件
  • 通过main.jsbundle名称添加新的空文件
  • 运行注释:react-native包--entry-file index.js-平台ios --dev否--bundle-output ios / main.jsbundle --assets-dest ios
  • 现在react-native run-ios

youtube链接:https://www.youtube.com/watch?v=eCs2GsWNkoo

答案 10 :(得分:6)

为我解决了什么:

  • 打开终端窗口
  • cd加入YOUR_PROJECT/ios
  • 使用rm -r build
  • 删除构建文件夹
  • 再次运行react-native run-ios

或者,您可以打开Finder,导航到YOUR_PROJECT/ios并删除build文件夹。

然后运行react-native run-ios again

来源:Andrew Bancroft

答案 11 :(得分:5)

大多数情况下,当DNS查找/ IP查找无法找到localhost时会出现此问题。

解决方案:

尝试将localhost ip添加到您的etc主机文件中。

您可以将以下行添加到您的etc主机文件(/ etc / hosts)

127.0.0.1 localhost

255.255.255.255 broadcasthost

:: 1 l。 ocalhost

确认这是问题 你可以在safari上点击捆绑网址(如果你在chrome中尝试它会解决但是safari赢了并且无法解决它)。 http://localhost:8081/index.ios.bundle?platform=ios&dev=true&minify=false

答案 12 :(得分:5)

解决方案 - &gt; npm start然后打开新终端并转到项目路径,然后点击 react-native run-ios它对我有用

答案 13 :(得分:5)

确保.plist文件中的ATS设置正确。

您可以在 / 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>

*(别忘了在发布版本中删除它。)

答案 14 :(得分:5)

对我来说问题是它无法创建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/issues/13078。基本上你必须手动安装react@16.0.0-alpha.3。这可以通过运行此命令来完成。

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

现在每个人都会遇到这个问题,因为更新版本的反应alphas正在发布(特别是alpha.5),而且它们正在破坏反应原生的构建。

答案 15 :(得分:4)

首先关闭模拟器,然后在终端上运行

npm install

react-native run-ios

答案 16 :(得分:4)

这是react-native v0.42.1的问题。尝试关闭所有终端和XCode实例并运行:

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

答案 17 :(得分:4)

我发现绕过此最简单/最快捷的方法是退出模拟器中的应用程序(2 x Cmd + Shift + H)并重新启动。

答案 18 :(得分:3)

检查您的网络代理,最好将其关闭。

或者您应该找到另一种维护打包服务器的方法

答案 19 :(得分:3)

检查您的本地主机&#39; NSExceptionDomains中的密钥在info.plist中显示

如果它不存在,则会导致错误。

答案 20 :(得分:2)

在重新启动我的mac之后,我也遇到过这种情况。当您在模拟器上运行应用程序时,会打开一个launchPackager终端窗口。我关闭了那个窗口并终止了这个过程(我也完成了模拟器),然后再次运行react-native run-ios,一切正常。

答案 21 :(得分:2)

假设您正在使用nvm并安装了多个版本的节点,以下是解决方案:

  1. 假设您在npm install -g react-native-cli中运行node v6.9.5
  2. 现在通过运行node v6.9.5
  3. nvm alias default 6.9.5设为默认值
  4. 现在运行react-native run-ios
  5. 问题是,您通过nvm安装了多个版本的节点,并安装react-native-cli您已切换或安装了最新版本的节点,该节点未标记为指向{{的默认节点1}}。当您运行nvm时,这会打开另一个新的终端窗口,其中默认react-native run-ios未指向已安装nvm的节点版本。只需按照上面的设置,我希望应该有所帮助。

答案 22 :(得分:2)

我有同样的问题。但我的问题是我的Mac和iPhone不在同一个wifi网络。

确保他们都在同一个网络中并再次重建。如果不是这种情况,请尝试其他成员提到的解决方案。

答案 23 :(得分:2)

在我的情况下,通过重新启动adb服务器解决了问题:adb kill-server && adb start-server

答案 24 :(得分:2)

我也遇到过这个问题...问题是打包器没有运行它似乎可能是因为我的默认shell是zsh。 react-native轮胎打开一个新的终端窗口并运行.../node_modules/react-native/packager/launchPackager.command,但这没有运行。手动运行(并保持运行)为我解决了这个问题。

答案 25 :(得分:2)

我遇到了同样的问题,并通过在 AppDelegate.m 文件中进行了更改来解决了该问题。我改变了

jsCodeLocation = [[NSBundle mainBundle] URLForResource:@"main" withExtension:@"jsbundle"];

jsCodeLocation = [[RCTBundleURLProvider sharedSettings] jsBundleURLForBundleRoot:@"index" fallbackResource:nil];

对我有用:)

答案 26 :(得分:1)

确保项目中包含.jsbundle

添加

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

在您的本机代码中 尝试重新打开项目

答案 27 :(得分:1)

我正在运行iOS模拟器,此方法有效:

1。清理您的本机项目

1.a对于Android项目

cd android
gradlew clean

1.b对于iOS项目

cd ios
xcodebuild clean

2。清洁您的反应性缓冲剂

2.a如果您使用的是npm

  npm start -- --reset-cache

2.b如果您使用的是纱线

  yarn reset cache

之后,您可以再次运行项目。

答案 28 :(得分:1)

只需在终端react-native start中运行:

cd your react native app directory/ react-native start 

它将启动打包程序,现在不要关闭此终端窗口,在另一个终端窗口中运行您的项目。这是我发现可以正常运行的唯一希望。

答案 29 :(得分:1)

执行以下命令:

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

它将打开launchpackager.command并将应用程序安装在ios模拟器上

答案 30 :(得分:0)

步骤1: 通过“终端”进行导航,在您的xcode中打开.xcodeworkspace项目, “打开/ios/.xcodeworkspace”,按Enter。

步骤2: 删除文件夹中的main.jsbundle文件

步骤3: 回到VS Code,输入 react-native包--entry-file index.js --platform ios --dev false --bundle-output ios / main.jsbundle --assets-est ios

这将为您生成新的main.jsbundle文件。

第4步: react-native run-ios

您不会再看到错误

答案 31 :(得分:0)

这是因为您可能已经关闭了“ Metro Bundler窗口”,否则可能已崩溃。只需在项目目录中打开另一个终端/ cmd,然后运行npm start。通过运行npm start,React Native将再次启动MetroBundler窗口。捆绑程序完成BUNDLE处理后,只需重新加载应用程序,您就可以开始使用了。

答案 32 :(得分:0)

好吧,这听起来很怪异,但这些答案对我来说都不起作用。 我现在的反应本机是0.60,问题是在ios和android上发生的。 唯一对我有用的解决方案是运行 react-native run-iosreact-native run-android 然后,当错误出现时,运行 npm install(保持捆绑器和模拟器打开) 然后运行react-native run-iosreact-native run-android

答案 33 :(得分:0)

打开终端窗口

cd into YOUR_PROJECT/ios

使用rm -r build删除构建文件夹

然后,在Xcode中打开您的项目并运行一次。它将在启动服务器时运行并创建main.jsbundle文件。

现在,如果您再次从终端运行react-native run-ios,它将按预期运行。

希望这会有所帮助!。

答案 34 :(得分:0)

发生此问题是因为在另一个窗口中用键盘打字时,Metro捆绑器启动并获得了焦点。我在新打开的终端窗口中意外输入导致Metro bundler崩溃。重新运行react-native run-ios耐心等待

答案 35 :(得分:0)

如果您正在运行IOS模拟器,请确保需要运行此命令

react-native运行Android 要么 npm run-android

一旦您在命令Metro bundler上面运行,它将启动,然后运行react-nagtive run-ios它将起作用。

答案 36 :(得分:0)

我尝试了以上大多数答案。 但是唯一适用的方法是看门人命令(我使用react-native: "0.60.4"):

watchman watch-del-all

答案 37 :(得分:0)

当我们有多个由nvm管理的节点版本并且默认版本不是要运行react-native的版本时,可能会发生此问题。 (确保它是Node 8.3或更高版本)

  

react-native run-ios

打开一个新终端并运行$ PATH中找到的节点版本。

如果它发现本机不支持的较旧版本的节点,则可能会出现此错误。

请确保在打开新终端时,$ PATH变量已经指向节点的预期版本(确保它是Node 8.3或更高版本)。

那为我解决了这个问题。祝你好运。

答案 38 :(得分:0)

我尝试了上述所有解决方案,但对我却不起作用。这对我有用,如果上述答案对您没有帮助,您可以尝试一下。

  1. 在Xcode上打开项目工作区,然后删除[PROJECT-NAME] /main.jsbundle

  2. 中的main.jsbundle文件
  3. 在同一文件夹中创建一个新的main.jsbundle。 {右键单击->选择新文件->它将打开一个对话框,查找Others部分,->选择Empty->将该文件命名为main.jsbundle->保存< / p>

  4. 然后返回到项目的终端。并运行以下命令:

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

  1. 启动打包程序,然后再次运行IOS应用

我希望这对您有所帮助。

答案 39 :(得分:0)

对于Mcafee Macbook用户:

sudo launchctl删除com.mcafee.agent.macmn

答案 40 :(得分:0)

也许您忘记了这一步

cd ios && pod install

答案 41 :(得分:0)

对于 Ios,请按照以下步骤操作,

  1. rm -rf ./node_modules
  2. npm 安装
  3. react-native 链接
  4. cd ios
  5. Pod 安装
  6. cd..
  7. react-native 启动
  8. 第一次在 XCode 中构建应用程序,然后您也可以从 VScode 中构建应用程序

答案 42 :(得分:0)

我也有这个屏幕,但我的问题是我前一天晚上一直在使用代理(使用 Charles 监控来自 RN env 的网络请求)。

一旦我关闭代理,应用程序就会在我的模拟器中构建/运行而没有问题。

答案 43 :(得分:0)

对于我的用例,我必须删除node_modules目录并运行npm install。

$ rm -rf node_modules   (make sure you're in the ios project directory)
$ npm install

如果收到错误&#34; dyld:未加载库:/usr/local/opt/icu4c/lib/libicui18n.58.dylib" ;,请执行以下操作:

$ brew uninstall --force node --ignore-dependencies node
$ brew uninstall icu4c --ignore-dependencies icu4c
$ brew install icu4c
$ brew unlink icu4c && brew link icu4c --force
$ brew install node

$ npm install

答案 44 :(得分:0)

我正在使用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地址更改为您的设备即可。

答案 45 :(得分:0)

这是因为您的客户端无法访问您的打包服务器。

如果你像我一样是中国编码员,我想你可能会使用VPN通过GFW。当您的VPN工具处于“全局模式”状态时,您的所有请求都将遍历全球,无法获取localhost

尝试自动代理模式&#39;。

如果您不是来自中国,或者您的VPN设置已经是“自动代理模式”,我建议您关闭打包服务器并重试。

答案 46 :(得分:0)

另一件适合我的方法是在xcode中打开项目,然后清理并构建它。通常它重新运行打包服务器并解决问题。

答案 47 :(得分:0)

确保launchPackage.command正在终端中运行,然后再次尝试运行。它将构建捆绑包。它有点像webpack-dev-server。

答案 48 :(得分:0)

...发生这种情况的另一个原因是,如果您已经安装了Visual Studio代码React Native Tools但是您一直尝试在终端中使用react native:它将在第一次工作,但之后它将停止并显示你是红色无捆绑屏幕。

从vscode启动react native可以完美地工作......

答案 49 :(得分:0)

关闭全局代理(shadowsocks)

答案 50 :(得分:0)

尝试添加此内容:

gcloud auth login

答案 51 :(得分:0)

这个对我有用。我确实出于生产目的从iOS的plist文件中删除了这些行,因此模拟器无法获取捆绑文件。 https://medium.com/@joshuakuhar/no-bundle-url-present-69333bb5da42

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

答案 52 :(得分:0)

export FORCE_BUNDLING=true为我工作。控制台中警告说它没有捆绑在一起。

答案 53 :(得分:0)

我通过Macbook上的电缆和wifi连接到网络,禁用了wifi,然后点击运行就可以了!

答案 54 :(得分:0)

我们通过在RN文档建议添加的构建脚本中删除SKIP_BUNDLING选项来加快调试构建,从而解决了这一问题。真正的解决方法(出于我们的原因)包含在RN 0.57中:

https://github.com/facebook/react-native/issues/20553

答案 55 :(得分:0)

这是我的方法:

  • 打开终端窗口
  • 光盘插入YOUR_PROJECT / ios
  • 使用rm -r build删除 build 文件夹
  • 再次运行react-native run-ios

答案 56 :(得分:0)

  1. 检查127.0.0.1 localhost未删除的主机
  2. 检查是否未设置网络代理
  3. 然后npm install&amp; react-native upgrade重置您的项目

答案 57 :(得分:0)

我已经尝试了以下所有解决方案,但没有任何效果:

  • sudo xcodebuild -license
  • 使用rm -r build删除构建文件夹,然后运行react-native run-ios
  • npm start并运行react-native run-ios
  • NSAppTransportSecurity添加到`

我通过这样做解决了

  • 打开主机文件sudo vi /private/etc/hosts(如果使用VSCode,请使用此sudo code /private/etc/hosts
  • 添加三行(如果不存在)
127.0.0.1 localhost
255.255.255.255 broadcasthost
::1 localhost
  • 再次运行react-native run-ios

答案 58 :(得分:-1)

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

答案 59 :(得分:-1)

我知道这个问题有很多答案,但是这些对我没有帮助。下面的解决方案可帮助我解决错误。

您必须进入设置并允许该特定应用。

  1. 打开系统偏好设置。
  2. 点击“安全和隐私”。
  3. 右键单击底部的“单击锁以进行更改”。
  4. 输入密码。
  5. 在“应用商店和已确定的开发人员”的常规标签下,您应该看到被阻止的应用。
  6. 最后一步:点击“仍然打开”

来源“launchPackager.command” cannot be opened because it is from an unidentified developer

答案 60 :(得分:-1)

关闭当前正在运行的React Packager终端窗口,然后从Xcode重新运行您的iOS项目应该可以正常运行。