web-dev-qa-db-fra.com

L'archive du produit de projet XCode natif échoue avec des symboles en double pour l'architecture arm64

 XCode Log

Bizarrement, je n'arrive pas à faire en sorte qu'Archive fonctionne dans XCode, mais la construction réussit sans les erreurs sur les symboles en double si je ne tente pas d'archiver, mais crée simplement une version. Le projet s'appuie également sur les périphériques.

J'ai effectué des recherches sur ce sujet et essayé de désactiver la testabilité, et de définir le paramètre «Aucun bloc commun» dans les paramètres du projet sur NO, mais aucune chance jusqu'à présent.

Le projet est un projet React Native 0,40 avec CocoaPods également installé. PodFile est-ce

# 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 XCode est 8.2.1 et le fichier de projet est ouvert via .xcworkspace à partir du moment où les pods sont installés. 

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

15
Kaiwen Huang

Enfin résolu le problème après avoir trouvé un problème pertinent sur un autre projet réag-natif ici .

La réponse est qu'il existe deux copies de React Native dans le projet Xcode, une de CocoaPods et une autre en tant que sous-projet. Supprimez simplement tous les modules déjà déclarés dans Podfile sous la Libraries dans Xcode et l'erreur disparaît après un nettoyage et une nouvelle tentative.

Ce qui est intéressant à propos de ce problème est que toutes les versions de Debug et Release fonctionnent, mais cela échoue lors de la tentative d'archivage du projet pour la distribution.

[Mise à jour 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'elle permette au projet d'être archivé avec succès.

Une autre méthode consiste à supprimer les modules en double qui existent à la fois dans Libraries et Podfilede la déclarationPodfile au lieu du dossier Libraries. Et bien sûr, exécutez les commandes de pod correspondantes, nettoyez votre projet, etc.

Cela permettait à mon code d’archiver et d’exécuter sans erreurs de débogage

13
Kaiwen Huang

J'ai donc fait encore plus de recherches à ce sujet et la solution de contournement est en réalité beaucoup plus simple. Ou du moins c'était dans mon cas. Le problème est que lorsque vous déclarez React dans le podfile, le xcodeproject de Pods obtient une cible React dans le cadre du processus pod install. Avoir cette cible dans le projet Pods est la cause de l'erreur lorsque vous archivez. La solution consiste donc à supprimer la cible.

 enter image description here

Le problème avec la suppression de la cible dans xCode est que cela modifie réellement le fichier project.pbxproj dans le dossier Pods qui ne se trouve pas dans le contrôle de version. Ainsi, bien que la construction archivera une fois que vous aurez fait cela, si vous déployez à partir de n'importe quel endroit autre que la machine qui l'a supprimée manuellement, cela échouera quand même. La solution consiste donc à ajouter cette commande post-installation au bas de votre podfile:

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

Cela passe simplement en boucle à travers tous les modules à installer et supprime la cible de React. De cette façon, n'importe où qui construit le projet, supprimera également la cible. Maintenant, lorsque vous construirez sur Archive, cela n'échouera pas.

36
stueynet

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

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

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

  1. Allez à cible principale du projet} _> Construire Paramètres> Autres drapeaux de l'éditeur de liens: assurez-vous qu'il ne reste plus de -ObjC dans la valeur J'ai supprimé le dossier build/Build dans ios et relancez votre projet. 

Ça 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 ça peut t'aider.

1
Alexandre Lage