Игровая площадка Xcode застревает на «Запуск игровой площадки» или «Запуск симулятора» и не запускает код, что делать?

154

Каждый раз, когда я создаю новую площадку для тестирования кода, Xcode зависает и не запускает код. Он просто представляет оператор «Запуск игровой площадки» или «Запуск симулятора» в верхней части экрана со значком загрузки, который многообещающе вращается рядом с ним, но ничего не происходит. Иногда это продолжается бесконечно, а иногда Xcode останавливается и выводит на консоль:

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

Я использую Xcode 8.0 (8A218a) на macOS Sierra 10.12.

Аппаратное обеспечение :
MacBook Pro (13 дюймов, середина 2012 г.)
2,5 ГГц Intel Core i5
4 ГБ ОЗУ 1600 МГц DDR3

Я осмотрелся, но, по крайней мере, ни один из этих потоков не дал ответа:
https://forums.developer.apple.com/thread/5902
https://github.com/jas/playground/issues/9

То, что я уже пробовал безуспешно:

  • Перезапуск Xcode
  • Переустановка Xcode (понижен до 7.3, но, поскольку это не помогло, я обновился до 8.0)
  • Перезагрузка машины
  • Создание новой детской площадки

Есть идеи, как решить эту проблему? Я новичок в программировании и с нетерпением пытаюсь изучить Swift, но Xcode делает это практически невозможным ...

Заранее спасибо, ура.

Эмиль Освальд
источник
Спасибо за ваш быстрый ответ. Я использую игровую площадку просто потому, что у меня есть активная подписка на Treehouse.com, и они поощряют использование игровой площадки при тестировании новых концепций.
Эмиль Освальд
1
Я понимаю, но я думаю, что вы «с нетерпением пытаетесь выучить Swift», а сейчас застряли. Если вы можете создать новый проект приложения и запустить его, можно продолжить. Теперь, если вы также не можете запустить проект приложения, у вас есть более серьезные проблемы. :)
Мэтт
Это определенно правда. Спасибо за ваш вклад, мат, я сделаю так, как вы предложили, если нет лучшего решения. Тем не менее, я все равно буду поддерживать эту тему в активном состоянии на случай, если кто-то придумал решение.
Эмиль Освальд
2
У меня нет советов, @EmilOsvald. Я могу сообщить, что это часто случается и на моем MacBook (и происходило все время, когда я использовал iMac, все новые машины с последними обновлениями). Вы не должны чувствовать себя виноватыми из-за того, что хотите использовать игровые площадки. Теоретически они представляют собой отличный продукт, а когда они работают, то они прекрасны.
Ilias Karim
1
Перед первым комментарием не должно быть пробелов (если первая строка текста является комментарием) или пустой строки в качестве первой. Дайте мне знать.
Дэниел Спрингер,

Ответы:

205

Ответ Перейти на платформу macOS

Когда вы создаете площадку для игр, по умолчанию она выбирает платформу iOS и автоматически импортирует UIKit. Это UIKit, который постоянно дает сбой и зависает . Если ваш (практический) код не использует UIKit, вы можете переключиться на платформу MacOS . Как основная разница (не точно , хотя) между прошивкой и MacOS в AppKit и UIKit.

В правом верхнем углу игровой площадки Xcode нажмите показать / скрыть Утилиты -> инспектор файлов -> Настройка игровой площадки -> Платформа -> macOS

См. Снимок экрана ниже: введите описание изображения здесь

ПАНКАЙ ВЕРМА
источник
4
Это, похоже, сработало для меня вместе с настройкой кнопки выполнения на игровой площадке вручную.
Исправят
3
Спасибо, он хорошо работает при использовании Foundation, именно то, что мне нужно. Я не могу поверить, что на игровых площадках так много ошибок ...
Адриан Ивон
19
Смешной. 3 строки кода (ни одна из которых не импортирует UIKit), и я должен это погуглить. Многие люди просто сдались бы и объявили бы Swift бесполезным.
Джеймс Бедфорд
5
У меня это не работает. Я использую Xcode 9.4.1 (не бета-версию), и мне приходится постоянно перезапускать Xcode. Довольно хромой ...
Майкл Роджерс
1
Кроме того, если игровая площадка становится достаточно большой, Cmd + Shift + Enter перестает работать. Кто, черт возьми, запрограммировал эту хрень? Дети используют игровые площадки на iPad?
Robo Robok
71

Я пробовал следующее, и это сработало для меня:

  1. нажмите на нижнюю кнопку "остановить детскую площадку"
  2. удалите первую строку комментария и сделайте оператор импорта первой строкой. нет места над импортом.
  3. нажмите кнопку выполнения
Aaeb
источник
1
Я обнаружил, что перед комментарием не должно быть пробелов, но вы можете поместить комментарий в первой строке. Ни пустой строки перед ней, ни отступов перед ней, в ее строке.
Дэниел Спрингер,
3
Я бы добавил к этому необходимость перезапуска Xcode. Мне кажется, это работает.
John Doe
27
Работал у меня. Не могу поверить, насколько нелепа эта ошибка. Apple должно быть стыдно.
gangelo
1
перезапуск xcode был единственным, что сработало для меня
Джордж Филиппакос
1
Потрясающие. Я попытался выйти из xcode, очистить производные данные и т.д., но ничего не сработало, кроме этого. Хотя у меня импорт на первой строчке уже был!
Шивам Похриял
60

В моем случае Xcode 8.3.2 он работает, когда я пытаюсь выполнить следующие шаги:

  1. Файл -> Закройте "Name.playground"
  2. Файл -> Закрыть площадку
  3. Выйти из Xcode
  4. Повторно открыть Xcode
Кхоа Во
источник
2
Предлагая что-то помимо меня, может ли кто-нибудь, кто использует современный XCode, понять основную причину этого сбоя? Оказывается, это лучший неинвазивный обходной путь, однако я бы не стал рассматривать ничего, кроме решения проблемы, как решение. Действительно ли комментарии в шапке площадки имеют отношение к проблеме? А что Apple говорит о причине?
truedat101 06
Это сработало для меня вместе с удалением пустой строки перед моим оператором печати.
FromTheStix
3
Угу, какой дерьмовый способ обойти проблему IDE.
PruitIgoe
Согласен, это супер хромой.
Ilias Karim
52

Основной процесс Buggy Simulator все еще работает даже после закрытия Xcode. Итак, вот шаги:

  1. Выйти из Xcode;
  2. Убить com.apple.CoreSimulator.CoreSimulatorServiceпроцесс в Activity Monitor;
  3. Запустите Xcode и запустите игровую площадку.
dbv
источник
1
Мне нравится этот ответ больше , чем другие ответы , потому что он получает больше к сердцу дела
корабль
1
Мне нужно делать это каждый раз?
Вайбхав Саран
20

По моему опыту, вам следует:

  1. Предотвратите обновление игровой площадки Swift, удерживая: стрелку ► в нижней левой части игровой площадки и выбрав «Запустить вручную»
  2. Выйти из Xcode
  3. Перезапустить Xcode

Работает очень хорошо.

зерно
источник
4
Но разве весь смысл Playground не в том, чтобы запускать ваш код в том виде, в каком он написан?
saphryn
16

Я отменил комментарий к первой строке. Это решило для меня. Обязательно попробуйте его после закрытия и перезапуска Xcode и принудительного выхода из com.apple.coresimulator из монитора активности.

Fiveagle
источник
1
В XCode 8.2.1 это сработало для меня. Как только я удалил первый комментарий о детских площадках, он заработал быстро. Мне не пришлось принудительно выходить из симулятора.
jessi
Благодаря ответу @Fiveagle. Мне действительно пришлось принудительно завершить процесс симулятора ядра, удалить первые строки, чтобы первая строка была «import UIKit». И перезапуск XCode сделал свое дело, но первая компиляция заняла некоторое время.
Yves Baumes
14

Добавление import PlaygroundSupport решило проблему для меня :)

SiBC
источник
2
Интересно. Откуда вы это взяли?
Дэниел Спрингер,
Если это так эффективно, как вы говорите, можно подумать, что разработчики включили бы это по умолчанию. Я поэкспериментирую с этим. Благодарность!
saphryn
6

Вы можете перейти на ручную обработку. У меня это сработало. снимок экрана

Сандху
источник
3

Убедитесь, что вы уничтожили xcode в мониторе активности, прежде чем в конечном итоге убить процесс com.apple.CoreSimulator.CoreSimulatorService в мониторе активности. Я пытался убить процесс несколько раз и понял, что если xcode все еще работает в фоновом режиме, то процесс com.apple.CoreSimulator.CoreSimulatorService снова появится, даже если вы его просто убили.

Асад Аббас
источник
2

У меня была та же проблема, все, что я сделал, это открыл редактор помощи, и у меня все работает нормально, даже когда я закрыл редактор помощи! Не спрашивайте, почему это было методом проб и ошибок. Надеюсь, что это поможет вам

Фариск
источник
На самом деле это отличная идея. Поскольку кнопка воспроизведения / остановки не влияет на процесс и не вызывает обновления, я думаю, вы можете подумать о включении и выключении помощника редактора как о замене кнопки воспроизведения, lol. Потрясающие :)).
saphryn
1

Я использую Xcode 10.2, и у меня такая же проблема. Так что обычно просто используйте Online Swift Playground

Это служит моим целям! :-)

DialDT
источник
1

После нескольких часов работы над этим я понял, что случайно удалил эту ОЧЕНЬ важную строку, которая позволяет тестировать элементы UIKit перед тем, как передать мою игровую площадку на git:

// Present the view controller in the Live View window
PlaygroundPage.current.liveView = MyViewController()

Facepalm. Надеюсь, это поможет кому-то выдергивать волосы на несколько часов.

Apunn
источник
1

Для меня проблема заключалась в том, что MyPlayground синхронизировался с iCloud . Xcode сохраняет ваши файлы каждые несколько секунд, что приводит к состояниям «не отвечает».

Итак, есть простое решение - просто перейдите по ссылке:

Системные настройки - Apple ID - Приложения на этом Mac, использующие iCloud - iCloud Drive - Параметры - А затем снимите флажок «Игровая площадка»

Эта маленькая уловка помогает решить замороженный «Бег».

Запретить синхронизацию игровых площадок

Витя Шурапов
источник
0

через некоторое время вы увидите сообщение об ошибке, затем вы перейдете в режим просмотра> область отладки> активировать консоль, а затем снова сыграть, сработало для меня

CrtlBreak
источник
1
Какое время? 5 минут? День?
Дэниел Спрингер,
от 5 до 15 минут, возможно, через несколько недель после этой проблемы я перешел на SSD и обновил оперативную память до 16 ГБ, и ее решили, например, дневное и ночное изменение
CrtlBreak
0

Проверьте тарифный план хранилища iCloud!

Если он у вас есть, он постоянно синхронизирует весь компьютер, включая папки рабочего стола и документов. Вместо этого попробуйте создать папку «Локальные файлы» в своей домашней папке (command + shift + h) и храните там свои проекты Playground, где они не синхронизируются с iCloud.

Это сработало для меня. Надеюсь, это сработает и для вас! :)

Шри Рамана
источник
Это действительно сработало для меня. Любой другой, у кого есть эта проблема, действительно должен попробовать.
Питер Шорн
0

В моем случае проблема была вызвана пользователем. У меня был отображен помощник редактора, но просмотр в реальном времени не был выбран. Убедитесь, что это выглядит так:

Прямая трансляция

А не так:

введите описание изображения здесь

Мозахлер
источник
0

Также происходит, как и в моем случае, когда вы определили функцию, но забыли ее вызвать?

мсимоны
источник
0

Как будто на этот вопрос не было достаточно ответов, я предложу свое «решение» застрявшей проблемы игровых площадок Swift:

Единственное решение, с которым я столкнулся, отлично работает для меня (поэтому мне не нужно перезапускать Xcode):

killall launchd_sim

Это заставит вращающуюся площадку "Running Playground ..." исчезнуть, и вы сможете запустить новое выполнение. Имейте в виду: следующее выполнение будет запущено, launchd_simи все эти дочерние процессы снова начнутся. Вероятно, лучше всего было бы убить только соответствующий дочерний процесс. Но пока не нашел.

Но я делаю это только тогда, когда я не использую симуляторы iOS параллельно, так как launchd_simпроцесс является дочерним процессом Simulator.

pd95
источник
0

Я удалил производные данные и очистил папку сборки. У меня это работает. Я столкнулся с Xcode 11.2.1 и Xcode 10.1 на одном компьютере.

pawan_kumar
источник
-1

Я столкнулся с той же проблемой, но после того, как погуглил и немного поэкспериментировал, я обнаружил, что нужно всегда import UIKitперед импортом любых других библиотек.

Graisorn Soisakhoo
источник
-1

Во-первых, удалите встроенную строку комментария.

Тогда, даже если вы снова вставите комментарий в первой строке, он все равно будет работать. введите описание изображения здесь

Гарри Макговерн
источник
-1

И последний совет, который мне подходит: убедитесь, что симулятор iOS не запущен. Они конфликтуют друг с другом.

ахбоу
источник