Zaimportowałem framework do wysyłania wiadomości e-mail z aplikacji w tle, tj SKPSMTPMessage
. Framework. Czy ktoś może zasugerować, dlaczego wyświetlany jest błąd poniżej
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
Źródło, z którego wzięto ramy:
Blokowanie pól w MFMailComposeViewController
Aktualizacja :
Odpowiedź: Po prostu przeciągnij i upuść folder nad projektem i kliknij kopiuj. To oznacza, że pole wyboru projektu i pole wyboru celu również.
Odpowiedzi:
Ten typ błędu można uzyskać, jeśli pliku .m klasy nie ma na liście w kroku „Kompiluj źródła” karty „Fazy kompilacji” elementu docelowego. Zwykle Xcode robi to za Ciebie, ale czasami traci wątek i musisz ręcznie dodać plik .m.
Aby to zrobić:
TargetSettings -> Fazy kompilacji -> Kompiluj źródła -> dodaj swoją klasę .m -> Kompiluj i uruchamiaj
źródło
-lLibraryName_$(PLATFORM_NAME)d
do debugowania i dodaj-lLibraryName_$(PLATFORM_NAME)
do wydaniadla mnie problemem okazały się brakujące ramy. Kiedy je dodałem, zadziałało.
źródło
Sprawdź poprawne architektury i buduj tylko właściwości architektury aktywnej.
źródło
jeśli używasz cocoapods, upewnij się, że ustawienia kompilacji twojego celu zawierają $ (odziedziczony) w innej sekcji flag linkera
źródło
Czy Twój framework jest skompilowany dla armv (x)? Wygląda mi na to, że jest skompilowany dla i386, którego kod nie będzie działał na urządzeniu z iOS. Albo jest skompilowany dla armv (x) i próbujesz uruchomić go na symulatorze, którym jest kod i386. Upewnij się, używając ustawień kompilacji Akshay wyświetlonych powyżej, że Twoja platforma jest poprawnie skompilowana dla układu, na którym chcesz ją uruchomić.
źródło
Jeśli importujesz jakiś inny projekt do xcode i jeśli zarówno bieżący, jak i importowany projekt mają te same pliki w źródle kompilatora, po prostu usuń ten sam plik w bieżącym projekcie w ustawieniach „Fazy kompilacji”.
źródło
Tak, jest to związane z tym, co powiedział Allen ... poszukaj TargetMembership w sekcji Narzędzia pliku źródłowego. istnieje pole wyboru, które wiąże ten plik z projektem. Sprawdzanie tego rozwiązało również ten problem dla mnie.
źródło
Może również brakować linku do biblioteki binarnej, zaznacz Fazy kompilacji w swoich celach, dodaj wymagane biblioteki, a następnie Produkt> Czysty produkt> Kompiluj
To też musi działać!
źródło
Miałem ten problem, kiedy dwukrotnie otworzyłem ten sam projekt, tylko jeden projekt był oryginalny, a drugi został sklonowany z adresu URL git.
„Produkt”> „Czysty” rozwiązał problem.
źródło
Znalazłem również ten problem i naprawiłem go, sprawdzając, czy zarówno kompilacja źródła, jak i linku binarnego z biblioteką zawiera wszystkie wymagane pliki / biblioteki / ramy.
źródło
Kiedy napotkałem ten sam problem jak ten:
Okazało się, że po prostu zapomniałem dodać framework. Dokładnie to QuartzCore.framework.
źródło
spróbuj tego ostatniego:
więc wypróbowałem wszystkie sugestie na tej stronie ... żadne nie działało .. Mój problem zaczął się od wykonania kroków z tego samouczka, który uczy, jak łączyć biblioteki statyczne. W moim przykładowym projekcie instrukcje działały dobrze .. ale w moim rzeczywistym projekcie zacząłem wyświetlać powyższy błąd.
Więc to, co zrobiłem, to przejście przez każdy krok wspomnianego samouczka i zbudowanie po każdym kroku .. linia obrażająca okazała się taka: dodanie -all_load, aby zbudować ustawienia-> inne flagi linkera
okazuje się, że ta flaga była kiedyś polecana do łączenia kategorii z bibliotekami statycznymi .. ale potem okazało się, że ta flaga nie była już potrzebna Xcode 4.2+ .. (to samo dotyczy flagi -force_load .. która również była zalecane w innych postach ) ..
źródło
Kiedy napotkałem ten sam problem, zapomniałem dodać „skompilowaną wersję biblioteki (z rozszerzeniem .a)”. Zwykle dodajemy bibliotekę importowanego projektu w docelowej zależności w fazach kompilacji, ale zapominamy dodać „skompilowaną bibliotekę” w Link Binary z bibliotekami w fazach kompilacji.
źródło
Dodanie tego, co zadziałało dla mnie na wypadek, gdyby inni mieli ten sam problem i skończyli tutaj. Miałem starszy projekt, w którym ustawienie CLANG_ENABLE_MODULES było ustawione na Nie. Po godzinach frustracji porównałem go z działającym projektem i stwierdziłem, że miałem ustawienie Włącz moduły na „no” w ustawieniach kompilacji LLVM. Ustawienie tego na Tak rozwiązało mój problem, a aplikacja działa poprawnie.
Ustawienia projektu -> Ustawienia kompilacji -> wyszukaj „Moduły” i zaktualizuj Włącz moduły (C i Cel-C) na TAK.
źródło
Nie dodałem „-all_load -lstdc ++” do innych flag Linkera w ustawieniach kompilacji i mogłem uruchomić sim bez błędu, ale nie dostałem danych wyjściowych dziennika MonkeyTalk po uruchomieniu i poprzedniego skryptu, który napisałem, który używał do łączenia teraz pokazał przycisk odtwarzania jako wyłączony. Dane wyjściowe MT IDE pokazały się jako „Połączenie ustawione na iOS Simulator”, ale nie można wybrać przycisku uruchamiania / odtwarzania.
Oryginalny projekt zawierał „ObjC -all_load” w innych flagach konsolidatora, a kiedy dołączyłem „-all_load -lstdc ++” wraz z nim, dostałem komunikat o błędzie, o którym jest ten post. Kiedy usunąłem „ObjC -all_load” i dodałem tylko „-all_load -lstdc ++” projekt skompilowany, ale nadal nie ma wylogowania małpiego jako potwierdzenia w konsoli
źródło
Możliwe, że używasz biblioteki skompilowanej tylko dla PRAWDZIWEGO sprzętu. Na przykład, jeśli korzystasz z biblioteki Bluetooth, takiej jak Zephyr HxM Smart, prawdopodobnie nie skompiluje się ona na symulatorze i jest przeznaczona tylko do działania na prawdziwych urządzeniach.
źródło
Wystąpił podobny problem z IOS 6. Był w stanie go rozwiązać, dodając storekit.framework do „Link Binary with Libraries” w sekcji faz kompilacji.
Teraz działa jak urok.
źródło
mam ten sam problem z 7 błędami, gdy dodam PSTCollectionviewcontroller. Jednym rozwiązaniem tego problemu jest sprawdzenie twojego „xcode -> etapy kompilacji -> źródła kompilacji” tutaj dodaj wszystkie swoje pliki .m. Mam nadzieję, że to post pomoże użytkownikom w przyszłości.
źródło
W moim przypadku użyłem Cocoapods do projektu Augmented Reality i dowiedziałem się, że kiedy wdrażasz cocoapody i otwierasz przestrzeń roboczą swojego projektu, otrzymujesz cel Xcode Project i te kapsuły zaimplementowane w tym samym pliku. Działało się tak, że niektóre z nich były używane przez oba. Po usunięciu zduplikowanych celów Xcode w Fazach kompilacji >> Źródła kompilacji wszystko działało dobrze.
źródło
Odkryłem ten WYZWALA wprowadzający w błąd komunikat podczas próby uaktualnienia do nowej biblioteki Google Analytics.
W moim przypadku problemem były DWA KOPIUJĄCE KOPIE biblioteki. Były w różnych folderach, ale oba były wymienione w ścieżkach kompilacji biblioteki mojej aplikacji (w Ustawieniach kompilacji).
Przeniesienie wszystkich przestarzałych plików biblioteki z folderu zakończyło się załatwieniem sprawy i sprawiło, że tajemnicze komunikaty o błędach zniknęły.
źródło
Sprawdź, czy wszystkie zasoby pakietu są kopiowane w fazie kompilacji.
źródło
Produkt => Clean załatwił sprawę
źródło
Zmiana w aktywnej architekturze działała dla mnie, jedna z moich bibliotek używała i386.
W ustawieniach kompilacji >> zmień Kompiluj aktywną architekturę tylko na Tak z NIE
To zadziałało dla mnie. Mam nadzieję, że pomaga to również innym.
źródło
Odpowiedź brzmi: przeciągnij i upuść folder nad projektem i kliknij kopiuj.
źródło
Otrzymałem ten komunikat, gdy przeciągnąłem i upuściłem pliki źródłowe z innego projektu. Kiedy je usunąłem, a następnie dodałem za pomocą „Dodaj pliki ...” z menu Plik, skompilowałem je bez błędu.
źródło
Miałem podobny błąd z NSManagedObject i to dlatego, że korzystałem z Core Data, ale brakowało mi Framework Core Data w fazach kompilacji - Link Binary With Libraries, jak niektórzy odpowiedzieli
źródło
Ten typ błędu można uzyskać, jeśli dodasz do swojego projektu biblioteki stron trzecich, które wymagają natywnych ram nieuwzględnionych w projekcie.
Musisz zajrzeć do plików .h i .m nowo dodanej biblioteki i sprawdzić, jakich ram wymaga, a następnie dołącz te ramy do swojego projektu (Cel> Fazy kompilacji> Połącz pliki binarne z bibliotekami).
źródło
Spróbuj usunąć framework, wyczyść projekt, dodaj go z powrotem i skompiluj. Lub Usuń klasę dodaną przez xcode ze źródła kompilacji, wyczyść projekt, dodaj ją z powrotem, a następnie buduj.
źródło
Pamiętaj, że możesz wstawić makro do dowolnego kontrolera widoku, który wywołuje pliki, które już usunąłeś.
Aplikacja nie wyświetli żadnych błędów, dopóki nie zbudujesz aplikacji, zgłosi błąd w fazie kompilacji w plikach .o.
Pamiętaj, aby usunąć wszelkie MAKRO wywołujące pliki, które już zostały usunięte.
Dzięki :)
źródło
Oprócz tego, co zrobił Allan, dodając brakujące klasy, podążyłem za rozwiązaniem @ emdog4 i dodałem bibliotekę Core Data, przechodząc do fazy budowania w Xcode i pod „Link Binary with Libraries” klikając + i wybierając „CoreData.framework” . To rozwiązało mój błąd
źródło