xCode 8.x 因“GameScene.sks”文件而崩溃

Posted

技术标签:

【中文标题】xCode 8.x 因“GameScene.sks”文件而崩溃【英文标题】:xCode 8.x crashes with "GameScene.sks" file 【发布时间】:2017-04-16 04:40:22 【问题描述】:

我已经下载了 macOS Sierra 10.12 并将其放入 VMWare 机器中。一切运行良好,但在 xCode 中,使用 SpriteKit 时,每当我尝试打开 GameScene.sks 文件(将原点 (0, 0) 放在底部,就像在 xCode 8 之前一样)时,程序崩溃马上。

使用 VMWare Pro 12;用 xCode 8.1 和 8.2 Beta 都试过了,同样的崩溃。

我知道我的情况很多,但是这没有解决方案令人讨厌。 我在非常深入的谷歌搜索中找到了this,但该解决方案对我来说不是解决方案,因为 VMware 不允许您将 gpu 与 VM 一起使用(我有 intel hd 4600 + gtx 960)。

我可以正常打开action sks文件。好像只有GameScene.sks 让我崩溃了,所以:

有办法解决吗? 如果没有,我可以编辑 GameScene.sks 文件还是只在没有 xCode 的情况下将原点放在底部? 如果两者都不是,我可以在没有开发者许可的情况下下载以前的 xCode 版本吗?

好吧,我能做的最后一件事就是在我的电脑上进行双启动,但我认为这并不像看起来那么容易

【问题讨论】:

附带说明... .sks 在场景编辑器中的文件编辑速度很慢、有问题、有问题并且充满了跳圈,即使是在*** Apple 电脑上,在再会。我是一名设计师,并且倾向于进行可视化编辑……但我正在使用 SpriteKit 编写代码……而且我并不孤单。这就是场景编辑器的糟糕程度。 Apple 应该制作一个单独的应用程序(在 Xocde 之外)用于编辑 SceneKit、SpriteKit 及其同胞 GameplayKit 的场景和粒子。将它们捆绑在一起充其量是荒谬的。 是的……作为一个 ios 用户,我认为开发它很容易和简单,但我的前 10 个小时是在谷歌上搜索一个似乎自 xCode 6 以来发生的未解决问题。你可以看到在 Appstore 上,很多人都给这个 xCode 8 打了一星。第一次尝试很糟糕,但我会努力克服这个问题。 场景编辑器绝对没有 Confused 所说的那么糟糕。 XCode 仅使用 mac 硬件,因此 VM 和 hackintoshes 更容易崩溃。找一个拥有真正 Mac 的人,把你的项目交给他们,看看它是否也会在他们身上崩溃。 我是在阅读您的评论之前完成的。请朋友在应用商店下载xCode 8.1,新建一个项目并打开GameScenes.sks: Crash! @Lucas 完全同意 Confused。 Apple 与不同硬件的斗争有时会忘记处理警告用户不要将 3d 部分 GPU 与 Xcode 一起使用的错误(项目崩溃可能意味着丢失代码行..),如果您有 SKS 崩溃和不同的硬件尝试启动也打开开发人员工具 - 仪器,您可以看到其他错误(透明工具..)。我对您的特定情况的个人建议是在代码中做所有事情,如果您必须使用发射器或 ODT,请下载 XCode 7,将其重命名为 Xcode7.app 并将其仅用于这些 SKS 【参考方案1】:

Xcode 8

我终于找到了解决这个问题的方法! 您必须重新对 Xcode 8 和它的组件进行代码签名才能使其工作。

其中一些应用程序被标记,因此它们拒绝加载未经 Apple 签名的库。 Nvidia Web Driver 未由 Apple 签名,因此未加载,导致您描述的行为。 (见this thread)

我只使用了 nVidia GPU,它导致了这个问题 - 至少对我来说是这样。 退出 XCode 并在终端中一一运行这些命令:

sudo codesign -f -s - /Applications/Xcode.app/Contents/Applications/Instruments.app/Contents/MacOS/Instruments
sudo codesign -f -s - /Applications/Xcode.app/Contents/Applications/FileMerge.app/Contents/MacOS/FileMerge
sudo codesign -f -s - /Applications/Xcode.app/Contents/Applications/Application\ Loader.app/Contents/MacOS/Application\ Loader 
sudo codesign -f -s - /Applications/Xcode.app/Contents/Applications/Accessibility\ Inspector.app/Contents/MacOS/Accessibility\ Inspector 
sudo codesign -f -s - /Applications/Xcode.app/Contents/MacOS/Xcode 

最后一个命令对我来说需要很长时间才能完成,所以我通过退出终端终止了该过程。即便如此,它还是成功了,下次我启动 XCode 时,出现了一些弹出窗口,例如:Xcode 想要使用存储在钥匙串中的信息。我为每个对话框选择“始终允许”。 (下次打开 XCode 时这些对话框不会出现)

毕竟我从项目导航器中选择了 GameScene.sks 文件,XCode 没有崩溃。

从那时起,它运行良好! :)

如果您将 XCode 8 升级到更新的 Xcode 8 版本,则必须重做上述步骤!据报道,这种方法在 XCode 9 beta 中不起作用,如果它发生变化,将更新这篇文章..

Xcode 9

如果您有 hackintosh,修复这些 nVidia 错误的最简单方法是安装 NVWebDriverLibValFix.kext。如果您使用 Clover 作为引导加载程序,请将下载的 kext 文件放在 EFI/EFI/Clover/kexts/Other 中。使用 KextBeast 安装 kext 也应该可以,但我更喜欢使用 Clover 进行 kext 注入。

【讨论】:

这是正确的答案,先生,恭喜您找到答案! balazs630 -> 除了粒子系统预览(在 sks 文件和独立 scnp 文件中)之外,您的修复对所有事情都非常有效。什么都没有出现。你知道如何解决这个问题吗? 我的一个项目中有一个 SpriteKit 粒子文件(发射器),它非常适合预览。如果预览有效,您是否在另一台 Mac 上检查了这个 Xcode 项目? 是的!有效!我的意思是,它在 xcode 9 beta 2 中不起作用,但它在 xcode 8 中起作用!哇!我不确定这是 xcode 9 中的错误还是什么(因为它是预发布版),但它在 xcode 8 中有效。谢谢你的好先生! 我试过这个,但它对我不起作用。然后我在 Reddit 上找到了一篇关于启用主板上的集成显卡可以修复它的帖子。所以我这样做了,现在它可以工作了。【参考方案2】:

我无法帮助您解决崩溃问题,但您可以在这样的代码中更改锚点...

GameScene.swift

override func viewDidLoad()
    self.anchorPoint = CGPoint(0,0)

【讨论】:

出于某种原因,xCode 说“方法不会覆盖其超类中的任何方法。”代码:self.anchorPoint = CGPoint(x: 0, y: 0) 完整代码:class GameScene: SKScene var Ground = SKSpriteNode() var Ghost = SKSpriteNode() override func viewDidLoad() self.anchorPoint = CGPoint(x: 0, y: 0) 对不起,不要使用 viewDidLoad 的覆盖,这是在 UIKit 视图中。只需在需要之前将设置设置为anchorPoint 即可。 使用didMove(to:)【参考方案3】:

对我有用(我在将 macOS 升级到 Mojave 以及其中包含的 Xcode 后遇到了问题)是禁用所有 Xcode 插件!

:-)

【讨论】:

@Mojtaba Hosseini 我没有安装任何插件,所以我很茫然。

以上是关于xCode 8.x 因“GameScene.sks”文件而崩溃的主要内容,如果未能解决你的问题,请参考以下文章

Xcode 9:SKEditorReference不允许动画?

将发射器节点添加到 sks 文件并使用它 - XCode 6.0 + swift

如何使用 Swift 2 和 Xcode 7 读取 Playground 文本资源文件

创建一个精灵并给它一个自定义类

尝试在 vmware MAC High Sierra 上的 xcode 9.2 中打开游戏场景,但 xcode 意外关闭

如何在 SpriteKit 中将磁贴更改为另一个(或空白)?