main.jsbundle不存在。这必须是+ echo'反应原生的错误

时间:2018-03-27 06:06:50

标签: xcode react-native

我尝试使用产品>存档我的反应原生项目XCode9.2上的存档。但Xcode产生了这个错误:

File /Users/louis/Library/Developer/Xcode/DerivedData/Scavenger-evyvzocndqoghkclcbwewolywniz/Build/Products/Release-iphoneos/Scavenger.app/main.jsbundle does not exist. This must be a bug with


My Environment:
  OS: macOS Sierra 10.12.6
  Node: 9.3.0
  npm: 5.5.1
  Watchman: 4.7.0
  Xcode: Xcode 9.2 Build version 9C40b
  Android Studio: 3.0 AI-171.4443003

Packages: (wanted => installed)
  react: ^16.0.0 => 16.2.0
  react-native: ^0.50.3 => 0.50.4

我也尝试在终端上运行
react-native bundle --entry-file='index.ios.js' --bundle-output='./ios/Scavenger/main.jsbundle' --dev=false --platform='ios' --assets-dest='./ios'但最终导致错误加载依赖关系图...     意外结束JSON输入

XCode错误。

Click here to see XCode error

16 个答案:

答案 0 :(得分:18)

在AppDelegate.m中注释这一行

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

使用此行: -

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

之后运行此命令以生成jsbundle: -

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

在xcode中运行此命令。 希望它会捆绑,之后没有这样的错误...... 感谢名单

答案 1 :(得分:16)

这个问题需要几天的时间才能解决。在travis-ci上运行构建时出现此问题。 这是我的解决方法:

将此行添加到package.json文件中的boolean

scripts

现在,您可以运行命令来生成 "build:ios": "react-native bundle --entry-file='index.js' --bundle-output='./ios/main.jsbundle' --dev=false --platform='ios'" main.jsbundleyarn build:ios

打开Xcode->选择项目目标->在构建阶段中将npm run build:ios添加到main.jsbundle。 (下图)。

Xcode fix

答案 2 :(得分:4)

当项目中没有脱机捆绑文件时会发生这种情况,我遇到了同样的问题,这对我有用。

我已将以下行添加到我的package.json文件的scripts部分下,因此每次我想生成离线捆绑包时都不必输入它。

"build:ios": "react-native bundle --entry-file='index.ios.js' --bundle-output='./ios/YourAppName/main.jsbundle' --dev=false --platform='ios' --assets-dest='./ios'"

然后在应用程序项目文件夹中运行此命令:

  

npm run build:ios

运行上述命令后,将在main.jsbundle目录中生成新的ios/YourAppName

接下来,使用XCode打开项目,右键单击项目名称,然后单击“将文件添加到" YourProjectName"”,选择生成的main.jsbundle文件,然后再建一次。

现在它可能运作良好。

我正在使用:

 "react": "16.0.0-alpha.12",
 "react-native": "^0.48.3",

答案 3 :(得分:1)

重写shell脚本后问题解决了。 项目> 构建阶段> 捆绑React原生代码和图片。脚本中有空格字符。

答案 4 :(得分:1)

就我而言,从RN 0.53.3更新到0.55.4后,我在存档时遇到了此错误

/Users/<myuser>/Desktop/projects/<myProjectName>mobileapp/index.ios.js: Plugin 0 specified in "/Users/<myUserName>/Desktop/projects/<myProjectName>mobileapp/node_modules/babel-preset-react-native/index.js" provided an invalid property of "default" (While processing preset: "/Users/<myUserName>/Desktop/projects/<myProjectName>mobileapp/node_modules/babel-preset-react-native/index.js")

+ [[ false != true ]]
+ [[ ! -f /Users/<myUserName>/Library/Developer/Xcode/DerivedData/<myProjectName>Mobile-ghzbbftkebcwlvayfocqahvzifbe/Build/Intermediates.noindex/ArchiveIntermediates/<myProjectName>Mobile/BuildProductsPath/Release-iphoneos/<myProjectName>Mobile.app/main.jsbundle ]]
+ echo 'error: File /Users/<myUserName>/Library/Developer/Xcode/DerivedData/<myProjectName>Mobile-ghzbbftkebcwlvayfocqahvzifbe/Build/Intermediates.noindex/ArchiveIntermediates/<myProjectName>Mobile/BuildProductsPath/Release-iphoneos/<myProjectName>Mobile.app/main.jsbundle does not exist. This must be a bug with'
error: File /Users/<myUserName>/Library/Developer/Xcode/DerivedData/<myProjectName>Mobile-ghzbbftkebcwlvayfocqahvzifbe/Build/Intermediates.noindex/ArchiveIntermediates/<myProjectName>Mobile/BuildProductsPath/Release-iphoneos/<myProjectName>Mobile.app/main.jsbundle does not exist. This must be a bug with
+ echo 'React Native, please report it here: https://github.com/facebook/react-native/issues'
React Native, please report it here: https://github.com/facebook/react-native/issues
+ exit 2

要解决此问题,最重要的是与 babel-preset-react-native

相关的错误

经过数小时的尝试,我找到了一个解决方案,将babel-preset-react-native^5.0.2降级为^4.0.0,以使存档过程正常工作。

答案 5 :(得分:1)

建议使用最新的Xcode和React Native版本。 我的React Native版本:0.56和Xcode 10

步骤1: 更改AppDelegate.m 文件

    //  jsCodeLocation = [[RCTBundleURLProvider sharedSettings] jsBundleURLForBundleRoot:@"index" fallbackResource:nil];
#ifdef DEBUG
  jsCodeLocation = [[RCTBundleURLProvider sharedSettings] jsBundleURLForBundleRoot:@"index" fallbackResource:nil];
#else
  jsCodeLocation = [[NSBundle mainBundle] URLForResource:@"main" withExtension:@"jsbundle"];
#endif

步骤2: 将Xcode构建配置更改为“发布”

转到产品>方案>编辑方案>更改调试以发布

如果您使用的是Xcode 10+,请在File> ProjectWorkSpace Settings> Build System下将Build system更改为Legacy Build System。

第3步: 将“ babel-preset-react-native”升级到5.0.1,如果您的package.json文件中不存在它,请添加它

删除NodeModules和package.lock文件并添加它(npm安装或yarn安装)。

步骤4: 更改“ .babelrc.js”文件

添加“ presets: ["module:metro-react-native-babel-preset"]

步骤5: 打开终端

打开终端并导航到您的项目目录,运行此命令

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

这将在iOS文件夹中生成一个“ main.jsbundle”文件

第6步: 将“ main.jsbundle”文件添加到Xcode中。

打开Xcode并导航到“复制捆绑资源”下的“构建阶段”,添加“ main.jsbundle”文件。

清除项目还清除Xcode中的派生数据。 这将在发布模式下构建您的项目。

针对“存档”错误

将此依赖项添加到“ pod文件”

pod 'React', :path => '../node_modules/react-native', :subspecs => [
    'CxxBridge'
  ]
pod 'yoga', :path => '../node_modules/react-native/ReactCommon/yoga'
pod 'DoubleConversion', :podspec => '../node_modules/react-native/third-party-podspecs/DoubleConversion.podspec'
pod 'glog', :podspec => '../node_modules/react-native/third-party-podspecs/glog.podspec'
pod 'Folly', :podspec => '../node_modules/react-native/third-party-podspecs/Folly.podspec'

删除pod和pod.lock并再次添加。 (安装Pod)

快乐编码:)

答案 6 :(得分:1)

您需要运行以下命令:

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

然后,将具有静态捆绑包的应用程序安装在真实设备上。但是由于静态文件的性质,每当我修改源代码时,都需要再次运行该命令以反映更改。 (您可以在命令中看到下一个错误)

答案 7 :(得分:1)

你可以直接运行:

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

答案 8 :(得分:0)

就我而言,这是由javascript代码引起的。该错误显示在Metro Bundler(命令行)上。检查Metro Bundler,是否有错误。

答案 9 :(得分:0)

这个命令对我有用。

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

答案 10 :(得分:0)

在我的情况下,这是由项目路径中的空格字符引起的:/users/USER/Projects/Project HousePlants/

捆绑软件Project Houseplants中的空间无法处理,因此无法找到您的main.jsbundle

请确保您的路径中没有空格字符,然后重试。

See this answer

答案 11 :(得分:0)

对于像我这样的人来说,这仅仅是JavaScript代码中的错误指示。输入以下命令后,我发现情况确实如此:VBox。 Android用户需要这样指定平台:npx react-native bundle --entry-file index.js --bundle-output "bundle.bundle"

捆绑失败,并显示语法错误。在模拟器中打开违规代码的任何尝试也会显示该错误。

答案 12 :(得分:0)

如果更新xcode并收到此错误,则解决方法是

在根项目的终端中,执行以下命令

 1. sudo xcode-select --reset

 2. npx react-native bundle --entry-file ./index.js --platform ios --bundle-output ios/main.jsbundle

在第二个命令中,如果您发现与JS有关的任何错误,请修复它 成功运行第二条命令后,该错误将消失

答案 13 :(得分:0)

我退出博览会以添加应用内购买后,遇到了这个问题。 我做了以下工作才能使其正常工作

cd <your repo>
npx react-native bundle --entry-file ./index.js --dev false --reset-cache --platform ios --bundle-output ios/main.jsbundle --assets-dest ./ios

运行上述命令后,您必须将main.jsbundle和资产拖放到Xcode中,并通过引用而不是分组将其链接

答案 14 :(得分:0)

如果配置文件的属性在运行时发生更改,请确保其中也没有错误,如果属性设置不正确,则不会生成main.bundlejs。

例如:

isSent:false, 
isShow:false

这两个属性是在运行时设置的,发现对于特定记录isSent和isShow都没有进行设置

isSent:,
isShow:

在运行时导致错误。

答案 15 :(得分:-1)

只需清理Xcode中的项目对我有帮助