我尝试使用产品>存档我的反应原生项目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错误。
答案 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.jsbundle
或yarn build:ios
打开Xcode->选择项目目标->在构建阶段中将npm run build:ios
添加到main.jsbundle
。 (下图)。
答案 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
请确保您的路径中没有空格字符,然后重试。
答案 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中的项目对我有帮助