XCode9.2でProduct> Archiveを使用して、React Nativeプロジェクトをアーカイブしようとしました。しかし、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エラー。
この問題の修正には数日かかります。 travis-ciでビルドを実行すると、この問題が発生しました。ここに私の修正があります:
Package.jsonファイルのscripts
にこの行を追加します。
"build:ios": "react-native bundle --entry-file='index.js' --bundle-output='./ios/main.jsbundle' --dev=false --platform='ios'"
これで、main.jsbundle
を生成するコマンドを実行できます。 yarn build:ios
またはnpm run build:ios
Xcodeを開きます->プロジェクトターゲットを選択->ビルドフェーズでmain.jsbundle
をCopy Bundle Resource
に追加します。 (下の画像)。
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でこのコマンドの後に実行します。それがバンドルを作成し、その後そのようなエラーがないことを願っています...ありがとう
これは、プロジェクトにオフラインバンドルファイルが存在しない場合に発生します。同じ問題が発生し、これでうまくいきました。
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",
このコマンドは私のために機能します。
react-native bundle --entry-file ./index.ios.js --platform ios --bundle-output ios/main.jsbundle
シェルスクリプトを書き直して問題を解決しました。 プロジェクト> ビルドフェーズ> バンドルReactネイティブコードとイメージ。スクリプトに空白文字がありました。
最新のXcodeおよびReact Nativeバージョン。 My React Native Version:0.56 and Xcode 10を使用することをお勧めします。
ステップ1:AppDelegate.mを変更 file
// 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以降を使用している場合は、[ファイル]> [ProjectWorkSpace設定]> [ビルドシステム]で[ビルドシステム]を[レガシービルドシステム]に変更してください。
ステップ3:「babel-preset-react-native」が5.0.1に存在しない場合はアップグレードしますpackage.jsonファイルを追加してください。
NodeModulesおよびpackage.lockファイルを削除して追加します(npm installまたはyarn install)。
ステップ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を削除して、再度追加します。 (ポッドインストール)
Happy Coding:)
私の場合、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
from ^5.0.2
から^4.0.0
アーカイブプロセスを機能させる。
私の場合、これはプロジェクトパスのスペース文字/users/USER/Projects/Project HousePlants/
が原因でした。
Project Houseplants
のスペースは、バンドルが処理できないため、main.jsbundle
を見つけることができません
パスに空白文字がないことを確認して、再試行してください。
私の場合、javascriptコードが原因でした。 Metro Bundler(コマンドライン)で表示されたエラー。 Metro Bundlerを確認し、エラーがあるかどうかを確認します。