dyld: Biblioteka nie załadowana: @ rpath / libswift_stdlib_core.dylib

205

Ten błąd pojawia się po dodaniu klasy Swift do starego projektu Xcode.

dyld: Library not loaded: @rpath/libswift_stdlib_core.dylib

Jak mogę uruchomić projekt ponownie?

Anton
źródło
Możesz także zajrzeć na stackoverflow.com/questions/38364320, który pokazuje, jak to debugować za pomocąotool
Jim Hayes
2017 - niewiarygodnie, ponowne uruchomienie Xcode rozwiązało dla mnie ten ohydny problem.
Fattie

Odpowiedzi:

152

Dla mnie żadne z poprzednich rozwiązań nie zadziałało. Odkryliśmy, że ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIESw ustawieniach kompilacji istnieje flaga (we wcześniejszych wersjach: „Osadzona zawartość zawiera kod Swift”), która musi być ustawiona na TAK. Domyślnie NIE było!

mukaissi
źródło
Naprawiłem to również dla mnie, zmieniłem ustawienie rozszerzenia na true. Projekt jest objc, ale ext jest szybki i nie działał od samego początku
Cristi Băluță
To też była moja rezolucja. Mam istniejący projekt aplikacji na iOS (ObjC), do którego dodaję rozszerzenie Today (nowy cel w projekcie, rozszerzenie to wtyczka do głównej aplikacji). Musiałem przejść do ustawień docelowych aplikacji i włączyć ustawienie kompilacji i viola ... problem zniknął. Ma to sens, ale biorąc pod uwagę, ile innych rzeczy Xcode 6.0 automatycznie konfiguruje dla Ciebie, szkoda, że ​​ta podstawowa opcja została przeoczona.
hsoi
To naprawiło mój problem - mieliśmy starszy projekt z dużą ilością ObjC, do którego niedawno zaczęliśmy dodawać Swift. Mimo że IPA został zbudowany i zawierał biblioteki Swift, nie działał na niektórych urządzeniach z iOS7, dopóki to ustawienie kompilacji nie zostało sprawdzone i nie zrobiliśmy nowego IPA. Działa to na wszystkich naszych problematycznych urządzeniach.
Kendall Helmstetter Gelner
1
Poza tym nic nie działało. Jesteś cholernym czarodziejem, mój dobry panie!
Ricky Hartmann
2
Osadzone treści zawierają przestarzałe kody Swift ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES
nivritgupta
91

Ten błąd może wystąpić, jeśli coś poszło nie tak podczas konwersji projektu Objective-C, aby rozpocząć korzystanie z Swift. Problem polega na tym, że ustawienia kompilacji Linkera nigdy nie zostały poprawnie skonfigurowane, więc musisz to zrobić ręcznie. Wyszukaj ustawienie kompilacji Ścieżki wyszukiwania Runpath i ustaw je na:

$(inherited) @executable_path/Frameworks

wprowadź opis zdjęcia tutaj

EDYCJA: Powinienem również dodać, że ostatnio pojawiło się wiele błędów spowodowanych czymś zupełnie innym - Apple dokonało zmiany w samym Swift, zaczynając od Xcode 6.1 lub 6.1.1. Wydaje się, że jedynym rozwiązaniem jest zamknięcie Xcode, zniszczenie certyfikatów w Keychain Access, przejście do Centrum użytkowników i usunięcie wszystkich certyfikatów i profili (z wyjątkiem profili aplikacji w Sklepie - nie można ich usunąć), a następnie uruchomienie cały proces żądania certyfikatu od zera.

matowy
źródło
3
Pracował dla mnie. Uaktualniono do najnowszej wersji Xcode i stwierdziłem, że ta ścieżka ustawień w moim projekcie prowadziła do starszej wersji.
ObjectiveTC
1
pracował !! uratowałeś mi dzień! Używałem szybkiej kontroli GitHub w celu C z xcode 6 GM. Dzięki.
imthegiga
1
To również działało dla mnie. Ponowne uruchomienie Xcode nie.
Dan Loewenherz,
1
pracował dla mnie. Przy okazji na końcu komunikatu o błędzie pojawia się komunikat „Powód: nie znaleziono obrazu”.
Peter Zhou,
2
Dzięki Bogu! To było!
BoilingLime
79

Nie jestem do końca pewien, dlaczego pytanie to jest dyskutowane, miałem również ten problem, kiedy po raz pierwszy spróbowałem użyć Swift z istniejącym projektem. Ponowne uruchomienie Xcode również naprawiło to dla mnie.

Adam Fox
źródło
20
Próbuję użyć programu Swift w nowym projekcie iOS i pojawia się ten błąd podczas próby uruchomienia na urządzeniu z systemem iOS 8, ale nie w symulatorze. Ponowne uruchomienie Xcode, mojego laptopa lub telefonu nie rozwiązuje problemu. Czy jest jakieś inne rozwiązanie?
David Skrundz
2
Niestety, nie działało to dla mnie w wersji Beta 4, gdy próbowałem uruchomić aplikację Mac, która korzysta ze środowiska Swift.
Craig Otis
W odpowiedzi umieść link @Developer, ponieważ to naprawdę pomaga.
Lachezar Todorov
Spróbuj tego, ale wrzuć również czysty.
Scott McKenzie,
55

Długo szukałem tego problemu. Istnieje kilka przyczyn tego problemu.

Jeśli masz do czynienia z kodem / biblioteką Swift w projekcie Objectice C, powinieneś wypróbować rozwiązanie 1-2-3

Jeśli masz do czynienia z tym problemem dzięki nowemu projektowi Swift, Rozwiązanie 4 będzie dla Ciebie najlepsze.

Rozwiązanie 1:

Uruchom ponownie Xcode, a następnie komputer i iPhone'a

Rozwiązanie 2:

Przejdź do ustawień kompilacji projektu i ustaw Always Embed Swift Standard Libraries(poprzednio Embedded Content Contains Swift Code) flagę naYES

Rozwiązanie 3:

Przejdź do ustawień kompilacji projektu i dodaj @executable_path/Frameworksdo Runpath Search Pathsopcji

Rozwiązanie 4:

Jeśli żadna z powyższych czynności nie zadziała, to powinno. Apple wydaje się być łatkami na ninja, jak wspomniano w poście AirSign

Na certyfikatach InHouse

Subject: UID=269J2W3P2L, CN=iPhone Distribution: Company Name, O=Company Name, C=FR

dodali nowe pole o nazwie OU

Subject: UID=269J2W3P2L, CN=iPhone Distribution: Company Name, OU=269J2W3P2L, O=Company Name, C=FR

więc powinieneś po prostu odtworzyć certyfikat i przepis

accfews
źródło
1
Reklama 2: Teraz nazywa się „ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES” (patrz komentarz poniżej zaakceptowana odpowiedź).
Raphael
1
Chciałem dodać ... projekty macOS wymagają tego, @executable_path/../Frameworksgdzie wymagają tego projekty iOS bez ..pośrodku. Zmiana tej wartości jest ważna, jeśli cel został przekonwertowany z jednego systemu operacyjnego na drugi.
Matt Gallagher
41

W moim przypadku próbowałem zaimportować niestandardową platformę i otrzymałem podobny błąd. Okazuje się, że musiałem zaimportować platformę do wbudowanych plików binarnych, a nie do połączonych struktur i bibliotek.

Osadzone pliki binarne znajdują się w obszarze Ustawienia projektów -> -> Ogólne

C0D3
źródło
Uratowałem mój dzień! Niesamowite!
Klaas
1
Widziałem ten błąd, gdy próbowałem użyć skompilowanego frameworka napisanego w trybie szybkim (zamiast osadzać pliki źródłowe jako osobny cel). Powyższe rozwiązanie również działało dla mnie.
alex da franca
Dzięki tona, Uratowałem mój cały dzień.
Badrinath,
1
Pracowałem dla mnie po próbie połączenia frameworka napisanego szybko w starym projekcie, który był całkowicie obiektywny. To ustawienie było jednak w trakcie tworzenia. Więcej informacji tutaj: stackoverflow.com/questions/24163870/…
Pellet
To jest w Ustawieniach docelowych, a nie projektu, dla pewności.
Bezdzietny,
16

Dla programistów, którzy mieli ten problem z kompilacjami dystrybucji Adhoc / Enterprise,

Utwórz certyfikat produkcyjny z portalu deweloperskiego, a następnie ponownie wygeneruj profil dystrybucji. Pobierz i zainstaluj oba na komputerze Mac. Upewnij się, że wybrałeś odpowiedni profil w ustawieniach kompilacji Xcode i przebuduj aplikację.

Źródło: https://devforums.apple.com/message/1022908#1022908

Easthelper
źródło
Chociaż ten link może odpowiedzieć na pytanie, linki się psują. W związku z tym zaleca się dołączenie kluczowych części linku. Odpowiedzi tylko z łączem nie są zalecane.
Pokechu22,
Pracowałem dla mojej aplikacji dla przedsiębiorstw. Dzięki!
sylvanaar
15

Rozwiązanie 5:

W moim przypadku wszystkie rozwiązania wymienione w odpowiedzi na accfews były bardzo pomocne, ale żadne z nich nie zadziałało. Rozwiązałem problem, dodając moją szybką bibliotekę w sekcji „Osadzone pliki binarne” w sekcji „Ogólne” celu mojego projektu. Być może wynika to z faktu, że w mojej przestrzeni roboczej umieściłem moją szybką platformę? Cokolwiek teraz się kompiluje! Przygotuj się Szybko, jestem tutaj!

Chrstph SLN
źródło
OK, to wydawało się działać. Próbuję tylko napisać szybką bibliotekę kodów dla szybkiego projektu. Jakoś wciąż zastanawiam się, czy to prawda. Jednak jestem podekscytowany jego działaniem.
kpierce8,
Zawarłem swoje frameworki w sekcji „Kopiuj frameworki” na karcie Fazy kompilacji - ale tutaj nie można było wybrać jednej frameworka. „Ogólne” pozwoliło na wybranie tego innego frameworka i dodanie go do Fazy kompilacji, a aplikacja buduje i uruchamia się. Co dziwne, nadal mogłem uruchomić aplikację na symulatorze.
djbp
Dzięki Christophe. Tak jak Ty, wypróbowałeś wszystkie rozwiązania, a zrozumienie, że szybkiej biblioteki nie można przeciągnąć do projektu w inny sposób, nie było intuicyjne. Musisz wyraźnie umieścić bibliotekę w sekcji osadzonej (inaczej mówiąc, szybszy moduł, wątpię, żeby istniał inny rodzaj osadzonych rzeczy). Nawet gdyby Xcode mógł ładnie wykryć to automatycznie i wykonać dla nas zadanie ... Ale to nie jest zadanie naszego ukochanego XCode;), zdecydowanie tutaj, aby zmarnować nasz czas ...
Pan Bonjour
Dodatkowo, jeśli biblioteka znajduje się już na liście, upewnij się, że jest oznaczona jako „Osadź i podpisz”. To rozwiązuje mój problem.
SquareBox
10

Proste ponowne uruchomienie Xcode rozwiązało problem.

Anton
źródło
Daję klapsa następnemu fanowi jabłek, który śmieje się z resetowania systemu Windows
Josh
5

Dla mnie problem wynikał z faktu, że mój urząd certyfikacji Apple Worldwide Relations Relationship był nieprawidłowy.

Pobierz go stąd: https://developer.apple.com/certificationauthority/AppleWWDRCA.cer

Przeciągnij i upuść w Dostęp do pęku kluczy, wyczyść projekt i uruchom.

Eric
źródło
To zaczęło się dziać po dodaniu uprawnienia CloudKit. Wcześniej chyba nie obchodziło to, że certyfikat WWDR był nieważny.
CommaToast,
3

Miałem projekt Obj-C, w którym zacząłem dodawać szybkie pliki źródłowe. Następujące rozwiązało problem dla mnie:

  1. Łączenie: RUNPATH SEARCH PATHS = $(inherited) @executable_path/Frameworks
  2. Swift Compiler - Generowanie kodu: EMBEDDED CONTENT CONTAINS SWIFT = YES

Właśnie utworzyłem nowy projekt z szablonów Xcode 6.3 i porównałem ustawienia projektu z moim starym oryginalnym projektem.

pinzoni
źródło
3

Spróbuj przytrzymać klawisz Alt, a następnie przejdź do produktu -> czysty folder kompilacji ...

Mam nadzieję, że to pomoże komuś ...

stakahop
źródło
To nie daje odpowiedzi na pytanie. Gdy zdobędziesz wystarczającą reputację , będziesz mógł komentować dowolny post ; zamiast tego podaj odpowiedzi, które nie wymagają wyjaśnienia od pytającego . - Z recenzji
Rakete1111
Stało się to po próbie dodania nowej klasy w starym projekcie. Nie ma informacji, ile lat ma projekt. Dlatego wyczyszczenie projektu i wymuszenie odświeżenia pamięci podręcznej ma sens. Stary projekt wskazuje również, że istnieje duża szansa, że ​​certyfikat zostanie w międzyczasie zmieniony, ponieważ certyfikaty produkcyjne i programistyczne Apple wygasają co roku. Przeczytaj o głównej przyczynie błędu zgodnie z Apple Technical Q&A pod adresem. developer.apple.com/library/ios/qa/qa1886/_index.html . To samo mi się przydarzyło i Clean Build Folder powoduje, że projekt jest uruchamiany ponownie. Niech ludzie spróbują ..
stakahop
Stało się to zaraz po przeładowaniu mojego certyfikatu iOs. Proste czyszczenie (menu produktu) i wszystko działa dobrze ;-)
Sébastien REMY
Działał idealnie. Dziękuję Ci.
iSofia,
3

Powodów tego jest wiele. Właśnie spędziłem zabawny weekend, znajdując kolejny problem, który to powoduje (kolejność podpisywania kodu), chciałem stworzyć podsumowującą odpowiedź, która łączy wszystkie możliwe rozwiązania:

  1. Dodaj zawartość osadzoną zawiera kod Swift do projektu. Musisz ustawić tę flagę, jeśli Twoja aplikacja zawiera kod Swift.
  2. Czysty projekt . Oprócz projektu> Wyczyść możesz także usunąć katalogi DerivedDatai Build. Sprawdź w Preferencjach lokalizację DerivedData. Buildpowinien znajdować się w folderze projektu.
  3. Upewnij się, że ścieżki wyszukiwania Runpath zawierają@executable_path/Frameworks .
  4. Upewnij się, że Twój certyfikat zawiera identyfikator zespołu Apple w polu OU (jednostka organizacyjna) Apple doda to dla Ciebie, po prostu unieważnij istniejący certyfikat dystrybucji i utwórz nowy, pobierz, zainstaluj na KeyChain, ponownie wygeneruj wszystkie profile udostępniania, pobierz je i odbudować.
  5. Ponowne uruchomienie Xcode. Jeśli wszystko jest w zasadzie dobre, ale Xcode jeszcze tam nie dotarł.

To takie proste. Jeśli wykonujesz własną kompilację z wiersza poleceń, możesz tworzyć własne .ipapliki do przesłania. W takim przypadku musisz upewnić się, że:

  1. Upewnij się, że wersja plików Swift w SwiftSupport/iphoneosjest taka sama jak wersja wContents/YourApp.app/Frameworks Ponieważ Swift nie jest jeszcze kompatybilny binarnie między wersjami, musisz upewnić się, że te wersje są tymi, z których zbudowałeś aplikację. Możesz znaleźć te biblioteki pod /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/swift/iphoneos.
  2. Najpierw podpisz biblioteki i ramy . Musisz najpierw codesignbibliotek i plików frameworka ( Frameworksw .appfolderze), a następnie podpisać całe .appdrzewo. .appDrzewo musi być podpisana z entitlements.plistale nie ram.

Mamy nadzieję, że kiedy pojawi się Swift 3.0 i nie będziemy już musieli dołączać Swift do naszych aplikacji, cały problem zniknie.

jlyonsmith
źródło
2

Miałem ten problem, korzystając z usługi mobilnej Ad Hoc (lub przedsiębiorstwa) z certyfikatem produkcyjnym. Przejście na certyfikat rozwoju i mobileprovision rozwiązało problem.

MacTeo
źródło
4
Może to pozwolić na uruchomienie aplikacji w fazie rozwoju, ale jak wdrożyć, jeśli profil ad-hoc lub korporacyjny nie działa?
Kristopher Johnson
2

Mój projekt jest projektem Swift z niektórymi klasami Objective-C. Miałem ten sam problem po podpisaniu przy użyciu starego certyfikatu inHouse (Enterprise).

Poniższe kroki naprawiły to dla mnie.

  1. Utwórz i użyj nowego certyfikatu i usługi mobilnej.
    (Patrz blog bloga AIRSIGN )
  2. Ustaw Runpath Search Pathsustawienia kompilacji do: $(inherited) @executable_path/Frameworks.
    (Ref. Odpowiedź Matta )
jqgsninimo
źródło
2

Rozwiązanie 6:

W naszym przypadku certyfikat dystrybucji dla przedsiębiorstw został unieważniony. Wygenerowanie nowego certyfikatu i zaktualizowanie profilu informacyjnego rozwiązało problem.

(Wydaje się, że istnieje wiele różnych przyczyn tego błędu. Mam nadzieję, że to komuś pomoże.)

Picciano
źródło
To rozwiązało mój problem. Cholera jasna, co za strata czasu próbuje to naprawić. Mam nadzieję, że to rozwiąże problemy innych użytkowników. Byłem w stanie debugować moją aplikację za pomocą niestandardowego frameworka, ale nie mogłem uruchomić wersji maszyny kompilacji na Jenkins. Odwołanie moich certyfikatów dystrybucyjnych i wygenerowanie nowego profilu udostępniania dla przedsiębiorstw naprawiło dla mnie kompilacje.
cynistersix
2
To samo dotyczy Rozwiązania 4
potwierdza
2

Próbowałem wszystkich powyższych odpowiedzi, nic nie działało.

Wreszcie działało po aktualizacji do Yosemite

Prabu
źródło
2

Napotkałem ten sam problem, ustawienie prawidłowej tożsamości znaku kodowego rozwiązało problem (Ustawienia kompilacji-> Tożsamość podpisywania kodu).

Zgodnie z pytaniem technicznym Apple „Wszystkie certyfikaty programistów Enterprise i standardowe iOS, które są tworzone po wydaniu iOS 8, mają nowe pole Team ID w odpowiednim miejscu, aby umożliwić uruchamianie aplikacji językowych Swift”

Saikiran K.
źródło
2

Jeśli dodasz trzy frameworki za pomocą osadzonych plików binarnych, zostaną one również dodane do frameworków połączonych i bibliotek. Usuń trzy wpisy w połączonych ramach i bibliotekach rozwiąże problem.

Magiczne metody, takie jak ponowne uruchomienie Xcode i ponowne uruchomienie komputera Mac, nie działają na mnie.

Arbipher
źródło
Dziękujemy za ulepszenie formatu. Wygląda lepiej. „Połączone ramy i biblioteki” to jedna sekcja, a nie dwie. Zmieniam „i” na pogrubienie. @ Bartłomiej
Arbipher,
特 来 shua fen zi shu bu ding
icemelon
2

Dodanie frameworka jako „Embedded Binary” zamiast po prostu „Linked Frameworki i biblioteki” - Naprawiono mój problem.

Ustawiłem również opcję Osadzona zawartość zawiera kod szybkiego na TAK.

Naveen Shan
źródło
1

Uaktualnij do najnowszej wersji OS X (Yosemite)

Po godzinach prób i błędów doszedłem do rozwiązania tego problemu. - Jeśli dotyczy to oczywiście twojego przypadku.

Miałem ten sam problem, dopóki nie zaktualizowałem systemu Mac OS X z Mavericks do Yosemite. - Naprawił mój problem, mam nadzieję, że naprawi również twój

Aktywnie leniwy
źródło
1

Wypróbowałem wszystkie rozwiązania znalezione w sieci, w tym Apple i nowe certyfikaty. Bezskutecznie.

Jedynym sposobem, w jaki mogłem uruchomić xcode, po 6 miesiącach prób, było utworzenie nowego konta na moim Macbooku.

Eldervaz Vaz
źródło
1

Zwykle ten błąd zniknie, jeśli dodasz tę bibliotekę do segmentu „Kopiuj pliki” w swoich fazach kompilacji.

raphael_mav
źródło
To działało dla mnie w XCode 7.2.1. Użyłem znaku + w panelu Fazy kompilacji, wybrałem Fazę nowych plików kopii, a następnie przeciągnąłem strukturę z drzewa obszaru roboczego do sekcji Kopiuj pliki. Wreszcie wybrałem Destination: Frameworks. Po czystej kompilacji moja aplikacja uruchomiła się zgodnie z oczekiwaniami.
Rob Smallshire
1

A jeśli wszystko to nie pomoże i naprawdę się denerwujesz ... Wypróbuj najlepszą sztuczkę ze wszystkich: Cleani dla pewności Clean Build Folder. :) Mam nadzieję, że to komuś pomaga!

Georg
źródło
1

Żadne z tych rozwiązań nie działało dla mnie konsekwentnie; po każdych kilku udanych uruchomieniach znowu się nie powiedzie. Dla mnie flaga „Treść osadzona zawiera szybki kod” zawsze była ustawiona na TAK.

Okazuje się, że ustawiłbym Xcode na zgodność z 6.3. Powrót do wersji zgodnej z 3.2 rozwiązał:

brandonscript
źródło
Dziękuję Ci! Próbowałem wszystkiego innego. Zmieniłem go z powrotem na 3.2, wyczyściłem projekt, ponownie uruchomiłem Xcode i zadziałało
gabriellanata
1

Miałem też ten problem, tylko że nie był w stanie go zlokalizować libswiftXCTest.dylib.

Rozwiązaniem było dodanie XCTest.frameworkdo celu Testy w Build Phases/Link Binary with Library. Ten błąd pojawiał się nawet wtedy, gdy próbowałem zbudować główny cel.

Lord Zsolt
źródło
0

Pojawiło się to, gdy dodałem nowy cel rozszerzenia Today z językiem Swift do starego projektu. Naprawiono łatwo, aktualizując projekt do zalecanych ustawień. Xcode 6.0.1

Vilém Kurz
źródło
0

Ten sam problem mam przy użyciu Mavericks, Xcode 6.1.1, testowania na iPhone5 z iOS 8.1.1. Wypróbowałem wszystkie możliwe rozwiązania, w tym nowe certyfikaty i profile udostępniania, ale nic nie pomogło. Wprowadziłem zmiany do Embedded Content Contains Swift CodeiRunpath Search Paths zarówno na poziomie projektu, jak na poziomie docelowym.

Zainstalowałem teraz Yosemite i bez żadnych dalszych zmian zaczął on działać.

patrik
źródło
0

Ten sam problem tutaj, dla mnie było to, że Crashlytics / Fabric / Beta / Twitter / jakkolwiek się nazywają, ładują plik binarny, w którym brakuje osadzonych frameworków. Jeśli stworzyłem archiwum, a następnie wyeksportowałem kompilację Enterprise w standardowy sposób, zadziałałyby urok.

rob5408
źródło
0

Moje środowisko: Cocos2d 2.0, Box2d, Cel C

Oprócz odpowiedzi na inne powyższe pytania w końcu poszedłem do zakładki Ogólne i uczyniłem WatchKit Opcjonalnym.

Cele: Ogólne: Powiązane struktury i biblioteki: WatchKit.framework: Opcjonalne

Jim Rota
źródło
0

Po miesiącach i miesiącach próbowania wszystkiego tutaj ... Definicja szaleństwa ... uruchomienie Xcode pod nowym użytkownikiem komputera Mac rozwiązało to dla mnie.

Usunąłem ~ / Library / Developer / * i ponownie zainstalowałem Xcode, więc nie mam pojęcia, co jeszcze sformatować, aby działało.

wcribbs
źródło