17 votes

React Native XCode Project Product Archive Échecs avec des symboles en double pour l'architecture arm64

XCode Log

Étrangement, je n'arrive pas à faire fonctionner Archive dans XCode, mais la construction réussit sans les erreurs sur les symboles en double si je ne tente pas d'Archiver mais construit simplement une version release. Le projet se construit également correctement sur les appareils.

J'ai fait des recherches sur ce sujet et j'ai essayé de désactiver la testabilité, et de régler le paramètre "Pas de blocs communs" dans les paramètres du projet sur NON également, mais sans succès jusqu'à présent.

Le projet est un projet basé sur React Native 0.40 avec CocoaPods installé également. Le PodFile est le suivant

# You Podfile should look similar to this file. React Native currently does not support use_frameworks!
source 'https://github.com/CocoaPods/Specs.git'

platform :ios, '8.0'

# Change 'AirMapsExplorer' to match the target in your Xcode project.
target 'StreetSmart' do
  pod 'React', path: '../node_modules/react-native', :subspecs => [
    'Core',
    'RCTActionSheet',
    'RCTAnimation',
    'RCTGeolocation',
    'RCTImage',
    'RCTLinkingIOS',
    'RCTNetwork',
    'RCTSettings',
    'RCTText',
    'RCTVibration',
    'RCTWebSocket'
  ]

  pod 'GoogleMaps'  # <~~ remove this line if you do not want to support GoogleMaps on iOS

# when not using frameworks  we can do this instead of including the source files in our project (1/4):
#  pod 'react-native-maps', path: '../../'
#  pod 'react-native-google-maps', path: '../../'  # <~~ if you need GoogleMaps support on iOS
end

La version de XCode est 8.2.1, et le fichier du projet est ouvert via .xcworkspace puisque les pods sont installés.

J'apprécierais vraiment toute aide ou idée sur ce sujet, je suis bloqué depuis des heures.

39voto

stueynet Points 649

J'ai donc fait des recherches plus approfondies sur le sujet et la solution de contournement est en fait beaucoup plus simple. Ou du moins, elle l'était dans mon cas. Le problème est que lorsque vous déclarez React dans le podfile, le projet xcode Pods reçoit une cible React dans le cadre de l'application pod install processus. C'est la présence de cette cible dans le projet Pods qui provoque l'erreur lorsque vous archivez. La solution consiste donc à supprimer la cible.

enter image description here

Le problème de la suppression de la cible dans xCode est que cela modifie en fait le fichier project.pbxproj dans le dossier Pods qui n'est pas dans le contrôle de version. Ainsi, alors que la construction sera archivée une fois que vous aurez fait cela, si vous déployez à partir d'un autre endroit que la machine qui a manuellement supprimé la cible, elle échouera toujours. La solution consiste donc à ajouter cette commande post-installation au bas de votre fichier Pod :

post_install do |installer|
  installer.pods_project.targets.each do |target|
    if target.name == "React"
      target.remove_from_project
    end
  end
end

Cela boucle simplement sur tous les pods à installer et supprime la cible de celui de React. De cette façon, toute personne qui construit le projet, supprimera également la cible. Maintenant, lorsque vous construisez vers Archive, il n'y aura pas d'échec.

13voto

Kaiwen Huang Points 491

J'ai finalement résolu le problème après avoir trouvé un problème pertinent sur un autre projet react-native. ici .

La réponse est qu'il y a deux copies de React Native dans le projet Xcode, une provenant de CocoaPods et une autre en tant que sous-projet. Il suffit de supprimer tous les modules qui ont déjà été déclarés dans le Podfile sous l'en-tête Libraries dans Xcode et l'erreur disparaît après un nettoyage et un nouvel essai.

Ce qui est intéressant dans ce problème, c'est que toutes les constructions dans Debug et Release fonctionnent, mais qu'elles échouent lorsque l'on tente d'archiver le projet pour la distribution.

[Mise à jour du 2 mai 2017]

La solution que j'ai décrite ci-dessus peut provoquer des erreurs de débogage lorsque vous exécutez votre code avec react-native run-ios/android bien qu'il permette d'archiver le projet avec succès.

Une méthode alternative consiste à supprimer les modules en double qui existent à la fois dans Libraries y Podfile de la Podfile au lieu de la déclaration Libraries dossier. Et bien sûr, exécutez les commandes pod appropriées, nettoyez votre projet, etc.

Cela a permis à mon code d'être archivé et de fonctionner sans erreurs de débogage.

1voto

Alexandre Lage Points 126

J'ai résolu ce problème de la manière suivante : (réf. : https://github.com/react-community/react-native-maps/issues/718 )

  1. Ouvrez Xcode > Pods > Fichiers de support des cibles > Pods-{ NOM DE LA CIBLE } trouver "OTHER_LDFLAGS" et supprimer uniquement -ObjC dans ces deux fichiers :

Pods-{TARGET-NAME}.release.xcconfig e Pods-{TARGET-NAME}.debug.xcconfig

  1. Aller à objectif principal du projet > Build Settings > Other Linker Flags : Assurez-vous qu'aucun -ObjC est laissé dans la valeur valeur, j'ai supprimé le dossier build/Build dans ios et relancer votre projet.

Cela fonctionne maintenant.

Effets secondaires du lien ci-dessus : l'application peut devenir plus grande car elle peut contenir des symboles en double.

J'espère que cela pourra vous aider.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X