it-swarm.com.de

Native XCode-Produktproduktarchiv reagieren mit doppelten Symbolen für Architektur arm64

 XCode Log

Seltsamerweise kann ich nicht anscheinend Archive in XCode zum Laufen bringen, aber der Build ist ohne Fehler bei doppelten Symbolen erfolgreich, wenn ich nicht versuche zu archivieren, sondern einfach eine Release-Version zu erstellen. Das Projekt baut auch auf Geräten ordnungsgemäß auf.

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

Das Projekt ist ein auf React Native basierendes Projekt, auf dem auch CocoaPods installiert ist. PodFile ist das

# 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

Die XCode-Version ist 8.2.1. Die Projektdatei wird über .xcworkspace geöffnet, da Pods installiert sind. 

Würde mich wirklich über jede Hilfe oder Einsicht freuen, stundenlang daran festgehalten.

15
Kaiwen Huang

Endlich wurde das Problem gelöst, nachdem ein relevantes Problem in einem anderen Projekt gefunden wurde, in dem es sich um ein reaktives Projekt handelt: here .

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

Das Interessante an diesem Problem ist, dass alle Builds in Debug und Release funktionieren, jedoch ein Fehler auftritt, wenn versucht wird, das Projekt für die Verteilung zu archivieren.

[Update 2. Mai 2017]

Die oben beschriebene Lösung kann zu Fehlern bei der Fehlerbehebung führen, wenn Sie Ihren Code mit react-native run-ios/Android ausführen, obwohl das Projekt erfolgreich archiviert werden kann.

Eine alternative Methode ist das Entfernen der doppelten Module, die sowohl in Libraries als auch in Podfilevorhanden sind, aus der DeklarationPodfile anstelle des Libraries-Ordners. Und natürlich führen Sie die entsprechenden Pod-Befehle aus, bereinigen Sie Ihr Projekt usw.

Dadurch konnte mein Code archiviert werden und auch ohne Fehler in der Debug-Zeit ausgeführt werden

13
Kaiwen Huang

Also habe ich noch mehr darüber recherchiert und der Workaround ist eigentlich viel einfacher. Zumindest war es in meinem Fall. Das Problem ist, dass das Podcode-Projekt xcode bei der Deklaration von React in der Pod-Datei ein React-Ziel als Teil des pod install-Prozesses erhält. Wenn Sie dieses Ziel im Pods-Projekt haben, verursacht dies den Fehler beim Archivieren. Die Lösung besteht also darin, das Ziel zu entfernen.

 enter image description here

Das Problem beim Entfernen des Ziels in xCode besteht darin, dass die Datei project.pbxproj tatsächlich im Ordner Pods bearbeitet wird, der sich nicht in der Versionskontrolle befindet. Das Build wird dann archiviert, sobald Sie dies getan haben. Wenn Sie es jedoch an einem anderen Ort als dem Computer bereitstellen, auf dem es manuell entfernt wurde, schlägt es dennoch fehl. Die Lösung besteht also darin, diesen Befehl nach der Installation am Ende Ihrer Pod-Datei hinzuzufügen:

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

Dies durchläuft einfach alle zu installierenden Pods und entfernt das Ziel für die React-Einheit. Auf diese Weise wird an jeder Stelle, an der das Projekt erstellt wird, auch das Ziel entfernt. Wenn Sie jetzt zum Archiv erstellen, schlägt dies nicht fehl.

36
stueynet

Ich habe dieses Problem folgendermaßen gelöst: (Ref .: https://github.com/react-community/react-native-maps/issues/718 )

  1. Öffnen Sie Xcode> Pods> Unterstützungsdateien für Ziele> Pods - {TARGET-NAME} find "OTHER_LDFLAGS" und remove nur -ObjC in diesen beiden Dateien:

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

  1. Gehen Sie zu Hauptziel des Projekts> Build Einstellungen> Andere Linker-Flags: Stellen Sie sicher, dass kein -ObjC im Wert ____ vorhanden ist. Ich habe den Ordner build/build in ios gelöscht und das Projekt erneut ausgeführt. 

Es funktioniert jetzt. 

Nebeneffekte aus dem Link oben: Die App kann größer werden, da möglicherweise doppelte Symbole enthalten sind.

Ich hoffe es kann dir helfen.

1
Alexandre Lage