Próbuję stworzyć podstawową platformę OS X, teraz właśnie stworzyłem ramę testową: TestMacFramework.framework
i 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 Files
sekcję do faz budowania aplikacji kontenera, więc zrobiłem to i skonfigurowałem tak ...
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.framework
jest kopiowany do katalogu .app content / frameworks, ale nie jest instalowany w katalogu Library / Frameworks na dysku HD
AKTUALIZACJA 2:
Kompilacja łączy się poprawnie, jeśli ręcznie skopiuję plik TestMacFramework.framework
do Library/Frameworks
katalogu
źródło
otool -L
mówi ci o tym, gdzie aplikacja spodziewa się znaleźć platformę?/Library/Frameworks/TestMacFramework.framework/Versions/A/TestMacFramework (compatibility version 1.0.0, current version 1.0.0)
Odpowiedzi:
[Xcode 11+]
Jedyne, co należy zrobić, to dodać platformę do
General->Frameworks, Libraries And Embedded Content
sekcji naGeneral
karcie celu aplikacji.Upewnij się, że wybierzesz opcję „Osadź i podpisz”.
[Xcode v6 -> Xcode v10]
Jedyne, co należy zrobić, to dodać platformę do
Embedded binaries
sekcji naGeneral
karcie celu aplikacji.źródło
Embedded binaries
sekcji w moim projekcie macOS. Co jest nie tak?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
W tym ramy
źródło
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
źródło
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
źródło
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:
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ą:
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:
Po tej zmianie nie pojawia się już błąd
źródło
Usunięcie danych pochodnych zapisało je dla mnie
źródło
pod install
, działało.Ż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ń: Mam nadzieję, że to pomoże!
źródło
w Xcode 11 dodaj ramę do
General->Frameworks, Libraries And Embedded Content
po dodaniu upewnij się, że wybierasz
Embed & Sign
opcjęźródło
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:
W ten sposób niestandardowa struktura zostaje skopiowana wraz z kodem na urządzenie docelowe i jest dostępna w czasie wykonywania.
[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 ... 🙄]
źródło
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:
źródło
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
źródło
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”
źródło
Co rozwiązać go było dla mnie zmienia
abstract_target
siętarget
za główny cel w moim Podfile. Wcześniej go ustawiłem, coabstract_target
spowodowało opisany błąd. Teraz działa jak urokźródło
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.
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.
źródło
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_BASE
ustawienie zproject.pbxproj
pliku. Mały spacer doBuild Settings / Dynamic Library Install Name Base
ustawienia z powrotem, aby@rpath
go naprawić.(od https://forums.developer.apple.com/thread/4687 )
źródło
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
źródło
Masz problem podczas wypróbowywania Xcode 9 w wersji beta i powrotu do Xcode 8. Prosty Clean na celu rozwiązał problem.
źródło
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]
źródło
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”
źródło
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.
źródło
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
źródło
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.
źródło
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:
I w końcu działa. :)
Jeśli każde inne rozwiązanie zawiedzie, nie zapomnij go wypróbować.
źródło
Xcode 11: Fazy kompilacji -> Struktury osadzania
źródło