J'ai essayé d'archiver mon projet natif de réaction en utilisant Product > Archive sur XCode9.2. Mais Xcode produit cette erreur:
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
J'ai aussi essayé de courir sur le terminalreact-native bundle --entry-file='index.ios.js' --bundle-output='./ios/Scavenger/main.jsbundle' --dev=false --platform='ios' --assets-dest='./ios'
mais s'est retrouvé avec une erreur de chargement du graphe de dépendance ... Fin inattendue de l'entrée JSON
Erreur Xcode.
Commentez cette ligne dans AppDelegate.m
jsCodeLocation = [[RCTBundleURLProvider sharedSettings] jsBundleURLForBundleRoot:@"index" fallbackResource:nil];
Utilisez cette ligne: -
jsCodeLocation = [[NSBundle mainBundle] URLForResource:@"main" withExtension:@"jsbundle"];
Après cela, lancez ceci pour faire jsbundle: -
react-native bundle --entry-file index.js --platform ios --dev false --bundle-output ios/main.jsbundle --assets-dest ios
Exécuter après cette commande dans xcode . J'espère que cela fera un paquet et qu'il n'y aura plus d'erreur après cela ....
Ce problème me prend quelques jours à résoudre. J'ai eu ce problème lors de l'exécution de la compilation sur travis-ci. Voici ma solution:
Ajoutez cette ligne à scripts
dans votre fichier package.json.
"build:ios": "react-native bundle --entry-file='index.js' --bundle-output='./ios/main.jsbundle' --dev=false --platform='ios'"
Maintenant, vous pouvez exécuter la commande pour générer main.jsbundle
. yarn build:ios
ou npm run build:ios
Ouvrez le Xcode -> Sélectionnez la cible du projet -> Ajoutez main.jsbundle
à Copy Bundle Resource
dans Build Phases. (image ci-dessous).
Cela se produit lorsqu'il n'y a pas de fichier de bundle hors connexion dans votre projet, j'ai eu le même problème et cela a fonctionné pour moi.
J'ai ajouté la ligne ci-dessous à mon fichier package.json, dans la section scripts
, de sorte que je n'ai pas à la saisir à chaque fois que je veux générer un bundle hors connexion.
"build:ios": "react-native bundle --entry-file='index.ios.js' --bundle-output='./ios/YourAppName/main.jsbundle' --dev=false --platform='ios' --assets-dest='./ios'"
Et puis exécutez cette commande dans votre dossier de projets d'application:
npm run build: ios
Après avoir exécuté la commande ci-dessus, un nouveau main.jsbundle
sera généré dans votre répertoire ios/YourAppName
.
Ensuite, ouvrez votre projet en utilisant XCode, faites un clic droit sur le nom de votre projet, puis cliquez sur Ajouter des fichiers à "YourProjectName
", choisissez le fichier main.jsbundle
qui a été généré, puis compilez à nouveau.
Maintenant, cela pourrait bien fonctionner.
J'utilise:
"react": "16.0.0-alpha.12",
"react-native": "^0.48.3",
Il est recommandé d'utiliser les dernières versions de Xcode et de React Native. Ma version React Native: 0.56 et Xcode 10
Étape 1: _ {Modifier AppDelegate.m fichier
// 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
Étape 2:Modifiez la configuration de construction de Xcode en "Libération"
Goto Products> Scheme> Edit Scheme> changez le débogage en version
si vous utilisez Xcode 10+, modifiez Build System en Legacy Build System sous Fichier> Paramètres de ProjectWorkSpace> Build System.
Step 3: Mettez à niveau votre "babel-preset-react-native" vers la version 5.0.1. S'il n'existe pas dans votre fichier package.json, ajoutez-le.
Supprimez NodeModules et le fichier package.lock, puis ajoutez-les (installation npm ou installation de fil).
Étape 4:Changer le fichier ".babelrc.js"}
Ajouter "presets: ["module:metro-react-native-babel-preset"]
Étape 5:Ouvrir un terminal
Ouvrez le terminal et naviguez dans le répertoire de votre projet avec cette commande
"react-native bundle --entry-file index.js --platform ios --dev false --bundle-output ios/main.jsbundle --assets-dest ios/assets"
_ {cela générera un fichier "main.jsbundle" dans le dossier iOS
Étape 6: Ajoutez le fichier "main.jsbundle" dans Xcode.
Ouvrez Xcode et accédez à "Build Phase" sous "Copy Bundle Resource", ajoutez le fichier "main.jsbundle".
Nettoyez votre projet et effacez également vos données dérivées dans Xcode .Cela construira votre projet en mode Publication.
Pour l'erreur "Archive"
Ajoutez cette dépendance dans votre "fichier 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'
Enlevez pod et pod.lock et rajoutez-le. (installation du pod)
Happy Coding :)
Dans mon cas, cette erreur s’est produite lors de l’archivage après la mise à jour de 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
Une grande importance pour résoudre ce problème avait la ligne au-dessus de l'erreur liée à babel-preset-react-native
Après de nombreuses heures à essayer plusieurs solutions, j'ai trouvé une solution en rétrogradant babel-preset-react-native
de ^5.0.2
à ^4.0.0
pour que le processus d'archivage fonctionne.
Problème résolu après la réécriture du script shell. Projet > Phase de construction > Bundle React Code natif et images . Il y avait un espace vide dans le script.