Plac zabaw Xcode utknął na „Uruchomionym placu zabaw” lub „Uruchamianie symulatora” i nie uruchamia kodu, co robić?


144

Za każdym razem, gdy tworzę nowy plac zabaw w celu przetestowania kodu, Xcode utknie i nie uruchomi kodu. Po prostu przedstawia komunikat „Uruchomiony plac zabaw” lub „Uruchomienie symulatora” u góry ekranu z obiecująco obracającą się obok niego ikoną ładowania, ale nic się nie dzieje. Czasami trwa to w nieskończoność, a czasami Xcode zatrzymuje się i wyświetla to na konsoli:

Playground execution failed: error: Couldn't lookup symbols:
__swift_FORCE_LOAD_$_swiftCoreImage 
__swift_FORCE_LOAD_$_swiftFoundation 
_playground_log_hidden 
_playground_logger_initialize 
_playground_log_postprint 

thread #1: tid = 0xc0cd0, 0x000000010ea7c3c0 MyPlayground`executePlayground, queue = 'com.apple.main-thread', stop reason = breakpoint 1.2

frame #0: 0x000000010ea7c3c0 MyPlayground`executePlayground
frame #1: 0x000000010ea7b9c0 MyPlayground`__37-[XCPAppDelegate enqueueRunLoopBlock]_block_invoke + 32 
frame #2: 0x000000010f59625c CoreFoundation`__CFRUNLOOP_IS_CALLING_OUT_TO_A_BLOCK__ + 12
frame #3: 0x000000010f57b304 CoreFoundation`__CFRunLoopDoBlocks + 356
frame #4: 0x000000010f57aa75 CoreFoundation`__CFRunLoopRun + 901
frame #5: 0x000000010f57a494 CoreFoundation`CFRunLoopRunSpecific + 420
frame #6: 0x0000000114985a6f GraphicsServices`GSEventRunModal + 161
frame #7: 0x0000000110124f34 UIKit`UIApplicationMain + 159
frame #8: 0x000000010ea7b6e9 MyPlayground`main + 201
frame #9: 0x0000000112ad268d libdyld.dylib`start + 1
frame #10: 0x0000000112ad268d libdyld.dylib`start + 1

Używam Xcode 8.0 (8A218a) na macOS Sierra 10.12.

Sprzęt :
MacBook Pro (13 ", połowa 2012 r.)
2,5 GHz Intel Core i5
4 GB 1600 MHz RAM DDR3

Rozejrzałem się, ale przynajmniej żaden z tych wątków nie dostarczył odpowiedzi:
https://forums.developer.apple.com/thread/5902
https://github.com/jas/playground/issues/9

Rzeczy, które już wypróbowałem bez powodzenia:

  • Ponowne uruchamianie Xcode
  • Ponowna instalacja Xcode (obniżona do wersji 7.3, ale ponieważ to nie pomogło, powróciłem do wersji 8.0)
  • Restartowanie maszyny
  • Tworzenie nowego placu zabaw

Masz jakieś pomysły, jak rozwiązać ten problem? Jestem nowy w programowaniu i chętnie próbuję nauczyć się Swift, ale Xcode sprawia, że ​​jest to praktycznie niemożliwe ...

Z góry dziękuję, pozdrawiam.


Dziękuję za szybką odpowiedź. Korzystam z placu zabaw tylko dlatego, że faktycznie mam aktywną subskrypcję na Treehouse.com i zachęcają do korzystania z placu zabaw podczas testowania nowych koncepcji.
Emil Osvald,

1
Rozumiem, ale myślę, że „z niecierpliwością próbujesz nauczyć się Szybkiego” i teraz utknąłeś. Jeśli możesz utworzyć nowy projekt aplikacji i go uruchomić, możesz kontynuować. Teraz, jeśli nie możesz również uruchomić projektu aplikacji, masz głębsze problemy. :)
mat.

To z pewnością prawda. Dziękuję za przesłanie wiadomości, zrobię to, co zasugerowałeś, o ile nie ma lepszego rozwiązania. Niemniej jednak będę nadal utrzymywać ten wątek aktywny na wypadek, gdyby ktoś znalazł rozwiązanie.
Emil Osvald

2
Nie mam tu rady, @EmilOsvald. Mogę zgłosić, że zdarza się to często również na moim MacBooku (i zdarzało się to cały czas, gdy korzystałem również z komputerów iMac, wszystkie nowe komputery z najnowszymi aktualizacjami). Nie powinieneś czuć się winny chęci korzystania z placów zabaw. W teorii są świetnym produktem, a kiedy działają, są.
Ilias Karim

1
Nie powinno być spacji przed pierwszym komentarzem (jeśli pierwsza linia tekstu jest komentarzem) ani pustej linii jako pierwszej linii. Daj mi znać.
Daniel Springer

Odpowiedzi:


191

Ans. Przejdź na platformę macOS

Podczas tworzenia Playground domyślnie wybiera platformę iOS i automatycznie importuje UIKit. To UIKit, który ciągle się zawiesza i blokuje . Jeśli Twój (ćwiczeniowy) kod nie korzysta z UIKit, możesz przejść na platformę MacOS . Jako główną (choć nie dokładna) różnicy między iOS i MacOS jest zestaw klas AppKit i UIKit.

W prawym górnym rogu Xcode Playground kliknij Pokaż / ukryj Narzędzia -> Inspektor plików -> Ustawienia placu zabaw -> Platforma -> macOS

Zobacz zrzut ekranu poniżej: wprowadź opis obrazu tutaj


4
Wydawało się, że działa to dla mnie wraz z ustawieniem przycisku uruchamiania na placu zabaw na ręczne. Czy kiedykolwiek to naprawią, to po prostu wydaje się trochę tandetne
hoboBob

2
Dzięki temu działa dobrze podczas używania Foundation, dokładnie tego, czego potrzebowałem. Nie mogę uwierzyć, że na placach zabaw jest tyle błędów ...
Adrien Yvon

15
Śmieszny. 3 linie kodu (z których żaden nie importuje UIKit) i muszę to wygooglować. Wiele osób po prostu by się poddało i uznało Swift za bezużytecznego.
James Bedford,

4
To nie działa na mnie. Używam Xcode 9.4.1 (nie wersji beta) i muszę ciągle restartować Xcode. Całkiem kiepski ...
Michael Rogers,

1
Ponadto, jeśli plac zabaw stanie się wystarczająco duży, Cmd + Shift + Enter przestanie działać. Kto do cholery zaprogramował to gówno? Dzieci korzystające z placów zabaw na iPadzie?
Robo Robok

70

Wypróbowałem następujące i zadziałało:

  1. naciśnij dolny przycisk „zatrzymaj plac zabaw”
  2. usuń pierwszą linię komentarza i umieść instrukcję importu w pierwszej linii. brak miejsca nad importem.
  3. naciśnij przycisk wykonania

1
Okazało się, że nie ma miejsca powinny być obecne przed komentarzu albo - ale może mieć komentarz jako pierwszej linii. Po prostu nie ma pustej linii przed nią, ani wcięcia przed nią, w jej linii.
Daniel Springer

3
Dodałbym do tego konieczność ponownego uruchomienia Xcode. Wydaje mi się, że to działa.
jeb_is_a_mess

26
Pracował dla mnie. Nie mogę uwierzyć, jak śmieszny jest ten błąd. Apple powinno się wstydzić.
gangelo

1
ponowne uruchomienie xcode było jedyną rzeczą, która działała dla mnie
George Filippakos

1
Niesamowite. Próbowałem wyjść z xcode, wyczyścić dane pochodne itp., Ale nic nie działało poza tym. Chociaż miałem już import w pierwszej linii!
Shivam Pokhriyal

58

W moim przypadku Xcode 8.3.2 działa, gdy próbuję wykonać poniższe czynności:

  1. Plik -> Zamknij „Name.playground”
  2. Plik -> Zamknij plac zabaw
  3. Zamknij Xcode
  4. Ponownie otwórz Xcode

2
Oferując coś poza mną, czy ktoś korzystający z nowoczesnego XCode ma wgląd w główną przyczynę tego niepowodzenia? Okazuje się, że jest to najlepsze nieinwazyjne rozwiązanie, jednak nie uważałbym niczego poza rozwiązaniem problemu za rozwiązanie. Czy komentarze w nagłówku placu zabaw rzeczywiście mają jakiś udział w problemie? A co Apple mówi o przyczynie?
truedat101

To zadziałało dla mnie wraz z usunięciem pustego wiersza przed instrukcją print.
FromTheStix

2
Ug, co za kiepski sposób na obejście problemu z IDE.
PruitIgoe

Zgoda, to jest super kiepskie.
Ilias Karim

51

Główny proces Buggy Simulator nadal działa nawet po zamknięciu Xcode. Oto kroki:

  1. Zamknij Xcode;
  2. Zabij com.apple.CoreSimulator.CoreSimulatorServiceproces w Monitorze aktywności;
  3. Uruchom Xcode i uruchom Playground.

1
Ta odpowiedź podoba mi się bardziej niż inne, ponieważ trafia bardziej do sedna sprawy
rzemiosło

1
Czy muszę to robić za każdym razem?
Vaibhav Saran

20

Z mojego doświadczenia wynika, że ​​powinieneś:

  1. Zapobiegaj odświeżaniu Szybkiego placu zabaw, przytrzymując: strzałkę ► w lewej dolnej części placu zabaw i wybierając opcję „Uruchom ręcznie”
  2. Zamknij Xcode
  3. Uruchom ponownie Xcode

Pracuje bardzo dobrze.


4
Ale czy nie chodzi o to, żeby Playground uruchamiał twój kod tak, jak jest napisany?
saphryn

16

Anulowałem komentarz do pierwszego wiersza. To rozwiązało dla mnie. Wypróbuj go po zamknięciu i ponownym uruchomieniu Xcode i wymuś zamknięcie com.apple.coresimulator z Monitora aktywności


1
Na XCode 8.2.1 to zadziałało. Po usunięciu pierwszego wiersza komentarza dotyczącego placów zabaw działał szybko. Nie musiałem na siłę wychodzić z symulatora.
jessi

Dzięki odpowiedzi @Fiveagle. Rzeczywiście musiałem wymusić zakończenie procesu coresymulatora, usunąć pierwsze wiersze, więc „import UIKit” jest pierwszą linią. Ponowne uruchomienie XCode sprawiło, że sztuczki, ale pierwsza kompilacja zajęła trochę czasu.
yves Baumes

13

Dodanie importu PlaygroundSupport rozwiązało problem za mnie :)


2
Ciekawy. Skąd to masz?
Daniel Springer

Jeśli jest tak skuteczny, jak mówisz, można by pomyśleć, że programiści mają to domyślnie włączone. Będę z tym eksperymentował. Dzięki!
saphryn

6

Możesz przejść do przetwarzania ręcznego. U mnie to zadziałało. zrzut ekranu


3

Upewnij się, że zabiłeś xcode w monitorze aktywności, zanim ostatecznie zabijesz proces com.apple.CoreSimulator.CoreSimulatorService w monitorze aktywności. Próbowałem kilkakrotnie zabić ten proces i zdałem sobie sprawę, że jeśli xcode nadal działa w tle, to proces com.apple.CoreSimulator.CoreSimulatorService wyskakuje ponownie, nawet gdy właśnie go zabiłeś.


2

Miałem ten sam problem, jedyne, co zrobiłem, to otworzyłem edytor pomocy i wszystko działa dobrze, nawet gdy zamknąłem edytor pomocy! Nie pytaj, dlaczego to była metoda prób i błędów. Mam nadzieję, że to ci pomoże


To naprawdę świetny pomysł. Ponieważ przycisk odtwarzania / zatrzymania nie pobudza procesu ani nie wymusza odświeżania, myślę, że możesz pomyśleć o włączaniu i wyłączaniu edytora asystenta jako zamienniku przycisku odtwarzania lol. Niesamowite :)).
saphryn

0

po jakimś uruchomieniu zobaczysz komunikat o błędzie a następnie przejdziesz do widoku> obszar debugowania> aktywuj konsolę i znowu graj mi zadziałało


1
Co to jest chwila? 5 minut? Dzień?
Daniel Springer

może od 5 do 15 min, po kilku tygodniach tego problemu przesiadłem się na SSD i zaktualizowałem do 16 GB pamięci RAM i rozwiązałem, jak zmiana dnia i nocy
CrtlBreak

0

Sprawdź plan przestrzeni dyskowej iCloud!

Jeśli go masz, stale synchronizuje cały komputer, w tym foldery Pulpit i Dokumenty. Zamiast tego spróbuj utworzyć folder „Pliki lokalne” w swoim folderze domowym (polecenie + shift + h) i zachowaj tam projekty Playground, gdzie nie są one synchronizowane z iCloud.

U mnie to zadziałało, mam nadzieję, że u Ciebie też! :)


To faktycznie zadziałało dla mnie. Każdy, kto ma ten problem, naprawdę powinien spróbować.
Peter Schorn


0

W moim przypadku problem był spowodowany przez użytkownika. Wyświetlony został asystent edytora, ale podgląd na żywo nie został wybrany. Upewnij się, że wygląda to tak:

Na żywo

A nie tak:

wprowadź opis obrazu tutaj


0

Zdarza się też, jak w moim przypadku, kiedy zdefiniowałeś funkcję, ale zapomniałeś jej wywołać?


0

Jakby na to pytanie nie było wystarczającej odpowiedzi, przedstawię moje „rozwiązanie” problemu zablokowanego w Swift placu zabaw:

Jedyne rozwiązanie, na które się natknąłem, które dobrze mi działa (więc nie muszę ponownie uruchamiać Xcode):

killall launchd_sim

Spowoduje to zniknięcie obracającego się „Running Playground…” i rozpoczęcie nowego wykonania. Bądź świadomy: następne wykonanie przyspieszy launchd_simi znowu wszystkie te procesy potomne. Prawdopodobnie najlepiej byłoby zabić tylko odpowiedni proces potomny. Ale do tej pory tego nie znalazłem.

Ale robię to tylko wtedy, gdy nie używam równolegle symulatorów iOS, ponieważ launchd_simproces jest procesem potomnym Simulator.


0

Usunąłem dane pochodne i wyczyściłem folder kompilacji. To działa dla mnie. Miałem do czynienia z Xcode 11.2.1 i Xcode 10.1 na tym samym komputerze.


-1

Miałem ten sam problem, ale po wygooglowaniu i trochę poeksperymentowaniu odkryłem, że zawsze należy import UIKitprzed zaimportowaniem jakichkolwiek innych bibliotek.


-1

Po pierwsze, usuń wbudowaną linię komentarza.

Następnie, nawet jeśli ponownie umieścisz komentarz w pierwszym wierszu, nadal działa. wprowadź opis obrazu tutaj


-1

Ostatnia wskazówka, która mi pasuje: upewnij się, że nie jest uruchomiony żaden symulator iOS. Kolidują ze sobą.

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.