Ich habe gerade meine iPhone 4S-Software auf iOS 7 Beta 2 aktualisiert, als ich gerade den letzten Schliff für eine neue App (Phonegap) gab. Keine gute Idee!
Nachdem dies erledigt war, erkannte Xcode mein iPhone nicht und ich installierte Xcode 5 Beta. Nachdem ich daran herumgebastelt hatte, bekam ich es endlich, um mein Telefon zu erkennen. Das einzige Problem ist jetzt, dass ein Fehler in der verwendeten Architektur vorliegt.
Hier werden die Fehler erzeugt:
ld: warning: ignoring file /Users/-----------/Library/Developer/Xcode/DerivedData/testtest-bmnbmujiosugcmgeiceofgcfmsec/Build/Products/Debug-iphoneos/libCordova.a, file was built for archive which is not the architecture being linked (armv7s): /Users/--------/Library/Developer/Xcode/DerivedData/testtest-bmnbmujiosugcmgeiceofgcfmsec/Build/Products/Debug-iphoneos/libCordova.a
Undefined symbols for architecture armv7s:
"_OBJC_METACLASS_$_CDVCommandDelegateImpl", referenced from:
_OBJC_METACLASS_$_MainCommandDelegate in MainViewController.o
"_CDVLocalNotification", referenced from:
-[AppDelegate application:didReceiveLocalNotification:] in AppDelegate.o
"_OBJC_CLASS_$_CDVCommandDelegateImpl", referenced from:
_OBJC_CLASS_$_MainCommandDelegate in MainViewController.o
"_OBJC_CLASS_$_CDVCommandQueue", referenced from:
_OBJC_CLASS_$_MainCommandQueue in MainViewController.o
"_OBJC_METACLASS_$_CDVViewController", referenced from:
_OBJC_METACLASS_$_MainViewController in MainViewController.o
"_OBJC_METACLASS_$_CDVCommandQueue", referenced from:
_OBJC_METACLASS_$_MainCommandQueue in MainViewController.o
"_CDVPluginHandleOpenURLNotification", referenced from:
-[AppDelegate application:handleOpenURL:] in AppDelegate.o
"_OBJC_CLASS_$_CDVViewController", referenced from:
_OBJC_CLASS_$_MainViewController in MainViewController.o
ld: symbol(s) not found for architecture armv7s
clang: error: linker command failed with exit code 1 (use -v to see invocation)
Irgendwelche Ideen, wie die Architektur geändert werden sollte, damit sie auf meinem Telefon funktioniert? (Es funktioniert gut auf dem Emulator)
Antworten:
Kurze Antwort:
Detaillierte Antwort:
Das Problem ist, dass Ihre statische Bibliothek 'libCordova.a', die Sie in Ihrer Haupt-App verknüpfen, nur für eine Architektur kompiliert wird (armv7, aber nicht armv7s).
Sie haben Xcode wahrscheinlich alle empfohlenen Änderungen für Ihr statisches Bibliotheksprojekt ausführen lassen, ohne zu lesen, was diese Änderungen tatsächlich sind. Ich habe mich noch nie darum gekümmert, mir diesen Info-Dialog (Screenshot unten) genauer anzusehen, als ich auf eine neue Version von Xcode umgestiegen bin - bis jetzt.
Das Problem besteht darin, dass durch das Ausführen dieser Änderungen beim Debuggen eine neue Funktion namens " Nur aktive Architektur erstellen" aktiviert wird erstellen" (der Parameterschlüssel für die Build-Einstellung lautet "ONLY_ACTIVE_ARCH"). Im Prinzip ist dies eine sehr coole Erweiterung von Xcode, da das Setzen auf YES zu schnelleren Bauzeiten führt, da Xcode nur die Architektur des verbundenen Geräts kompiliert, das Sie derzeit oben ausgewählt haben, wenn Sie auf die Schaltfläche Ausführen klicken.
Wenn Sie diesen neuen Parameter jedoch blind in einer statischen Bibliothek akzeptieren, kann dieser Fehler auftreten. Der Fehler tritt auf, wenn Sie die Debug-Version einer statischen Bibliothek erstellt haben, während Sie ein armv7-Gerät angeschlossen haben, und wenn Sie dann Ihre Hauptanwendung debuggen, haben Sie ein armv7s-Gerät angeschlossen (oder umgekehrt). Anschließend erhalten Sie den obigen Fehler (oder einen ähnlichen).
Daher empfehle ich, den Wert auf Projektebene für Build Active Architecture Only vollständig aus allen Projekterstellungseinstellungen Ihrer statischen Bibliotheken zu entfernen . Denn wenn Sie sich die iOS-Standardeinstellungen ansehen, ist dies NEIN. Natürlich können Sie die Einstellung auch auf 'NEIN' überschreiben, um sicherzustellen, dass die Einstellung auch dann korrekt ist, wenn sich der Standardwert in Zukunft ändert (vgl. 1. Screenshot).
quelle
Wenn Ihr Projekt mit Cordova 2.x und Xcode 4.x erstellt wurde und Sie den vom OP erwähnten Fehler erhalten, hat diese Lösung für mich funktioniert. (Ich hatte den Fehler mit Cordova 2.5 und Xcode 5).
https://issues.apache.org/jira/browse/CB-3768
Gehen Sie zu Ihrem Cordova-Projekt
Stammordner -> CordovaLib -> Klicken Sie mit der rechten Maustaste auf CordovaLib.xcodeproj -> Paketinhalt anzeigen -> Öffnen Sie project.pbxproj
Ersetzen Sie alle Vorkommen von (ich hatte 4)
Mit diesem
Jetzt wird Ihr Projekt gut gebaut!
quelle
Ich habe
armv7s
ausvalid architectures
Abschnitt entfernt und es hat bei mir funktioniert.Build-Einstellungen -> Architekturen -> Gültige Architekturen
quelle
libCordova.a
wird nur mit 32-Bit-Anweisungen ausgeführt. Die Hauptbestandteile unserer App sollten ohnehin JavaScript sein, das in einer nativen UIWebView ausgeführt wird. Ich denke nicht, dass dies wirklich wichtig ist oder erhebliche Auswirkungen auf die Leistung haben würde.Ich verwende Xcode 5, also iOS SDK 7. Die Lösung, die für mich funktioniert hat, bestand einfach darin, die arm64-Architektur zu entfernen.
Wählen Sie das Projektziel (NICHT CordovaLib.xcodeproj) aus und entfernen Sie in den Build-Einstellungen> Gültige Architekturen arm64, falls es in der Liste vorhanden ist. Hier ist meine, nachdem ich die arm64-Architektur entfernt habe.
quelle
Weil meine lib.a nur für armv7 ist
Was ich getan habe war
Nur aktive Architektur = ja
es wurde gut gebaut und archiviert
ich hoffe es hilft
quelle
njtman hatte eine richtige Antwort. Ich habe nicht den Repräsentanten, um einen Kommentar abzugeben, daher füge ich weitere Details hinzu.
Sie benötigen ein iOS 7 SDK, um die Standardarchitekturen (armv7, armv7s) verwenden zu können.
Mein Projekt war standardmäßig (armv7), ohne armv7s.
Um dies zu beheben, öffnen Sie CordovaLib.xcodeproj unter Build-Einstellungen (eines der Menüs in der oberen Reihe, zentrierte Ausrichtung). Fügen Sie unter Architekturen, Architekturen, Debuggen und Freigeben iOS 7.0 mit Standardarchitekturen hinzu.
quelle
In den Build-Einstellungen ...
quelle