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.

Emil Osvald
źródło
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

PANKAJ VERMA
źródło
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
Aaeb
źródło
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
Khoa Vo
źródło
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.
dbv
źródło
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.

ziarno
źródło
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

Fiveagle
źródło
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 :)

SiBC
źródło
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

Sandhu
źródło
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ś.

Asad Abbas
źródło
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

Farisk
źródło
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

CrtlBreak
źródł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ż! :)

Sree Ramana
źródło
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

Mozahler
źródło
0

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

msimons
źródło
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.

pd95
źródło
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.

pawan_kumar
źródło
-1

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

Graisorn Soisakhoo
źródło
-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

Harry McGovern
źródło
-1

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

ahbou
źródło