it-swarm.com.de

Undefinierte Symbole für die Architektur i386: _OBJC_CLASS _ $ _ SKPSMTPMessage ", bezogen auf: Fehler

Ich habe ein Framework zum Versenden von E-Mails aus einer Anwendung im Hintergrund importiert, d. H. SKPSMTPMessage Framework. Kann jemand vorschlagen, warum unten Fehler angezeigt werden

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 entnommen wird: -

Sperren der Felder in MFMailComposeViewController

Update:

Antwort: Ziehen Sie einfach den Ordner über das Projekt und klicken Sie auf Kopieren. Das bedeutet, dass es auch das Kontrollkästchen Projekt und Ziel markiert.

227
Mann

Sie können diese Art von Fehler erhalten, wenn die .m-Datei Ihrer Klasse nicht unter dem Schritt "Compile Sources" der Registerkarte "Build Phases" 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 Phases -> Compile Sources -> füge deine .m-Klasse hinzu -> Build and Run

565
Allen Pike

für mich stellte sich heraus, dass das thema fehlende rahmenbedingungen war. Sobald ich sie hinzugefügt habe, hat es funktioniert. 

37
verma

Überprüfen Sie die Eigenschaften Nur gültige Architekturen und aktive Architektur erstellen.

enter image description here

28
Akshay

wenn Sie Cocoapods verwenden, stellen Sie sicher, dass die Build-Einstellungen Ihres Ziels $ (geerbt) im Abschnitt other linker flags enthalten

 enter image description here

17
Tim

Ist dein Framework für armv (x) kompiliert? Es sieht für mich so aus, als wäre es für i386 kompiliert. Der Code läuft nicht auf einem iOS-Gerät. Ansonsten wird es für armv (x) kompiliert und Sie versuchen, es auf dem Simulator auszuführen (i386-Code). Stellen Sie anhand der oben angezeigten Build-Einstellungen von Akshay sicher, dass Ihr Framework für den Chip, auf dem Sie es ausführen möchten, richtig kompiliert ist.

10
Owen Hartnett

Wenn Sie ein anderes Projekt in xcode importieren und wenn sowohl das aktuelle als auch das importierte Projekt die gleichen Dateien in der Compiler-Quelle haben, entfernen Sie einfach die gleiche Datei im aktuellen Projekt in den Einstellungen der Erstellungsphase.

7
star18bit

Ja, das hängt mit dem zusammen, was Allen gesagt hat ... Suchen Sie nach TargetMembership in Utilities-Abschnitt der Quelldatei. Es gibt ein Kontrollkästchen, mit dem diese Datei einem Projekt zugeordnet wird. Durch das Überprüfen dieses Problems wurde dieses Problem auch für mich gelöst. 

4
yeahdixon

versuchen Sie es noch einmal:

also habe ich alle Vorschläge auf dieser Seite ausprobiert. Keiner funktionierte. Der Anfang meines Problems bestand darin, die Schritte in this Tutorial zu befolgen, in dem die Verknüpfung statischer Bibliotheken beschrieben wird. Bei meinem Beispielprojekt funktionierten die Anweisungen gut. Aber bei meinem aktuellen Projekt habe ich den oben genannten Fehler erhalten. 

Also habe ich jeden Schritt des besagten tutorial durchlaufen und nach jedem Schritt gebaut. die beleidigende Linie erwies sich als die folgende: Hinzufügen von -all_load zum Erstellen von Einstellungen-> anderen Linker-Flags

es stellte sich heraus, dass dieses Flag einmal empfohlen war, um Kategorien mit statischen Bibliotheken zu verknüpfen. Dann aber stellte sich heraus , dass dieses Flag nicht mehr erforderlich war. Dasselbe gilt für das Flag -force_load .., das auch in anderen posts ) empfohlen wurde. 

4
abbood

Wenn ich das gleiche Problem wie dieses hatte:

Undefinierte Symbole für die Architektur i386:

_OBJC_CLASS _ $ _ SKPSMTPMessage, referenziert von: objc-class-ref in ConfirmController.o

Es stellte sich heraus, dass ich einfach vergessen habe, Rahmen hinzuzufügen. Es war QuartzCore.framework, um genau zu sein.

4
Mitch Viray

Es kann auch sein, dass Sie keine Verknüpfung mit einer binären Bibliothek herstellen, aktivieren Sie die Option Phasen in den Targes hinzufügen, fügen Sie die erforderlichen Bibliotheken hinzu und fügen Sie dann .__

Das muss auch funktionieren!

4
Gabriel Ramirez

Ich traf dieses Problem auch und behebte es, indem ich überprüfte, ob sowohl Compile-Quelle als auch Link-Binär mit Bibliothek alle erforderlichen Dateien/Bibliotheken/Frameworks enthielten.

enter image description here

4
yujohnnyzhou

Ich hatte dieses Problem, als ich dasselbe Projekt zweimal öffnete. Nur ein Projekt war das Original und das andere wurde aus einer Git-URL geklont.

'Produkt'> 'Reinigen' hat das Problem gelöst.

4
kraftydevil

Hinzufügen, was für mich funktioniert hat, falls andere das gleiche Problem haben und hier enden. Ich hatte ein älteres Projekt, bei dem die Einstellung CLANG_ENABLE_MODULES auf "Nein" gesetzt war. Nach stundenlanger Frustration verglich ich mich mit einem funktionierenden Projekt und stellte fest, dass "Enable Modules Set" unter meinen LLVM-Buildeinstellungen auf "Nein" gesetzt war. Wenn Sie diese Option auf "Ja" setzen, wurde mein Problem gelöst und die App wird gut erstellt.

Projekteinstellungen -> Build-Einstellungen -> Suche nach 'Modules' und Update Enable Module (C und Objective-C) auf YES.

3
jlichti

Als ich auf dasselbe Problem stieß, habe ich vergessen, "kompilierte Version der Bibliothek (mit der Erweiterung .a)" hinzuzufügen. Normalerweise fügen wir die Bibliothek des importierten Projekts in "Zielabhängigkeit" in "Erstellungsphasen" hinzu, vergessen jedoch, "kompilierte Bibliothek" in "Verknüpfungsbinär mit Bibliotheken" in "Erstellungsphasen" hinzuzufügen.

3
Balamurugan

Ich habe "-all_load -lstdc ++" nicht zu Other Linker Flags in der Build-Einstellung hinzugefügt, und ich konnte die Sim ohne Fehler starten, aber ich habe beim Starten keine MonkeyTalk-Protokollausgabe erhalten und das vorherige Skript, das ich zum Verbinden erstellt habe Der Play-Button wurde jetzt als deaktiviert angezeigt. Die Ausgabe von MT IDE wurde als "Verbindung für iOS-Simulator eingestellt" angezeigt, konnte jedoch nicht die Start/Wiedergabe-Schaltfläche auswählen.

Das ursprüngliche Projekt hatte "ObjC -all_load" in den Other 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 ein, aber immer noch kein Affengespräch wurde als Bestätigung in die Konsole gestellt

2
JJacquet

Möglicherweise verwenden Sie eine Bibliothek, die nur für REAL-Hardware kompiliert wird. Wenn Sie beispielsweise eine Bluetooth-Bibliothek wie den Zephyr HxM Smart verwenden, wird sie wahrscheinlich nicht auf dem Simulator kompiliert und ist nur für die Ausführung auf echten Geräten gedacht.

2
DiscDev

ich habe das gleiche Problem mit 7 Fehlern, wenn ich PSTCollectionviewcontroller hinzufüge. Die einzige Lösung für dieses Problem ist das Überprüfen der "Xcode -> Build-Phasen -> Compile-Quellen" post wird den Nutzern in Zukunft helfen.

1
Naveen

Produkt => Clean hat den Trick für mich gemacht

1
YogevSitton

Mit IOS 6 ..__ gab es ein ähnliches Problem. Er konnte das Problem lösen, indem er storekit.framework zu "Link Binary with Libraries" im Abschnitt "Build phase" hinzufügte.

Jetzt funktioniert es wie ein Zauber. 

1
Troy

Stellen Sie sicher, dass alle Ihre Bundle-Ressourcen in der Erstellungsphase kopiert werden.

1
Arpan Dixit

Ich habe diese sehr irreführende Nachricht entdeckt, als ich versuchte, auf die neue Google Analytics-Bibliothek zu aktualisieren.

In meinem Fall bestand das Problem darin, ZWEI KONFLIKTEKOPIEN der Bibliothek zu haben. Sie befanden sich in unterschiedlichen Ordnern, aber beide wurden in den Bibliothekserstellungspfaden meiner App (unter Build-Einstellungen) aufgelistet.

Das Verschieben aller veralteten Bibliotheksdateien aus dem Ordner hat den Trick erledigt und die mysteriösen Fehlermeldungen verschwanden.

1
bkbeachlabs

Bei mir habe ich Cocoapods für ein Augmented Reality-Projekt verwendet. Ich habe festgestellt, dass Sie bei der Implementierung von Cocoapods und dem Öffnen des Arbeitsbereichs Ihres Projekts das Xcode-Projektziel und die Pods, die Sie in derselben Datei implementiert haben, erhalten. Was geschah, war, dass einige der .m von beiden genutzt wurden. Nachdem ich die duplizierten für das Xcode-Ziel unter Build Phases >> Compile Sources entfernt hatte, funktionierte es einwandfrei.

1
Joao Paulo

Die Änderung der aktiven Architektur hat für mich funktioniert. Eine meiner Bibliotheken verwendete i386.

In Build-Einstellungen >> ändern Nur aktive Architektur erstellen auf Ja von NEIN

Es hat bei mir funktioniert. Hoffe, es hilft auch anderen.

enter image description here

1
Satish Mavani

Sie können diese Art von Fehler erhalten, 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 einen Blick in die .h- und .m-Dateien Ihrer neu hinzugefügten Bibliothek werfen, um zu sehen, welche Frameworks erforderlich sind, und diese Frameworks dann in Ihr Projekt aufnehmen (Ziel> Phasen erstellen> Binär mit Bibliotheken verknüpfen).

0
Cosmin

In meinem Fall war es etwas anders

Im Prefix-Header fehlte eine Definition

#ifdef DEBUG
#   define TWDLog(fmt, ...) NSLog((@"\n%s\n" fmt), __PRETTY_FUNCTION__, ##__VA_ARGS__)
#else
#   define TWDLog(...)
#endif

Suchen Sie also nach PROJECTNAME-Prefix.pch und prüfen Sie, ob in beiden Projekten etwas fehlt

0
Shereef Marzouk

Ich habe diese Meldung erhalten, als ich einige Quelldateien aus einem anderen Projekt gezogen und abgelegt habe. Wenn ich sie gelöscht und dann über "Dateien hinzufügen ..." aus dem Menü "Datei" hinzugefügt habe, wurde sie ohne Fehler erstellt.

0
RyeMAC3

Ich hatte einen ähnlichen Fehler mit NSManagedObject und der Grund dafür war, dass ich Core Data verwendete, aber das Core Data-Framework in Build Phases - Link Binary With Libraries fehlte

0
Sam

Entfernen Sie das Framework, bereinigen Sie das Projekt, fügen Sie es zurück und kompilieren Sie es. Oder Entfernen Sie die von xcode in der Compile-Quelle hinzugefügte Klasse.

0
Saif

Ich habe das gleiche Problem. Und ich füge 2 Framework hinzu, das ich zum Erstellen von Phasen brauche . Hoffe diese Hilfe! symbol(s) not found for architecture i386

0
777Q

Die Antwort ist, dass Sie den Ordner einfach per Drag & Drop über das Projekt ziehen und auf Kopieren klicken. 

0
Mann

Denken Sie daran, dass Sie ein Makro in einen beliebigen View-Controller einfügen können, der die bereits gelöschten Dateien aufruft.

Die App zeigt keine Fehler an, bis Sie Ihre App erstellt haben. Der Fehler wird in der Kompilierungsphase in .o-Dateien ausgegeben.

Denken Sie daran, alle MACROs, die angerufen werden, in bereits gelöschten Dateien zu löschen.

Vielen Dank :) 

0
Abo3atef

Zusätzlich zu dem, was Allan tat und fehlende Klassen hinzufügte, folgte ich der Lösung von @ emdog4 und fügte die Core Data-Bibliothek hinzu, indem ich zu Build Phases in Xcode und unter 'Link Binary with Libraries' ging. . Dies hat meinen Fehler behoben

0
malkoty

In meinem Fall hat das Pod-Update das Projekt nicht irgendwie aktualisiert. Also musste ich es alleine machen und den MBProgressHud zu OtherLinkerFlags hinzufügen.

enter image description here

0
Naloiko Eugene

Keine der obigen Antworten löste mein Problem. Die gleiche Fehlermeldung erhielt ich, als ich Xcode auf 8 aufgerüstet hatte, ging ich zu Target -> Build Phases -> The Link Binary With Libraries und lösche das Framework, das das Problem verursacht hat und fügte es erneut hinzu und alle Fehler gingen weg. Hoffen Sie, dass dies anderen helfen wird . enter image description here

0
Aviva