xcode 5.1: libCordova.a Architekturprobleme

81

Gestern (10.03.14), als iOS 7.1 veröffentlicht wurde, habe ich auch ein Upgrade auf Xcode 5.1 durchgeführt und festgestellt, dass mein PhoneGap / Cordova-Projekt nicht mehr mit meinem iPhone 5s kompiliert werden kann. Ich habe Cordova auch auf die neueste Version aktualisiert: v 3.4.0-0.1.3.

Ich habe viele verschiedene Lösungen zu SO gelesen, die sich darauf beziehen, aktive Architekturen zu ändern und nur aktive Architekturen zu erstellen, und keine davon funktioniert. Also hier ist, was ich versucht habe und die Fehler, die ich bekomme. Anfangs habe ich den Fehler bekommen:

missing required architecture arm64 in file <long file path omitted> libCordova.a
Undefined symbols for architecture arm64

Also habe ich folgendes versucht. Ich habe das CordovaLib-Unterprojekt in meinem Projekt ausgewählt und sowohl im Projekt als auch im Ziel unter Build Architectures zu Build Settings gewechselt und sichergestellt, dass arm64es in keiner der Debug- oder Release-Architekturen enthalten ist. Zu diesem Zeitpunkt ist Build Active Architecture Only auf "Ja" gesetzt. Dies führte zu folgendem Fehler:

file was built for archive which is not the architecture being linked (armv7): 
<long file path omitted> libCordova.a
Undefined symbols for architecture armv7

Wenn Sie Build Active Architecture Only auf "No" setzen, wird der Fehler erneut wie folgt:

missing required architecture arm64 in file <long file path omitted> libCordova.a
Undefined symbols for architecture arm64

Ich bin mir nicht sicher, was ich sonst noch versuchen soll. Die Architektureinstellungen des Projekts enthalten nur den Schlüssel "Base SDK", der auf iOS 7.1 eingestellt ist. Das Projektziel verfügt nicht über Architektureinstellungen. Ich bin mir ziemlich sicher, dass das Problem beim eingebetteten CordovaLib-Teilprojekt liegt. Was kann ich tun, damit dieses Ding erfolgreich auf meinem Gerät kompiliert wird?

Update: Gleiches Problem bei Apaches Jira: https://issues.apache.org/jira/browse/CB-6223

anorganik
quelle
2
Ich habe genau das gleiche Problem. iOS 7.1 und Xcode 5.1 stehen Entwicklern seit einiger Zeit zur Verfügung. Daher ist es enttäuschend, dass das Cordova-Team vor ihrer Veröffentlichung keine Warnung dazu ausgegeben hat.
Ade
Ja. Ich habe ein brandneues Cordova-Projekt "Hello World" mit dem neuesten installierten Cordova erstellt, das nicht erfolgreich kompiliert werden konnte.
anorganik
Ist es möglich, das iOS 7.0 SDK zu erhalten und neu zu installieren?
Ade
Ich habe es mit diesen Einstellungen kompilieren lassen, aber wenn ich zum Überprüfen des Archivs gehe, erhalte ich die Fehlermeldung: ** Dieses Bundle ist ungültig. Apps, die eine armv7s-Architektur enthalten, müssen eine armv7-Architektur enthalten. Das ist komisch , weil es so aussieht , ich habe beide enthalten.
Ade
3
Beheben Sie die Schritte im Apache Cordova JIRA-Problem: issue.apache.org/jira/browse/CB-6223 .
Shazron

Antworten:

86

@Shazron hat das Update auf dem Apache JIRA veröffentlicht - er stellt fest, dass das Update als Teil von Cordova 3.5 veröffentlicht wird:

  1. Wählen Sie Ihr Projektsymbol
  2. Wählen Sie Build Settings.
  3. Wählen Sie für "Architekturen" $ ARCHS_STANDARD - Standardarchitekturen (armv7, armv7s, arm64).
  4. Fügen Sie für "Gültige Architekturen" "arm64" hinzu.
  5. Wählen Sie Ihr CordovaLib.xcodeproj-Symbol
  6. Löschen Sie in den Build-Einstellungen für das Projekt (nicht Ziel) die Einstellungen für die bedingte Architektur (bewegen Sie den Mauszeiger, um das Minuszeichen anzuzeigen).
  7. Wählen Sie für "Architekturen" $ ARCHS_STANDARD - Standardarchitekturen (armv7, armv7s, arm64).
  8. Fügen Sie für "Gültige Architekturen" "arm64" hinzu.
  9. Gehe zu 6, aber jetzt mach es für "Ziel"

Hier ist ein Link zu Shazrons vollständiger Beschreibung dieses Problems: http://shazronatadobe.wordpress.com/2014/03/12/xcode-5-1-and-cordova-ios/

Es ist jetzt veröffentlicht und die Kurzversion von dem, was zu tun ist, ist:

Cordova CLI 3.4.1-0.1.0 ist erschienen, einschließlich Cordova iOS 3.4.1, das alle in diesem Blogbeitrag erwähnten Korrekturen enthält. Aktualisieren Sie Ihre Cordova-CLI. Wenn Sie bereits ein Projekt haben, führen Sie ein „Cordova-Plattform-Update ios“ durch.

anorganik
quelle
10
Ausgezeichnet. Für Schritt 6 habe ich Recht, wenn ich denke, ich sollte ALLE diese löschen: SCREENSHOT ?
Ade
1
Es scheint ok zuerst: Die App - Archive und validiert. Beim Export als Ad-hoc-Distribution wird es jedoch nicht auf einem iPhone 5S ausgeführt.
Ade
7
Ja, diese Antwort veranlasst die App, auf einem 5S zu kompilieren und zu installieren. Wenn sie jedoch ausgeführt wird, wird ein lldb-Fehler ausgegeben und stürzt ab (oder sie wird angehalten, wenn Sie Ihr Gerät ausführen, das an Ihren Mac gebunden ist, während Xcode ausgeführt wird).
Jough Dempsey
5
Hier ist der Link zum @ Shasron-Beitrag. Es behandelt 3 Ausgaben: shazronatadobe.wordpress.com/2014/03/12/…
stefbach
Ich bestätige, dass es bei mir funktioniert. Vergessen Sie nicht Punkt 9, bei dem alle Einstellungen für die bedingte Architektur für das Ziel 'Cordova Lib' entfernt werden. Sie sollten sowohl für das Projekt 'CordovaLib' als auch für die Ziele 'CordovaLib' haben. Architektureinstellungen sollten aussehen: - Debug: Standardarchitektur (...) - Release: Standardarchitektur (...)
stefbach
11

Ein weiterer Ansatz, der funktioniert:

  1. Klicken Sie oben im Projektnavigator auf Ihr Projekt (nicht auf das Teilprojekt Cordova.lib).
  2. Wählen Sie im Editorbereich das Projekt (nicht das Ziel) aus, wählen Sie die Registerkarte Build-Einstellungen-Editor und klicken Sie auf die Schaltflächen Alle und Ebenen.
  3. Erweitern Sie ggf. die Gruppe Architekturen und suchen Sie die Zeile Architekturen darunter.
  4. In der ersten (aufgelösten) und dritten (iOS-Standard) Spalte in der Zeile "Architektur" wird "Standard" angezeigt. Die zweite (Projekt-) Spalte ist leer.
  5. Klicken Sie auf die leere zweite Spalte, um ein Feld mit der Zeile "$ (ARCHS_STANDARD)" aufzurufen.
  6. Doppelklicken Sie auf diese Zeile, um sie bearbeitbar zu machen, und ändern Sie sie dann in "$ (ARCHS_STANDARD_32_BIT)".
  7. Klicken Sie außerhalb des Felds, um Ihre Änderung zu bestätigen. Jetzt haben die erste und die zweite Box nur noch ein $.
  8. Jetzt solltest du bauen können.
Neil Faiman
quelle
10

Das Downgrade von Xcode 5.1 auf 5.0.2 funktionierte für mich, ich konnte es kaum erwarten, eine offizielle Cordova 3.5-Version mit dem Fix zu erhalten.

Eine Kopie der vorherigen Version erhalten Sie hier: https://developer.apple.com/downloads/index.action

AlexLopezIT
quelle
3
Dies funktioniert - die einzige Einschränkung besteht darin, dass Sie auf einem iPhone mit iOS 7.1 nicht direkt in XCode testen können. Hier bietet sich der Simulator an. Die kompilierte App kann unter iOS 7.1 ausgeführt werden (bestätigt sowohl auf einem iPhone 5 als auch auf einem 5S). Daher scheint ein Downgrade bis zur Veröffentlichung von Cordova 3.5 die beste Option zu sein.
Ade
Das funktioniert jetzt auch bei mir am besten. Durch Herunterladen von Xcode 5.02 und Kopieren (zuerst XCode_502) in Anwendungen konnte ich es neben Xcode 5.1 ausführen.
EeKay
Ade Ich habe ein Downgrade auf 5.0.2 durchgeführt und meine App auf iPhone 5 und iPad 2 beide mit iOS 7.1 ohne Probleme getestet. Ich habe die App auch ohne Probleme an iTunes Connect gesendet.
AlexLopezIT
8

Sie haben gerade eine neue Version 3.4.1 veröffentlicht , die diese Probleme behebt .

Daher aktualisiere ich eine einzelne Datei, um auf TAG 3.4.1 zu verweisen:

/usr/local/lib/node_modules/cordova/platforms.js

Zeile 24 von:

version: '3.4.0'

zu:

version: '3.4.1'

Dann entfernen Sie den iOS-Ordner in Ihrem Projekt und führen Folgendes aus:

cordova platform add ios

Dadurch wird die neue Vorlage basierend auf 3.4.1 mit allen Patches heruntergeladen.

Fabrizio Giordano
quelle
@JPRichardson Danke, ich werde jetzt
upgraden
1
npm Update Cordova -g, dann Cordova Plattform Update ios
Sepulturkey
5

Folgen Sie den Anweisungen in diesem Video: https://www.youtube.com/watch?v=EIkJAKcz8DE

Fügen Sie einfach arm64 in Ihre Projekte ein und entfernen Sie die gesamte bedingte Architektur von Cordovas Projekt.

Reisende
quelle
Du hast mir gerade soooo viel Kopfschmerzen erspart. Dieses Video hat das Problem behoben, mit dem ich einige Stunden lang zu kämpfen hatte.
Bullyen
Das hat bei mir funktioniert. Danke, dass du das Video gemacht hast - es hat es sehr deutlich gemacht.
John Q
3

Ich konnte meine App in XCode 5.1 erstellen lassen, indem ich zuerst das CordovaLib-Projekt separat von XCode aus erstellte und dann mein Projekt erstellte.

Wayferer
quelle
Das hat auch bei mir funktioniert. Perfekt, da ein Downgrade von Xcode (und das Nicht-Testen auf iOS7.1-Geräten) für mich keine Option ist. Vielen Dank!
Adam Tuttle
2

Sie müssen nur die arm64-Architektur zu jeder Anweisung und Gebäudeeinstellung hinzufügen, ich meine, zu Ihrem aktuellen Projekt und zum Cordova-Projekt.

Zu Ihrem Projekt:

  • Architekturen
  • Gültige Architekturen

auf Cordova:

  • Architekturen
  • debuggen
  • Freisetzung
  • Beliebiges ios SDK

UND DAS WICHTIGSTE

-Gültige Architekturen in Cordova Build-Einstellungen

Diese Konfiguration generiert viele Warnungen, ändert jedoch nur "% d" für "% ld" in allen Zeilen, die in der Warnung angegeben sind.

Felipe Quirós
quelle
1

Nimm das Xcode-Symbol und ziehe es in den Papierkorb!

Gehen Sie hier https://developer.apple.com/downloads/index.action?name=Xcode und laden Sie 5.0.2 herunter und installieren Sie es.

Führen Sie nach der Installation xcode aus und testen Sie den Emulator vom Terminal aus.

Hat für mich gearbeitet, aber nervig!

Kevin S.
quelle