Nie załadowano biblioteki systemu OS X: „Nie znaleziono obrazu”


279

Próbuję stworzyć podstawową platformę OS X, teraz właśnie stworzyłem ramę testową: TestMacFramework.frameworki próbuję zaimportować ją do zupełnie nowego projektu aplikacji OS X.

Zbudowałem plik .framework i zaimportowałem go do nowego projektu. Wygląda na to, że struktura łączy się dobrze, i mogę odwoływać się do publicznego pliku nagłówka dodanego do sekcji faz budowania struktury.

Jednak gdy próbuję uruchomić aplikację kontenera, pojawia się następujący błąd:

dyld: Library not loaded: /Library/Frameworks/TestMacFramework.framework/Versions/A/TestMacFramework
  Referenced from: /Users/samharman/Library/Developer/Xcode/DerivedData/TestMacContainer-dzabuelobzfknafuhmgooqhqrgzl/Build/Products/Debug/TestMacContainer.app/Contents/MacOS/TestMacContainer
  Reason: image not found

Po odrobinie googlingu zdałem sobie sprawę, że muszę dodać Copy Filessekcję do faz budowania aplikacji kontenera, więc zrobiłem to i skonfigurowałem tak ...

wprowadź opis zdjęcia tutaj

Nadal jednak pojawia się błąd czasu wykonywania. Oczywiście robię tu coś złego, ale zasoby biblioteki programistów Apple dla tych odniesień Xcode 2, więc nie jest to bardzo pomocne!

Czego mi brakowało?

AKTUALIZACJA:

W dzienniku kompilacji widzę, że mój plik TestMacFramework.frameworkjest kopiowany do katalogu .app content / frameworks, ale nie jest instalowany w katalogu Library / Frameworks na dysku HD

wprowadź opis zdjęcia tutaj

AKTUALIZACJA 2:

Kompilacja łączy się poprawnie, jeśli ręcznie skopiuję plik TestMacFramework.frameworkdo Library/Frameworkskatalogu


1
Co otool -Lmówi ci o tym, gdzie aplikacja spodziewa się znaleźć platformę?
trojanfoe

Okej, wymyśliłem, jak to uruchomić ... To jest wyjście, które otrzymałem dla mojej biblioteki (wykluczyłem inne zależności, takie jak Foundation itp.)/Library/Frameworks/TestMacFramework.framework/Versions/A/TestMacFramework (compatibility version 1.0.0, current version 1.0.0)
Sammio2

Moją poprawką było Osadzanie jako pliki binarne potrzebnej biblioteki (Alamofire). Czy to jest dopuszczalne?
Cmag

2
To bardzo mylące, że to pytanie jest wyraźnie oznaczone jako przeznaczone dla systemu OS X, a wszystkie odpowiedzi, w tym odpowiedź zaakceptowana, dotyczą systemu iOS. Mam ten sam błąd i nie mogę użyć żadnej z odpowiedzi.
RenniePet,

@RenniePet Ponieważ Xcode 7.3 proces jest taki sam dla platform iOS i macOS, zaakceptowana odpowiedź jest poprawnym sposobem na zrobienie tego. Jeśli nadal masz problemy, może to być problem niezwiązany?
Sammio2,

Odpowiedzi:


553

[Xcode 11+]

Jedyne, co należy zrobić, to dodać platformę do General->Frameworks, Libraries And Embedded Contentsekcji na Generalkarcie celu aplikacji.

Upewnij się, że wybierzesz opcję „Osadź i podpisz”.

wprowadź opis zdjęcia tutaj

[Xcode v6 -> Xcode v10]

Jedyne, co należy zrobić, to dodać platformę do Embedded binariessekcji na Generalkarcie celu aplikacji.

Zrzut ekranu z Xcode


32
To jedyny krok niezbędny dla iOS.
nikolovski

7
Dzięki! Rozwiązałem to dla mnie na iOS.
user1244109,

6
Dziękuję Ci! Pomogło mi to na iOS
Alexander Khitev,

4
Korzystam z klasy z zaimportowanego frameworka w Storyboard i miałem ten błąd. Chciałem tylko to dodać, oprócz ustawienia niestandardowej klasy w Storyboard, musisz również ustawić pole MODUŁ.
Ruben Martinez Jr.

8
@ZevsVU Nie mam Embedded binariessekcji w moim projekcie macOS. Co jest nie tak?
fnc12

56

Udało mi się to uruchomić, jest to dość proste, jeśli masz odpowiednie instrukcje. To, czego szukałem, to „prywatna” platforma, która znajduje się w pakiecie aplikacji, a nie jest zapisywana w folderze biblioteki systemu.

Budowanie frameworka

  1. Dodaj cel, aby utworzyć strukturę kakao
  2. W tym celu „Ustawienia kompilacji” skonfiguruj „Katalog instalacyjny” na „@executable_path /../ Frameworks”
  3. Zbuduj bibliotekę i uzyskaj dostęp do .framework z archiwum lub katalogu produktów

W tym ramy

  1. Przeciągnij utworzony plik .framework do projektu Xcode, zaznacz pole wyboru „Kopiuj pliki do katalogu”
  2. W celu zawierającym aplikacje dodaj nowy „Faza kompilacji pliku”
  3. Ustaw „Miejsce docelowe” na „Ramy”
  4. Przeciągnij utworzony plik .framework

1
Działa to również w przypadku platform iOS. Podczas dodawania niestandardowej struktury do obszaru roboczego, aby wraz z nią budować. Aby dodać ten błąd podczas debugowania na urządzeniu, należy dodać część „Uwzględnianie frameworka”!
cynistersix

1
Dzięki, pracowałem dla iOS. Nie podążałem za twoimi pierwszymi krokami, ponieważ frameworki zostały już wbudowane w mój folder danych pochodnych
Gmeister4,

Niesamowite! Uratowałem mój dziwny dzień! 2017 - Xcode 8.3.2 Dzięki!
Glenn

Z jakiegoś dziwnego powodu nie możesz przeciągnąć frameworka z domyślnej sekcji „Połącz plik binarny z bibliotekami” do sekcji „Osadzone frameworki”, ale możesz przeciągnąć ramę z listy Projekty po lewej stronie. Nadal będziesz musiał ręcznie usunąć framework z sekcji „Link Binary With Libraries” za pomocą przycisku „-”.
William Cerniuk,

18

To było dla mnie dość proste, właśnie dodałem swoją strukturę do moich osadzonych plików binarnych w ramach celów aplikacji


15

Opcje powyżej nie były możliwe do uwzględnienia. Rozwiązałem go, podając ścieżkę wyszukiwania Runpath

Jest to na karcie „ Ustawienia kompilacji ”. W sekcji „ Łączenie ”. Zmień „ Ścieżki wyszukiwania Runpath ” na$(inherited) @executable_path/Frameworks


Potrzebowałem obu tych kroków, tego kroku i dodania nowej „Fazy kompilacji pliku” w ramach wcześniej.
user23,

Miałem stary projekt Xcode, który był stopniowo aktualizowany i tych ustawień mi brakowało. Dodano i teraz działa zgodnie z oczekiwaniami.
Mattio

spośród wszystkich tych rozwiązań to zadziałało, jest to tak denerwujące, jak podejście do problemu jest takie: „OK, pozwól mi zejść na dół listy wszystkich postów związanych z przepełnieniem stosu, ponieważ podstawowa przyczyna jest niejasna” APPLEEEEE
Ryan

9

Natknąłem się na ten sam problem, ale zaakceptowane rozwiązanie nie działało dla mnie. Zamiast tego rozwiązaniem była zmiana nazwy instalacji frameworka.

Błąd w oryginalnym poście to:

dyld: Library not loaded: /Library/Frameworks/TestMacFramework.framework/Versions/A/TestMacFramework
  Referenced from: /Users/samharman/Library/Developer/Xcode/DerivedData/TestMacContainer-dzabuelobzfknafuhmgooqhqrgzl/Build/Products/Debug/TestMacContainer.app/Contents/MacOS/TestMacContainer
  Reason: image not found

Zwróć uwagę na pierwszą ścieżkę po niezaładowaniu biblioteki . Struktura jest ładowana z absolutnej ścieżki. Ta ścieżka pochodzi od nazwy instalacji frameworka (czasami nazywanej rpath), którą można sprawdzić za pomocą:

otool -D MyFramework.framework/MyFramework

Gdy platforma jest osadzona w aplikacji, ścieżka ta powinna być względna i mieć następującą postać: @ rpath / MyFramework.framework / MyFramework . Jeśli nazwa instalacji twojego frameworka jest ścieżką bezwzględną, może nie zostać załadowana w czasie wykonywania i zostanie wygenerowany błąd podobny do powyższego.

Rozwiązaniem jest zmodyfikowanie nazwy instalacji:

install_name_tool -id "@rpath/MyFramework.framework/MyFramework" MyFramework.framework/MyFramework 

Po tej zmianie nie pojawia się już błąd



7

Żadne z tych problemów nie rozwiązało tego dla mnie. Ostatecznie problem był dość łatwy. Wygląda na to, że jest to dość poważny błąd Xcode, który zarejestrowałem problem i naprawiłem pod błędem Apple: 29820370. Jeśli masz problemy (wydaje się, że istnieje kilka stron podobnych problemów), byłoby świetnie, gdybyś mógł zgłosić błąd w raporcie błędów: https://bugreport.apple.com/ i odwołać się do błędu, który zgłosiłem, aby uzyskać widoczność. Chcę sprawić, by Xcode wrócił do przyjemności, jaką był wcześniej - i jestem pewien, że Xcode powinien sam się naprawić.

Oto poprawka: 1. Otwórz pęku kluczy - przejdź do Apple Worldwide Developer Cert. 2. Kliknij dwukrotnie 3. Zmień poziom uprawnień z „zawsze ufaj”, aby użyć ustawień domyślnych systemu 4. Zapisz i zamknij go 5. Uruchom ponownie Xcode, wyczyść i skompiluj projekt i powinien zniknąć.

Zrzut ekranu poniżej prawidłowych ustawień: Naprawiono dostęp do pęku kluczy Mam nadzieję, że to pomoże!


2
„Użyj domyślnych ustawień systemowych” wydaje się być ustawieniem standardowym.
Raphael

Nie zawsze - wydaje się, że coś to zmienia, co powoduje ten błąd
UKDataGeek

Dzięki temu naprawiłem również mój problem! Niestety nie widzę Twojego zgłoszenia w narzędziu do śledzenia błędów, aby zapewnić mu dodatkową widoczność. Nie jestem pewien dlaczego, ale nie pokazuje żadnych błędów.
Jim

7

Xcode 11:

w Xcode 11 dodaj ramę do General->Frameworks, Libraries And Embedded Content

po dodaniu upewnij się, że wybierasz Embed & Signopcję

wprowadź opis zdjęcia tutaj


2
jeśli to zrobisz, nie będziesz mógł wgrać aplikacji do App Store
Mahendra,

@Mahendra, jakiej alternatywy używasz w tym przypadku? Miałem podobny problem.
Derryl Thomas,

@DerrylThomas, aplikacja jest nadal w trybie programowania, więc nie przetestowałem tego przypadku
Mahendra,

1
@Mahendra, podziel się tutaj, na wypadek gdybyś znalazł alternatywę dla tego. Byłbym bardzo wdzięczny.
Derryl Thomas

@DerrylThomas Podczas tworzenia archiwum przywróć z powrotem do opcji Nie osadzaj i utwórz plik wykonywalny, aby przesłać do App Store.
BlackPearl12

6

Po przeciągnięciu ramy własnego do projektu pod Xcode 10.1 , to zakłada się , że ramy jest ramy systemu i umieszcza ramy do sekcji „Link binarne z bibliotekami” z „Fazy budowy” pod swój cel.

Struktury systemowe są już na urządzeniu, więc nie są kopiowane na urządzenie, a zatem nie mogą zostać uruchomione w środowisku wykonawczym, więc KABOOM (awaria __abort_w_payload i dezinformujący błąd: „Przyczyna: nie znaleziono obrazu”). Wynika to z faktu, że kod frameworku nie jest kopiowany na urządzenie ...

W rzeczywistości, aby Xcode łączył niestandardową platformę i upewniał się, że jest ona kopiowana wraz z Twoim kodem na urządzenie z systemem iOS (rzeczywistym lub symulatorem), niestandardową platformę należy przenieść do „Kopiuj zasoby pakietu”. To ostatecznie pakuje platformę wraz z plikiem wykonywalnym do wspólnej dostępności na urządzeniu.

Aby dodać niestandardową strukturę do projektu i uniknąć awarii Apple:

  1. Przeciągnij niestandardową strukturę na listę plików projektu iOS
  2. Kliknij ProjectName w Nawigatorze -> TargetName -> „Kompiluj fazy” -> Połącz trójkąt binarny z trójkątem ujawniania bibliotek
  3. Przeciągnij niestandardową strukturę w górę i w dół do sekcji „Kopiuj zasoby pakietu” poniżej (Xcode przenosi teraz odniesienie do ramy, naprawione w Xcode 10)
  4. Uruchom w symulatorze lub urządzeniu

W ten sposób niestandardowa struktura zostaje skopiowana wraz z kodem na urządzenie docelowe i jest dostępna w czasie wykonywania.

wprowadź opis zdjęcia tutaj

[artykuł redakcyjny: można by pomyśleć , że Xcode byłby na tyle inteligentny, aby zrozumieć różnicę między jedną ze swoich struktur systemowych, które nie muszą być kopiowane na urządzenie, a niestandardową strukturą, która jest, och nie wiem, w hierarchii katalogu głównego projektu ... 🙄]


5

Powinno być „Uruchom skrypt” w „Fazach kompilacji” z tym: „/ usr / local / bin / carthage copy-frameworks”

W „Plikach wejściowych” tego „Run Script” powinieneś dodać ścieżkę do swoich bibliotek. Lubię to:

Fazy ​​kompilacji Uruchom skrypt


4

Przypadkowe zresetowanie pęku kluczy może nastąpić z powodu braku certyfikatów Apple w pęku kluczy. Postępowałem zgodnie z tym, aby rozwiązać problem.

Miałem ten sam problem i mogłem go naprawić, ponownie pobierając WWDR (Apple Worldwide Developer Relations Certification Authority). Pobierz stąd: http://developer.apple.com/certificationauthority/AppleWWDRCA.cer


To rozwiązało również mój problem. Pamiętaj, aby wyczyścić folder kompilacji przed ponowną kompilacją.
Justin Milo

4

Jeśli używasz Xcode 11 , upewnij się, że masz dodane ramy w ramach, bibliotekach i osadzaniu treści w Ustawieniach docelowych - Ogólne. Zmień status Osadź z - „Nie osadzaj” na „Osadź i podpisz”


Ale spowoduje to błąd ITMS-90206 Invalid Swift Support podczas dystrybucji do App Store. Działa tylko w rozwoju.
Raptor

2

Co rozwiązać go było dla mnie zmienia abstract_targetsię targetza główny cel w moim Podfile. Wcześniej go ustawiłem, co abstract_targetspowodowało opisany błąd. Teraz działa jak urok


1

W przypadku Xcode 8 niektóre przestarzałe produkty zostaną usunięte z folderu danych pochodnych. Zobacz to rozwiązanie .

Apple: W systemie macOS 10.12 i nowszych Xcode usuwa przestarzałe dane pochodne, wstępnie skompilowane nagłówki i pamięci podręczne modułów. (23282174)

System kompilacji Xcode obsługuje usuwanie starych plików niektórych artefaktów kompilacji, które zostały utworzone w poprzedniej kompilacji, ale od tego czasu zostały usunięte z projektu.

Bazując na myśli autora, znalazłem ten dziennik kompilacji z mojej sprawy.

Remove stale build products

/bin/rm -rf /Users/usename/Library/Developer/Xcode/DerivedData/myapp-esvvhwwwwngijeemhatmklwzoxnb/Build/Products/Debug-iphonesimulator/myapp.app/Frameworks/AliyunVodPlayerSDK.framework
/bin/rmdir /Users/usename/Library/Developer/Xcode/DerivedData/myapp-esvvhwwwwngijeemhatmklwzoxnb/Build/Products/Debug-iphonesimulator/myapp.app/Frameworks

Po utworzeniu nowej fazy pliku kopii i skopiowaniu docelowej nieaktualnej struktury do miejsca docelowego Frameworks powyższy dziennik usuwania znika po odbudowaniu.

Po prostu wyjaśnij moją sytuację i powód, mam nadzieję, że komuś się przyda.


1

Dla mnie to było rozwiązanie, po wielu godzinach poszukiwań !!

Z jakiegoś powodu, podczas opracowywania niestandardowego frameworka Swift 2.3, Xcode 8 usunął to DYLIB_INSTALL_NAME_BASEustawienie z project.pbxprojpliku. Mały spacer do Build Settings / Dynamic Library Install Name Baseustawienia z powrotem, aby @rpathgo naprawić.

(od https://forums.developer.apple.com/thread/4687 )


0

Odkryłem, że ten problem dotyczył tylko podpisywania kodu i certyfikatów, a nie samego kodu. Aby to sprawdzić, utwórz podstawową aplikację z pojedynczym widokiem i spróbuj uruchomić ją bez żadnych zmian na urządzeniu. Jeśli widzisz ten sam typ błędu, oznacza to, że kod jest w porządku. Podobnie jak ja przekonasz się, że twoje certyfikaty są nieważne. Pobierz wszystko ponownie i napraw wygasłe. Następnie, gdy pojawi się komunikat, że podstawowa aplikacja nie zgłasza błędu, wypróbuj ją ponownie po wyjściu z Xcode i być może zrestartuj komputer Mac w dobrym celu. To w końcu zakończyło ten koszmar. Najprawdopodobniej nie ma to nic wspólnego z twoim kodem, zwłaszcza jeśli podczas próby uruchomienia pojawi się komunikat Kompilacja zakończona powodzeniem. Do Twojej wiadomości


0

Masz problem podczas wypróbowywania Xcode 9 w wersji beta i powrotu do Xcode 8. Prosty Clean na celu rozwiązał problem.


0

Miałem ten sam problem z innego powodu. Utworzyłem nową konfigurację do debugowania i wydania (w PROJEKCIE -> karta Informacje -> Konfiguracja). I musiałem zmienić skrypt powłoki pod frameworków (Pods- „appName” -frameworks.sh, w obszarze Pliki obsługi celów), aby działał.

[Xcode 9]


0

Jedyne, co dla mnie zadziałało:

Cel> Fazy kompilacji> [CP] Osadzanie szkieletów Usuń zaznaczenie opcji „Pokaż zmienne środowiskowe w dzienniku kompilacji” i „Uruchom skrypt tylko podczas instalacji”


0

Próbowałem wielu poprawek, ale dla mnie zadziałało usunięcie brakującego celu wymienionego na karcie kompilacji w schemacie kompilacji. Możesz do niego dotrzeć, otwierając okno edycji bieżącego schematu.

Edycja: Mój cel testowania interfejsu użytkownika również nie działał, a rozwiązaniem, które znalazłem, było jego usunięcie i ponowne wygenerowanie.


0

otwórz xcode -> ogólne -> Osadzone pliki binarne -> dodaj QBImagepicker.framework i RSKImageCropper -> czysty projekt

wystarczy dodać QBImagePicker.framework i RSKImageCropper.framework we wbudowanych plikach binarnych, które dla mnie działały


0

Myślę, że nie ma ustalonego sposobu rozwiązania tego problemu, ponieważ może on być spowodowany z innego powodu. Miałem też ten problem w zeszłym tygodniu, nie wiem, kiedy i dokładnie co go powoduje, tylko kiedy uruchomię go na symulatorze z Xcode lub spróbuję zainstalować na telefonie, wtedy zgłosi taki błąd, ale kiedy uruchom go przy pomocy native-run run-ios z terminalem, nie ma problemu.

Sprawdziłem wszystkie sposoby zamieszczone w Internecie, takie jak odnowienie certyfikatu, zmiana ustawień w Xcode (wszystkie wyżej wymienione sposoby), w rzeczywistości wszystkie ustawienia w Xcode zostały już ustawione zgodnie z żądaniem wcześniej, żaden sposób nie działa dla mnie. Aż do rana, kiedy usuwam zasobniki i instaluję ponownie, błąd w końcu pojawi się po tygodniu. Jeśli używasz również cocoapod, a następnie błąd pojawił się bez konkretnego powodu, być może możesz spróbować po mojej stronie.

  1. Sprawdź moją wersję cocoapods.
  2. Zaktualizuj go, jeśli dostępna jest nowa wersja.
  3. Przejdź do folderu projektu, usuń plik Podfile.lock, plik Pods, przestrzeń projektu xcworkspace.
  4. Uruchom instalację pod

0

Problem ten wystąpił tylko na prawdziwym urządzeniu (iPhone SE). Na symulatorze projekt działał zgodnie z oczekiwaniami.

Próbowałem wszystkich poprawek z tego wątku i stąd . Żaden z nich nie działał dla mnie.

Dla mnie problem został rozwiązany po ponownym uruchomieniu iPhone'a (sic!).

Zrobiłem:

  • czysty folder kompilacji,
  • czyste dane pochodne,
  • usuń aplikację z urządzenia,
  • zrestartuj urządzenie

I w końcu działa. :)

Jeśli każde inne rozwiązanie zawiedzie, nie zapomnij go wypróbować.


Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.