Xcode游乐场被卡在“运行游乐场”或“启动模拟器”上而无法运行代码,该怎么办?


144

每次我创建一个新的游乐场以测试一些代码时,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

我在macOS Sierra 10.12上运行Xcode 8.0(8A218a)。

硬件
MacBook Pro(2012年中的13英寸)
2.5 GHz英特尔酷睿i5
4 GB 1600 MHz Ram DDR3

我环顾四周,但至少这些线程都没有提供答案:
https : //forums.developer.apple.com/thread/5902
https://github.com/jas/playground/issues/9

我已经尝试过的成功为零的事情:

  • 重新启动Xcode
  • 重新安装Xcode(降级为7.3,但由于这样做无济于事,我又升级回8.0)
  • 重启机器
  • 创建一个新的游乐场

您对如何解决此问题有任何想法吗?我是编程新手,热衷于学习Swift,但是Xcode实际上使它变得不可能...

预先感谢您,加油。


感谢您的快速答复。我之所以使用Playground,只是因为我实际上在Treehouse.com上有活跃的订阅,并且他们鼓励在测试新概念时使用Playground。
埃米尔·奥斯瓦尔德

1
我了解,但我的想法是,您“急于尝试学习Swift”,现在您陷于困境。如果您可以创建一个新的应用程序项目并运行它,则可以继续。现在,如果您也无法运行应用程序项目,那么您将面临更深层次的问题。:)
马特

确实是这样。谢谢您的投入,只要没有更好的解决方案,我就会按照您的建议进行。尽管如此,如果有人想出解决方案,我仍将保持该线程处于活动状态。
埃米尔·奥斯瓦尔德

2
我没有任何建议,@ EmilOsvald。我也可以报告这种情况在MacBook上也经常发生(并且在我使用iMac的时候也一直发生,所有具有最新更新的新机器也是如此)。您不要因为想要使用Playgrounds而感到不妥。从理论上讲,它们是很棒的产品,而当它们起作用时,它们就是。
伊利亚斯·卡里姆

1
在第一条注释之前(如果文本的第一行是注释),不能有空格,也不能有空行作为第一行。让我知道。
Daniel Springer

Answers:


191

Ans。切换到macOS平台

创建Playground时,默认情况下,它选择iOS平台并自动导入UIKit。UIKit一直崩溃并卡住。如果您的(练习)代码未使用UIKit,则可以切换到MacOS平台。作为主要的iOS和MacOS之间(不准确虽然)的区别是在了AppKit和UIKit。

在Xcode Playground的右上角,单击显示/隐藏实用程序->文件检查器->操场设置->平台-> macOS

请参阅以下屏幕截图: 在此处输入图片说明


4
将操场执行按钮设置为手动,这对我来说似乎很有效。他们会解决这个问题

2
谢谢,它在使用Foundation时很好用,正是我所需要的。我简直不敢相信Playgrounds有这么多错误……
Adrien Yvon

15
荒谬。3行代码(均不导入UIKit),我必须用google搜索。很多人会放弃并宣布Swift毫无用处。
詹姆斯·贝德福德

4
这对我不起作用。我正在使用Xcode 9.4.1(不是beta),并且必须不断重新启动Xcode。很la脚...
Michael Rogers

1
另外,如果游乐场足够大,则Cmd + Shift + Enter会停止工作。到底是谁编写了这个废话?孩子们在iPad上使用游乐场吗?
Robo Robok

70

我尝试了以下方法,它对我有用:

  1. 按下底部的“停止游乐场”按钮
  2. 删除第一条注释行,并使import语句成为第一行。导入上方无空格。
  3. 按下执行按钮

1
我发现在评论之前也不应该有空格-但是您可以在第一行添加评论。它的行上没有空线,也没有缩进。
Daniel Springer

3
我还要补充一下重新启动Xcode的需要。它似乎为我工作。
jeb_is_a_mess

26
为我工作。我不敢相信这个错误是多么荒谬。苹果应该感到羞耻。
gangelo

1
重新启动xcode是唯一对我
有用的方法

1
太棒了 我尝试退出xcode,清除派生数据等,但是除此之外没有任何效果。虽然我已经在第一行导入了!
Shivam Pokhriyal,

58

就我而言,Xcode 8.3.2在我按以下步骤尝试时可以工作:

  1. 文件->关闭“ Name.playground”
  2. 文件->关闭游乐场
  3. 退出Xcode
  4. 重新打开Xcode

2
除了我以外,我还提供其他一些东西,使用现代XCode的人是否对这种失败的根本原因有见识?事实证明,这是最好的非侵入式解决方案,但是,我不会将任何解决问题的方法视为解决方案。游乐场标题中的注释是否真的与问题有关?苹果对此有何看法?
truedat101 '18

这对我有用,并且在我的打印语句之前删除了空行。
FromTheStix

2
嗯,解决IDE问题的方法很糟糕。
PruitIgoe

同意,这是超级la脚。
伊利亚斯·卡里姆

51

即使在Xcode关闭之后,Buggy Simulator的主要过程仍在工作。所以这是步骤:

  1. 退出Xcode;
  2. com.apple.CoreSimulator.CoreSimulatorService在活动监视器中终止进程;
  3. 启动Xcode并运行您的Playground。

1
我比其他答案更喜欢这个答案,因为它使问题变得更加重要
制作

1
我每次都需要这样做吗?
Vaibhav Saran

20

以我的经验,您应该:

  1. 按住以下按钮,以防止Swift游乐场刷新:按住游乐场左下角的►箭头,然后选择“手动运行”
  2. 退出Xcode
  3. 重新启动Xcode

效果很好。


4
但是,不是在Playground编写代码时就执行代码的全部目的吗?
saphryn18年

16

我已取消第一行的评论。它为我解决了。确保关闭并重新启动Xcode并从Activity Monitor强制退出com.apple.coresimulator后再尝试


1
在XCode 8.2.1上,这对我有用。一旦我删除了有关游乐场的第一行注释,它就会很快运行。我不必强制退出模拟器。
jessi

感谢@Fiveagle的回答。确实,我不得不强制coresimulator进程删除了第一行,因此“导入UIKit”是第一行。重新启动XCode可以解决问题,但是第一次编译需要一段时间。
伊夫·鲍美斯

13

添加导入PlaygroundSupport为我解决了问题:)


2
有趣。你从哪里得到的?
Daniel Springer

如果它像您所说的那样有效,那么您会认为开发人员默认情况下会将其包含在内。我将对此进行试验。谢谢!
saphryn18年

6

您可以切换到手动处理。它为我工作。 屏幕截图


3

确保最终杀死活动监视器中的com.apple.Core.Simulator.CoreSimulatorService进程之前,先杀死活动监视器中的xcode 。我尝试杀死进程多次,但我意识到如果xcode仍在后台活动中运行,则即使您刚刚杀死com.apple.CoreSimulator.CoreSimulatorService进程也会再次弹出。


2

我遇到了同样的问题,我所做的就是打开“协助”编辑器,即使关闭了“协助”编辑器,一切也可以正常使用!不要问为什么这是反复试验。希望这个能对您有所帮助


这实际上是一个好主意。由于“播放/停止”按钮不会搅动进程或强制刷新,因此我想您可以考虑将“助理编辑器”切换为“开”和“关”,以代替“播放”按钮。太棒了:))。
saphryn18年

0

运行一会儿后,您将看到错误消息,然后转到查看>调试区域>激活控制台,然后再次播放对我有用


1
什么时候 5分钟?一天?
Daniel Springer

从5到15分钟,可能是在出现此问题几周后,我改用SSD并升级到16GB RAM内存,并且解决了该问题,如日夜改变
CrtlBreak

0

检查iCloud存储计划!

如果您有一个,它将不断同步整个计算机,包括Desktop和Document文件夹。而是尝试在主文件夹中创建一个“本地文件”文件夹(command + shift + h),并将您的Playground项目保存在该文件夹中,该项目不会同步到iCloud。

这对我有用,我希望这对您也有用!:)


这实际上为我工作。任何遇到此问题的人都应该尝试一下。
Peter Schorn


0

就我而言,问题是用户引起的。我显示了助理编辑器,但未选择实时取景。确保它看起来像这样:

即时取景

而且不是这样的:

在此处输入图片说明


0

就像我的情况一样,当您定义一个函数但忘记了调用它时,也会发生这种情况?


0

好像这个问题没有足够的答案,我将为陷入困境的Swift游乐场问题提供“解决方案”:

我遇到的一个解决方案对我来说效果很好(因此,我不必重新启动Xcode):

killall launchd_sim

这将导致旋转的“ Running Playground ...”消失,您可以触发新的执行。请注意:下一次执行将加速launchd_sim,所有这些子进程将再次启动。最好仅杀死相关的子进程。但到目前为止我还没有找到。

但是,只有在不并行使用iOS模拟器时,我才这样做,因为该launchd_sim过程是的子过程Simulator


0

我删除了派生数据并清理了构建文件夹。这对我有用。我在同一台机器上面对Xcode 11.2.1和Xcode 10.1。


-1

我面临着同样的问题,但是在谷歌搜索和试验了一下之后,我发现必须始终import UIKit在导入任何其他库之前。


-1

首先,删除内置的注释行。

然后,即使您重新输入第一行注释,它也仍然有效。 在此处输入图片说明


-1

对我有用的最后一个技巧:确保没有iOS模拟器正在运行。他们彼此冲突。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.