main.jsbundle 文件显示在我的 iOS 项目中,但仍然抛出“No bundle url present”

Cod*_*ger 7 ios react-native

我正在创建一个新的 React Native 应用程序,但在 iOS 模拟器上运行它时遇到了诸如“不存在捆绑 URL”之类的错误。

在 iOS 上运行应用程序的命令:

react-native run-ios --port=8089
Run Code Online (Sandbox Code Playgroud)

我尝试了以下链接中建议的所有可能的解决方案。

react-native 中“不存在捆绑 URL”是什么意思?

https://www.andrewcbancroft.com/2017/04/22/solving-react-natives-no-bundle-url-present-error/

以及许多其他参考资料,但根本没有运气。

解决方案 1:我尝试AppTranportSecurityinfo.plist.

<key>NSAppTransportSecurity</key>
    <dict>
        <key>NSAllowsArbitraryLoads</key>
        <true/>
        <key>NSAllowsArbitraryLoadsInWebContent</key>
        <true/>
        <key>NSExceptionDomains</key>
        <dict>
            <key>localhost</key>
        <dict>
            <key>NSAllowsLocalNetworking</key>
            <true/>
            <key>NSExceptionAllowsInsecureHTTPLoads</key>
            <true/>
        </dict>
    </dict>
</dict>
Run Code Online (Sandbox Code Playgroud)

解决方案 2:尝试从 iOS 文件夹中删除构建并重新构建。

  • 删除构建文件夹 rm -r build
  • react-native run-ios再次运行

解决方案 3:Package.json文件中的行下方添加

"build:ios": "react-native bundle --entry-file ./index.js --platform ios --bundle-output ios/main.jsbundle"
Run Code Online (Sandbox Code Playgroud)

一点运气都没有。

甚至我的 Metro Builder 在端口 8089上运行,因为8081被 MacFee 防火墙应用程序使用。

在此处输入图片说明

Cod*_*ger 9

最后,我解决了上述问题。以下是帮助我解决此问题的解决方案。

所以正如我在我的问题中提到的,我尝试了所有发布在 SO 或其他门户上的解决方案,但没有成功。因此,我对生成的 iOS 代码进行了更多调查,并了解了以下几点。

  1. main.jsbundle在该文件中生成但没有 JS 代码,因此这是我在此应用程序中的第一个问题。

解决方案:尝试main.jsbundle使用以下react-native命令生成您的文件并在您的 iOS 文件夹中验证它。

react-native bundle --entry-file='index.js' --bundle-output='./ios/main.jsbundle' --dev=false --platform='ios' --assets-dest='./ios'
Run Code Online (Sandbox Code Playgroud)

或者

react-native bundle --entry-file index.js --platform ios --dev false --bundle-output ios/main.jsbundle --assets-dest ios
Run Code Online (Sandbox Code Playgroud)

奎:它会做什么?

并且:它将手动生成main.jsbundle包含所有 JS 代码的文件。

  1. 生成main.jsbundle文件后,我尝试再次运行该应用程序并收到相同的错误“ No bundle url

解决方案:我发现手动生成的文件没有添加到我的项目目标中,所以我将main.jsbundle文件添加到我的应用程序目标中。

步骤 1:main.jsbundle在 XCode 中选择 Your -> Project Navigator 窗格

步骤 2:在目标成员资格部分检查相关项目目标。

在此处输入图片说明 在此处输入图片说明

最后一步是为 iOS 添加构建脚本命令 package.json

"scripts": {
    ...
    "bundle:ios": "react-native bundle --entry-file index.js --platform ios --dev false --bundle-output ios/main.jsbundle --assets-dest ios",
    "postinstall": "npm run bundle:ios"
  }
Run Code Online (Sandbox Code Playgroud)

希望这能帮助那些在这个问题上挣扎的人。

在过去的 3 天里,我确实在努力解决这个问题。

感谢 StackOverflow 和 Github 问题。

参考链接:https : //github.com/facebook/react-native/issues/18472