Ich habe ein Framework zum Senden von E-Mails aus einer Anwendung im Hintergrund importiert, z. B. SKPSMTPMessage
Framework. Kann jemand vorschlagen, warum unten Fehler angezeigt wird
Undefined symbols for architecture i386:
"_OBJC_CLASS_$_SKPSMTPMessage", referenced from:
objc-class-ref in ConfirmController.o
"_kSKPSMTPPartContentTransferEncodingKey", referenced from:
-[ConfirmController sendEmail] in ConfirmController.o
"_kSKPSMTPPartMessageKey", referenced from:
-[ConfirmController sendEmail] in ConfirmController.o
"_kSKPSMTPPartContentTypeKey", referenced from:
-[ConfirmController sendEmail] in ConfirmController.o
ld: symbol(s) not found for architecture i386
collect2: ld returned 1 exit status
Quelle, aus der der Rahmen stammt: -
Sperren der Felder in MFMailComposeViewController
Update :
Antwort: Ziehen Sie den Ordner einfach per Drag & Drop über das Projekt und klicken Sie auf Kopieren. Das ist das Kontrollkästchen Projekt und Ziel auch.
Antworten:
Sie können diese Art von Fehler erhalten, wenn die .m-Datei Ihrer Klasse nicht im Schritt "Quellen kompilieren" auf der Registerkarte "Phasen erstellen" Ihres Ziels aufgeführt ist. Normalerweise erledigt Xcode dies für Sie, aber manchmal verliert es den Plot und Sie müssen die .m-Datei manuell hinzufügen.
Um dies zu tun:
TargetSettings -> Build-Phasen -> Compile Sources -> Fügen Sie Ihre .m-Klasse hinzu -> Build and Run
quelle
-lLibraryName_$(PLATFORM_NAME)d
Zum Debuggen hinzufügen und-lLibraryName_$(PLATFORM_NAME)
für ReleaseFür mich stellte sich heraus, dass es an Frameworks mangelte. Sobald ich sie hinzugefügt habe, hat es funktioniert.
quelle
Überprüfen Sie die Eigenschaften Nur gültige Architekturen und aktive Architektur erstellen.
quelle
Wenn Sie Cocoapods verwenden, stellen Sie sicher, dass die Build-Einstellungen Ihres Ziels $ (geerbt) im Abschnitt " Andere Linker-Flags " enthalten
quelle
Ist Ihr Framework für armv (x) kompiliert? Es sieht für mich so aus, als wäre es für i386 kompiliert, welcher Code auf einem iOS-Gerät nicht ausgeführt werden kann. Oder es wurde für armv (x) kompiliert und Sie versuchen, es auf dem Simulator auszuführen, bei dem es sich um i386-Code handelt. Stellen Sie mithilfe der oben angezeigten Build-Einstellungen von Akshay sicher, dass Ihr Framework für den Chip, auf dem Sie es ausführen möchten, korrekt kompiliert ist.
quelle
Wenn Sie ein anderes Projekt in xcode importieren und sowohl aktuelles als auch importiertes Projekt dieselben Dateien in der Compiler-Quelle haben, entfernen Sie einfach dieselbe Datei im aktuellen Projekt in den Einstellungen "Erstellungsphase". Es hat bei mir funktioniert.
quelle
Ja, das hängt mit dem zusammen, was Allen gesagt hat. Suchen Sie im Abschnitt Dienstprogramme der Quelldatei nach TargetMembership. Es gibt ein Kontrollkästchen, das diese Datei einem Projekt zuordnet. Das Überprüfen dieses Problems löste dieses Problem auch für mich.
quelle
Möglicherweise fehlt Ihnen auch die Verknüpfung mit einer Binärbibliothek. Aktivieren Sie in Ihren Tarifen die Erstellungsphasen, fügen Sie die erforderlichen Bibliotheken hinzu und klicken Sie dann auf Produkt> Produkt bereinigen> Erstellen
Das muss auch funktionieren!
quelle
Ich hatte dieses Problem, als ich dasselbe Projekt zweimal öffnete, nur ein Projekt war das Original und das andere wurde von einer Git-URL geklont.
'Produkt'> 'Reinigen' hat das Problem gelöst.
quelle
Ich bin auch auf dieses Problem gestoßen und habe es behoben, indem ich überprüft habe, ob sowohl die Kompilierungsquelle als auch die Link-Binärdatei mit der Bibliothek alle erforderlichen Dateien / Bibliotheken / Frameworks enthalten.
quelle
Als ich auf dasselbe Problem stieß:
Es stellte sich heraus, dass ich nur vergessen habe, Framework hinzuzufügen. Es war QuartzCore.framework, um genau zu sein.
quelle
versuchen Sie es zuletzt:
Also habe ich alle Vorschläge auf dieser Seite ausprobiert. Keiner hat funktioniert. Mein Problem begann damit, dass ich die Schritte in diesem Tutorial befolgte, in denen das Verknüpfen statischer Bibliotheken erläutert wird. Bei meinem Beispielprojekt funktionierten die Anweisungen einwandfrei. Bei meinem eigentlichen Projekt wurde jedoch der obige Fehler angezeigt.
Also habe ich jeden Schritt des genannten Tutorials durchlaufen und nach jedem Schritt erstellt. Die fehlerhafte Zeile stellte sich als die folgende heraus: Hinzufügen von -all_load zum Erstellen von Einstellungen-> anderen Linker-Flags
Es stellte sich heraus, dass dieses Flag einst empfohlen wurde, um Kategorien mit statischen Bibliotheken zu verknüpfen. Dann stellte sich heraus, dass dieses Flag nicht mehr erforderlich war. Xcode 4.2+. (Gleiches gilt für das Flag -force_load empfohlen in anderen Beiträgen ) ..
quelle
Als ich auf dasselbe Problem stieß, vergaß ich, "kompilierte Version der Bibliothek (mit der Erweiterung .a)" hinzuzufügen. Normalerweise fügen wir die Bibliothek des importierten Projekts in Zielabhängigkeit in Build-Phasen hinzu, vergessen jedoch, "Kompilierte Bibliothek" in Link Binary mit Bibliotheken in Build-Phasen hinzuzufügen.
quelle
Hinzufügen, was für mich funktioniert hat, falls andere das gleiche Problem haben und hier landen. Ich hatte ein älteres Projekt, bei dem die Einstellung CLANG_ENABLE_MODULES auf Nein gesetzt war. Nach stundenlanger Frustration verglich ich ein funktionierendes Projekt und stellte fest, dass ich unter meinen LLVM-Build-Einstellungen die Option Module aktivieren auf Nein gesetzt hatte. Das Setzen auf Ja hat mein Problem gelöst und die App funktioniert einwandfrei.
Projekteinstellungen -> Build-Einstellungen -> Suchen Sie nach 'Module' und aktualisieren Sie Enable Modules (C und Objective-C) auf YES.
quelle
Ich habe das "-all_load -lstdc ++" nicht zu anderen Linker-Flags in der Build-Einstellung hinzugefügt und konnte die Sim ohne Fehler starten, aber ich habe beim Start keine MonkeyTalk-Protokollausgabe erhalten und das vorherige Skript, das ich geschrieben habe, um eine Verbindung herzustellen Jetzt wurde die Wiedergabetaste als deaktiviert angezeigt. Die Ausgabe der MT-IDE wurde als "Verbindung auf iOS-Simulator eingestellt" angezeigt, konnte jedoch die Schaltfläche "Ausführen / Abspielen" nicht auswählen.
Das ursprüngliche Projekt hatte "ObjC -all_load" in den anderen Linker-Flags und als ich das "-all_load -lstdc ++" anhängte, bekam ich die Fehlermeldung, um die es in diesem Beitrag geht. Als ich das "ObjC -all_load" entfernte und nur das "-all_load -lstdc ++" hinzufügte, baute das Projekt, aber immer noch kein Monkey Talk Logout als Bestätigung in die Konsole
quelle
Möglicherweise verwenden Sie eine Bibliothek, die nur für ECHTE Hardware kompiliert wurde. Wenn Sie beispielsweise eine Bluetooth-Bibliothek wie den Zephyr HxM Smart verwenden, wird diese wahrscheinlich nicht auf dem Simulator kompiliert und kann nur auf realen Geräten ausgeführt werden.
quelle
Es trat ein ähnliches Problem mit IOS 6 auf. Es konnte behoben werden, indem storekit.framework zum Abschnitt "Binär mit Bibliotheken verknüpfen" im Abschnitt "Erstellungsphasen" hinzugefügt wurde.
Jetzt funktioniert es wie ein Zauber.
quelle
Ich habe das gleiche Problem mit 7 Fehlern, wenn ich PSTCollectionviewcontroller hinzufüge. Die eine Lösung für dieses Problem besteht darin, Ihren "xcode -> Build-Phasen -> Quellen kompilieren" zu überprüfen. Fügen Sie hier alle ".m" -Dateien hinzu. Ich hoffe, Sie dies Post wird Benutzern in Zukunft helfen.
quelle
Bei mir habe ich Cocoapods für ein Augmented Reality-Projekt verwendet. Als ich herausfand, dass beim Implementieren von Cocoapods und Öffnen des Arbeitsbereichs Ihres Projekts das Xcode-Projektziel und die Pods, die Sie in derselben Datei implementiert haben, angezeigt werden. Was geschah, war, dass einige der .m von beiden verwendet wurden. Nachdem ich die duplizierten für das Xcode-Ziel unter Build Phases >> Compile Sources entfernt hatte, funktionierte es einwandfrei.
quelle
Ich habe diese SEHR irreführende Meldung beim Versuch, auf die neue Google Analytics-Bibliothek zu aktualisieren, entdeckt.
In meinem Fall bestand das Problem darin, ZWEI KONFLIKTIERENDE KOPIEN der Bibliothek zu haben. Sie befanden sich in verschiedenen Ordnern, aber beide wurden in den Build-Pfaden der Bibliothek meiner App (unter Build-Einstellungen) aufgeführt.
Das Verschieben aller veralteten Bibliotheksdateien aus dem Ordner hat den Trick ausgeführt und die mysteriösen Fehlermeldungen verschwinden lassen.
quelle
Überprüfen Sie, ob alle Ihre Bundle-Ressourcen in der Erstellungsphase kopiert wurden.
quelle
Produkt => Sauber hat den Trick für mich gemacht
quelle
Die Änderung der aktiven Architektur hat bei mir funktioniert. Eine meiner Bibliotheken verwendete i386.
In Build - Einstellungen >> Änderung Bauen Aktiv Architektur nur auf Ja von NO
Es hat bei mir funktioniert. Hoffe, es hilft auch anderen.
quelle
Die Antwort ist, dass Sie den Ordner einfach per Drag & Drop über das Projekt ziehen und auf Kopieren klicken.
quelle
Ich habe diese Meldung erhalten, als ich einige Quelldateien aus einem anderen Projekt gezogen und dort abgelegt habe. Als ich sie löschte und dann über "Dateien hinzufügen ..." aus dem Menü "Datei" hinzufügte, wurde sie ohne Fehler erstellt.
quelle
Ich hatte einen ähnlichen Fehler mit NSManagedObject und das lag daran, dass ich Core Data verwendete, aber das Core Data-Framework in Build Phases - Link Binary With Libraries fehlte, wie einige andere geantwortet haben
quelle
Diese Art von Fehler kann auftreten, wenn Sie Ihrem Projekt Bibliotheken von Drittanbietern hinzufügen, für die native Frameworks erforderlich sind, die nicht in Ihrem Projekt enthalten sind.
Sie müssen in den .h- und .m-Dateien Ihrer neu hinzugefügten Bibliothek nachsehen, welche Frameworks erforderlich sind, und diese Frameworks dann in Ihr Projekt aufnehmen (Ziel> Phasen erstellen> Binär mit Bibliotheken verknüpfen).
quelle
Entfernen Sie das Framework, bereinigen Sie das Projekt, fügen Sie es wieder hinzu und kompilieren Sie es. Oder Entfernen Sie die Klasse, die von xcode in der Kompilierungsquelle hinzugefügt wurde, bereinigen Sie das Projekt, fügen Sie es wieder hinzu und erstellen Sie es.
quelle
Denken Sie daran, dass Sie in jedem Ansichts-Controller, der die bereits gelöschten Dateien aufruft, ein Makro einfügen können.
Die App zeigt keine Fehler an, bis Sie Ihre App erstellen. Sie wirft den Fehler in der Kompilierungsphase in .o-Dateien.
Denken Sie daran, alle MACRO zu löschen, die auf bereits gelöschte Dateien zugreifen.
Vielen Dank :)
quelle
Zusätzlich zu dem, was Allan tat und fehlende Klassen hinzufügte, folgte ich der Lösung von @ emdog4 und fügte die Kerndatenbibliothek hinzu, indem ich zu Phasen in Xcode erstellen und unter "Binär mit Bibliotheken verknüpfen" auf das + klickte und das "CoreData.framework" auswählte. . Dies hat meinen Fehler behoben
quelle