Kiedy uruchamiam aplikację z XCode, mam awarię, ale nie ma błędu
Aplikacja właśnie zatrzymuje się w tym wątku
Co mogę zrobić, aby uzyskać więcej informacji o problemie?
Odpowiedzi:
Jeśli używasz niestandardowych frameworków, musisz umieścić je w sekcji „Osadzone pliki binarne” znajdującej się w projekcie Xcode w zakładce Cel / Ogólne.
Dla mnie proste Clean
i Rebuild
załatwione. Mam nadzieję, że to pomoże.
Dodanie struktury do listy osadzonych zasobów binarnych rozwiązało ten problem. Oto jak wygląda konfiguracja obcego frameworka w ostatecznej formie w Xcode GUI jako Embedded Framework (Xcode 9.2, osobiście wolę wizualny ślad okruchów chleba ;-)):
Czy Apple celowo zawiesił środowisko wykonawcze, aby w jakiś sposób poinformować dewelopera o problemie, że nie można używać frameworków innych niż Apple jako prostych połączonych frameworków w programowaniu iOS? Byłoby lepiej, gdyby pojawił się jako błąd kompilacji, myślę ... z przyciskiem z napisem „przesuń to!”
Korzystanie z wbudowanych plików binarnych sprawia, że użytkownik końcowy nie musi dodawać Framework niezależnie od aplikacji (lub musisz zrobić to z instalatorem). W przypadku iPhone'a (iOS) jest to niemożliwe, ale na macOS jest to możliwe, ale może szybko się zabrudzić.
Dla użytkownika końcowego znacznie przyjemniej jest po prostu przeciągnąć i upuścić aplikację, aby zainstalować ją w systemie MacOS, co oznacza, że osadzenie staje się korzyścią. Osadzanie pozwala również uniknąć klasycznych „konfliktów bibliotek DLL” związanych z zarządzaniem zewnętrznymi wersjami platformy. (miejsce na dysku jest tanie, czas klienta jest cenny).
Wreszcie rozwiązany!
Udało mi się uczynić framework „opcjonalnym” zamiast „wymaganym”.
Mam nadzieję, że to pomoże!
1) Kontynuuj wykonywanie, aby sprawdzić, czy w debugerze nie pojawił się żaden komunikat, taki jak „MyFramework.framework”, nie znaleziono. Jeśli tak jest, wykonaj tę dyskusję: Biblioteka OS X Framework nie została załadowana: `` Nie znaleziono obrazu '' Dla mnie ta odpowiedź zadziałała: https://stackoverflow.com/a/44796734/4060763
2) Upewnij się, że dodałeś pliki binarne w sekcji „Osadź pliki binarne”.
3) Upewnij się, że masz włączone podpisywanie struktur w sekcji fazy kompilacji.
4) Upewnij się, że osadzone struktury nie są dowiązaniami symbolicznymi.
5) Połączone frameworki można uczynić opcjonalnymi zamiast wymaganymi w fazie „Łączenie plików binarnych z bibliotekami”. To powie iOS, aby nie szukał tych frameworków podczas uruchamiania. Ale i tak musisz naprawić błędy, aby używać tych frameworków!
6) Sprawdź, czy wszystkie wpisy w serwisie info.plist są prawidłowe. W moim przypadku używałem pliku info.plist na Maca dla iOS. Szukał pliku xib, którego nie było w projekcie iOS.
7) Po każdej takiej zmianie wyczyść i zbuduj. Jest to wymagane, ponieważ xcode nie kopiuje / nie zmienia tych plików, jeśli już istnieją.
8) Usuń aplikację z iPada, a następnie zainstaluj. Z tego samego powodu co w 7.
Guard Malloc
, aby być poprawnym. Czy ktoś wie, dlaczego naprawia awarię?
Aby odpowiedzieć na pierwotne pytanie „Co mogę zrobić, aby uzyskać więcej informacji o problemie?”, Ten wątek na forum Apple zawiera bardzo prostą wskazówkę: po prostu uruchom aplikację powodującą awarię poza XCode (tj. urządzenie). Spowoduje to utworzenie dziennika awarii zawierającego więcej szczegółów na temat tego, co się stało. Następnie możesz przejrzeć ten dziennik z menu XCode Window / Devices and Simulators -> View Device Logs.
Napotkałem ten sam problem z Xcode 11.3 i macOS Catalina 10.15.2. Aplikacja działała dobrze na urządzeniu, ale nie na symulatorze. Wygląda na to, że wystąpił problem z symulatorem i obejściem jest wyłączenie narzędzia Thread Sanitizer.
Zobacz: https://forums.developer.apple.com/message/397978#397978
Mam nadzieję że to pomoże.
Napotkałem błąd z tą samą sygnaturą (mój projekt był w Obj-C) i odkryłem, że zapomniałem połączyć się z odpowiednim frameworkiem. Komunikat o błędzie w dzienniku debugowania, który doprowadził do znalezienia błędu, to:
dyld: Nie znaleziono symbolu: _OBJC_CLASS _ $ _ SFSafariViewController
W przypadku mojego konkretnego błędu dodanie SafariServices.framework w Celach -> Fazy kompilacji -> „Połącz plik binarny z bibliotekami” rozwiązało problem. Chociaż prawdopodobnie nie masz tego samego konkretnego błędu i rozwiązania, przydatne jest sprawdzenie dziennika debugowania pod kątem wskazówek.
Miałem taką sytuację po aktualizacji Xcode do v10.2.1 i swift do v5.0. Jeśli używasz Carthage + RxSwift, nowy RxSwift używa RxRelay.framework
. Powinieneś przejść do swojego katalogu / Carthage / Build, znaleźć ten framework i pobrać go do swojego projektu. Nie zapomnij również dodać go do swojego carthage copy-frameworks
skryptu:
$(SRCROOT)/Carthage/Build/iOS/RxRelay.framework
Rozwiązane dzięki: https://stackoverflow.com/a/52550148/2493555
Jeśli używasz frameworka napisanego w Swift w aplikacji Objective-C, musisz dołączyć Swift toolchain do aplikacji, która używa frameworka.
Sposób, w jaki udało mi się to zrobić, polega na utworzeniu w aplikacji fikcyjnego pliku Swift, aby XCode rozpoznał go i odpowiednio dodał do projektu. Następnie możesz usunąć fikcyjny plik.
Chciałbym, żeby ktoś znał lepszy sposób na jawne dodanie swift do projektu obiektywnego c bez dodawania szybkiego pliku.
jeśli używasz frameworka budującego Carthage, po przeciągnięciu frameworka do swojego projektu, powinieneś dodać go do plików binarnych General / Embeded.
Znajduję właściwy sposób rozwiązania tego problemu.
Upewnij się, że AppleWWDRCA.cer
ustawiony jest domyślny tryb systemu, wtedy zadziała:
Miałem ten sam problem. Ustawienie „Zawsze osadzaj Swift Standard Libraries” na Tak w ustawieniach kompilacji mojego celu zadziałało.
Miałem podobny problem, który został rozwiązany przez brak specyfikacji uprawnień w plist (tak dziwne, jak to jest ...)
Próbowałem użyć AVCaptureDevice i właśnie się zawiesił podczas uruchamiania (moja aplikacja była bardzo minimalna)
Dodawanie -
Privacy - Camera Usage Description
aby info.plist
rozwiązać to za mnie.
Aby dodać do długiej listy spotkań z tym błędem, występuje on, gdy korzystam z XCode12.2 Beta 2 i wdrażam go na moim komputerze Mac z systemem MacOS 10.15.5 z celem wdrożenia ustawionym na MacOS 11.0. Taka sytuacja zdarzyła się, ponieważ podczas dodawania paska bocznego wypróbowywałem aplikację Mac Catalyst Tutorial . Przełączenie celu na MacOS 10.15.5 wyeliminowało błąd i poprawnie uruchomiło aplikację.
Naprawiłem błąd w moim projekcie.
1. Sprawdź inne wątki, gdy wystąpił błąd. Mój błąd dotyczy aparatu.
Właśnie miałem ten sam problem, a powód był taki, że odwołałem moje certyfikaty programisty i utworzyłem nowe za pomocą Xcode 10, po świeżej aktualizacji macOS Mojave (dla niektórych usunęło wszystkie dane logowania, a niektóre przestarzały certyfikaty pęku kluczy).
Wszystko, co musiałem zrobić, to usunąć zainstalowane aplikacje z mojego urządzenia i ponownie uruchomić je przez Xcode, aby zainstalować odpowiedni nowy profil obsługi administracyjnej na moim urządzeniu :)
Czasami zdarza się, gdy używasz struktur systemowych, które są dostępne tylko z późniejszej wersji systemu iOS niż wersja docelowa. Można to naprawić, oznaczając tę połączoną strukturę jako opcjonalną.
Na przykład projekt przeznaczony dla systemu iOS 11 i korzystający z funkcji AuthenticationServices dla systemu iOS 12 ulegnie awarii w systemie iOS 11 w opisany sposób.
Właściwie miałem problem z 11.3.1 i Thread Sanitizer był już wyłączony, jak wspomniano powyżej. W moim przypadku problem polegał na tym, że miałem różne wersje xCode w moim folderze aplikacji
/Applications/xcode11.3.1/Xcode.app
/Applications/xcode11.3/Xcode.app
/Applications/xcode10.1/Xcode.app
i
/Applications/Xcode.app - was 11.2
Zrozumienie, że system kompilacji domyślnie wygląda na plik /Applications/Xcode.app zajmuje mi 2 dni. Zatem przeniesienie wersji 11.3.1 do /Applications/Xcode.app w końcu rozwiązało problem
Również jeśli używasz niestandardowych frameworków, upewnij się, że ustawiłeś typ Mach-O na bibliotekę statyczną. Czytałem gdzieś, że IOS nie pozwala na dylib. W każdym razie to zadziałało dla mnie.
Doświadczyłem tego problemu tylko podczas pracy na prawdziwym urządzeniu (iPhone SE). Na symulatorze projekt działał zgodnie z oczekiwaniami.
Wypróbowałem wszystkie poprawki z tego wątku i stąd: Biblioteka OS X Framework nie została załadowana: `` Nie znaleziono obrazu '' Żaden z nich nie pracował dla mnie.
U 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 zawodzi, nie zapomnij go wypróbować.
Mam to posortowane według polecenia „pod install”.