2017-02-03 4 views
3

XCode LogReagieren india XCode Projekt Produktarchiv schlägt mit doppelten Symbole für Architektur arm64

Komischerweise kann ich nicht Archive zu bekommen scheint in XCode zu arbeiten, aber das Build erfolgreich ohne Fehler auf doppelte Symbole, wenn ich nicht versuchen, zu archivieren, sondern einfach eine Release-Version zu erstellen. Das Projekt baut auch auf Geräten richtig auf.

Ich habe zu diesem Thema gesucht und versucht, die Testbarkeit zu deaktivieren und die 'No Common Blocks' in den Projekteinstellungen auf NO zu setzen, aber bisher kein Glück.

Das Projekt ist ein React Native 0.40-basiertes Projekt mit CocoaPods installiert. PodFile ist diese

# 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 

XCode Version ist 8.2.1, und die Projektdatei wird über .xcworkspace geöffnet, da Schoten installiert sind.

Würde ich wirklich jede Hilfe oder Einsicht zu schätzen wissen, seit Stunden in diesem stecken.

+0

Ist der Include- und/oder Library-Pfad für die Entwicklung identisch mit dem Release? – kometen

+0

Nicht sicher, was du meinst ... Ich habe keine Probleme, die App im Freigabemodus zu erstellen und auf dem Gerät auszuführen. Und Archive verwendet die Release-Build-Konfiguration, aber nur Archive schlägt mit diesen Fehlern fehl. –

Antwort

9

Endlich löste das Problem nach dem Finden eines relevanten Problems auf einem anderen reagierenden Projekt here.

Die Antwort ist, dass es im Xcode-Projekt zwei Kopien von React Native gibt, eine von CocoaPods und eine andere als Teilprojekt. Entfernen Sie einfach alle Module, die bereits in Podfile unter der Libraries in Xcode deklariert wurden und der Fehler verschwindet nach einem sauberen und erneut versuchen.

Interessant an diesem Problem ist, dass alle Builds in Debug und Release funktionieren, aber es schlägt fehl, wenn Sie versuchen, das Projekt für die Verteilung zu archivieren.

[Update 2. Mai 2017]

Die Lösung, die ich oben beschrieben kann Debug-Zeitfehler verursachen, wenn Sie Ihren Code mit react-native run-ios/android laufen, obwohl es dem Projekt ermöglicht erfolgreich archiviert werden.

Eine alternative Methode ist es, die doppelte Module, die beide zu entfernen existieren in Libraries und Podfileaus derPodfile Erklärung anstelle des Libraries Ordner. Und natürlich laufen die entsprechenden Befehle pod, Reinigen Sie Ihren Projekt usw.

Dadurch mein Code erlaubt zu archivieren und auch ohne Debug-Zeitfehler führen

+1

danke! Hatte das gleiche genaue Problem –

+2

Das ist, was ich auch dachte, aber wenn ich Bibliotheken aus dem Projektordner entfernen, während das Projekt gut baut, auf Debug habe ich einen Fehler "Native Modul kann nicht null sein". Ist dir diese auch begegnet? –

+0

Ich stecke jetzt auf diesem, jetzt bei 400+ doppelte Symbole ... Ich kann mein Projekt nicht archivieren, und ich muss dieses Wochenende eine Freigabe Ich benutze eine Mischung aus Bibliotheken und Pods, ich bin Ich bin mir nicht sicher, ob es meine überlappenden Bibliotheken verursacht hat. Ich habe 'pod deintegrate && pod install' ' doppelte Symbol _OBJC_METACLASS _ $ _ RCTWebSocketModule' –

6

Also habe ich noch mehr Forschung in diese und die Abhilfe ist eigentlich viel einfacher. Oder zumindest war es in meinem Fall. Das Problem besteht darin, dass das Pods xcodeproject ein React-Ziel als Teil des pod install-Prozesses erhält, wenn Sie in der Poddatei Reagieren deklarieren. Dieses Ziel im Pods-Projekt verursacht den Fehler beim Archivieren. Die Lösung besteht also darin, das Ziel zu entfernen.

enter image description here

Das Problem mit dem Ziel in xCode zu entfernen ist, dass diese project.pbxproj Aktenordner in der Pods, die nicht in der Version tatsächlich bearbeitet Kontrolle.Während der Build archiviert wird, wenn Sie das tun, wird es weiterhin fehlschlagen, wenn Sie von einem anderen als dem Computer bereitstellen, der es manuell löschte. So ist die Lösung dieser Beitrag hinzuzufügen, ist Befehl an den unteren Rand des podfile installieren:

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

Dieses einfach alle Schleifen durch die Hülsen und das Ziel für das Reagieren einer entfernt installiert werden. Auf diese Weise wird das Ziel überall entfernt, wo das Projekt erstellt wird. Jetzt, wenn Sie zu Archiv erstellen, wird es nicht fehlschlagen.

+1

Ich verbrachte einige Stunden, diese Sache zu verfolgen. Und alle anderen Optionen führen dazu, dass entweder "Archivieren" oder "Ausführen" abgebrochen wird. Nahm mich für immer zu finden, warum React wurde zweimal gebaut, aber schließlich löst dies. Danke @stueynet! –

+1

@PinguinDirk genial! Froh das zu hören. – stueynet

+0

Ich lege deinen Vorschlagscode ganz unten in podfile an, aber ich führe "archive" aus, es gibt immer noch denselben Fehler, sollte ich pod install ausführen? –

Verwandte Themen