保存屏幕截图时 Xcode 8.2 模拟器崩溃
Posted
技术标签:
【中文标题】保存屏幕截图时 Xcode 8.2 模拟器崩溃【英文标题】:Xcode 8.2 simulator crash when save screen shot 【发布时间】:2016-12-13 15:59:19 【问题描述】:XCode 8.2 更新后,每次保存模拟器屏幕截图总是让它崩溃。即使我重置内容和设置仍然崩溃。
我应该删除所有模拟器并重新安装它们吗?
更新:
8.2.1 也有同样的问题。 8.3 仅支持 Sierra。以下是崩溃报告:
Process: Simulator [48928]
Path: /Applications/Xcode.app/Contents/Developer/Applications/Simulator.app/Contents/MacOS/Simulator
Identifier: com.apple.iphonesimulator
Version: 10.0 (726.7)
Build Info: Indigo-726007000000000~5
Code Type: X86-64 (Native)
Parent Process: ??? [1]
Responsible: Simulator [48928]
User ID: 501
PlugIn Path: /Applications/Xcode.app/Contents/Frameworks/libswiftFoundation.dylib
PlugIn Identifier: libswiftFoundation.dylib
PlugIn Version: 3.0.2 (800.0.63)
Date/Time: 2016-12-13 23:43:25.860 +0800
OS Version: Mac OS X 10.11.6 (15G1108)
Report Version: 11
Anonymous UUID: 6E8AEBAE-0AF8-D350-66D6-57EC500D69F5
Sleep/Wake UUID: 6E017B49-1A38-4D3A-AB8F-FD9E200B6286
Time Awake Since Boot: 110000 seconds
Time Since Wake: 10000 seconds
System Integrity Protection: enabled
Crashed Thread: 0 Dispatch queue: com.apple.main-thread
Exception Type: EXC_BAD_ACCESS (SIGSEGV)
Exception Codes: EXC_I386_GPFLT
Exception Note: EXC_CORPSE_NOTIFY
Application Specific Information:
Performing @selector(saveScreenShot:) from sender NSMenuItem 0x7fd05a7329f0
Thread 0 Crashed:: Dispatch queue: com.apple.main-thread
0 libobjc.A.dylib 0x00007fff946adcdc lookUpImpOrForward + 135
1 libobjc.A.dylib 0x00007fff946a8591 objc_msgSend + 209
2 libsystem_blocks.dylib 0x00007fff9b684986 _Block_object_assign + 364
3 com.apple.Foundation 0x00007fff8dc21ca4 __copy_helper_block_ + 49
4 libsystem_blocks.dylib 0x00007fff9b68459d _Block_copy_internal + 325
5 libswiftFoundation.dylib 0x000000010178af95 _TToFC10Foundation12_SwiftNSData19enumerateByteRangesfT5usingFTSVVSC8_NSRangeGSpV10ObjectiveC8ObjCBool__T__T_ + 21
6 com.apple.Foundation 0x00007fff8db02a94 _NSWriteDataToFileWithExtendedAttributes + 742
7 com.apple.iphonesimulator 0x0000000100ffdc1e 0x100ff1000 + 52254
8 com.apple.iphonesimulator 0x0000000100ffdda9 0x100ff1000 + 52649
9 libsystem_trace.dylib 0x00007fff9a5bd07a _os_activity_initiate + 75
10 com.apple.AppKit 0x00007fff909d4dbd -[NSApplication sendAction:to:from:] + 460
11 com.apple.AppKit 0x00007fff909d4b57 -[NSMenuItem _corePerformAction] + 336
12 com.apple.AppKit 0x00007fff909d48b7 -[NSCarbonMenuImpl performActionWithHighlightingForItemAtIndex:] + 114
13 libsystem_trace.dylib 0x00007fff9a5bd07a _os_activity_initiate + 75
14 com.apple.AppKit 0x00007fff909d37a5 -[NSMenu performKeyEquivalent:] + 357
15 com.apple.AppKit 0x00007fff909d2949 -[NSApplication _handleKeyEquivalent:] + 920
16 com.apple.AppKit 0x00007fff908f90fe -[NSApplication sendEvent:] + 4274
17 com.apple.iphonesimulator 0x000000010100d151 0x100ff1000 + 115025
18 com.apple.AppKit 0x00007fff9075fdf2 -[NSApplication run] + 796
19 com.apple.AppKit 0x00007fff90729368 NSApplicationMain + 1176
20 libdyld.dylib 0x00007fff99c955ad start + 1
Thread 1:: Dispatch queue: com.apple.libdispatch-manager
0 libsystem_kernel.dylib 0x00007fff97827efa kevent_qos + 10
1 libdispatch.dylib 0x00007fff9612d165 _dispatch_mgr_invoke + 216
2 libdispatch.dylib 0x00007fff9612cdcd _dispatch_mgr_thread + 52
Thread 2:: com.apple.NSEventThread
0 libsystem_kernel.dylib 0x00007fff97820f72 mach_msg_trap + 10
1 libsystem_kernel.dylib 0x00007fff978203b3 mach_msg + 55
2 com.apple.CoreFoundation 0x00007fff97319124 __CFRunLoopServiceMachPort + 212
3 com.apple.CoreFoundation 0x00007fff973185ec __CFRunLoopRun + 1356
4 com.apple.CoreFoundation 0x00007fff97317e38 CFRunLoopRunSpecific + 296
5 com.apple.AppKit 0x00007fff908c1d95 _NSEventThread + 149
6 libsystem_pthread.dylib 0x00007fff928a299d _pthread_body + 131
7 libsystem_pthread.dylib 0x00007fff928a291a _pthread_start + 168
8 libsystem_pthread.dylib 0x00007fff928a0351 thread_start + 13
Thread 3:
0 libsystem_kernel.dylib 0x00007fff978275e2 __workq_kernreturn + 10
1 libsystem_pthread.dylib 0x00007fff928a2578 _pthread_wqthread + 1283
2 libsystem_pthread.dylib 0x00007fff928a0341 start_wqthread + 13
Thread 4:
0 libsystem_kernel.dylib 0x00007fff978275e2 __workq_kernreturn + 10
1 libsystem_pthread.dylib 0x00007fff928a2578 _pthread_wqthread + 1283
2 libsystem_pthread.dylib 0x00007fff928a0341 start_wqthread + 13
Thread 5:
0 libsystem_kernel.dylib 0x00007fff978275e2 __workq_kernreturn + 10
1 libsystem_pthread.dylib 0x00007fff928a2578 _pthread_wqthread + 1283
2 libsystem_pthread.dylib 0x00007fff928a0341 start_wqthread + 13
Thread 6:
0 libsystem_kernel.dylib 0x00007fff978275e2 __workq_kernreturn + 10
1 libsystem_pthread.dylib 0x00007fff928a2578 _pthread_wqthread + 1283
2 libsystem_pthread.dylib 0x00007fff928a0341 start_wqthread + 13
Thread 7:
0 libsystem_kernel.dylib 0x00007fff978275e2 __workq_kernreturn + 10
1 libsystem_pthread.dylib 0x00007fff928a2578 _pthread_wqthread + 1283
2 libsystem_pthread.dylib 0x00007fff928a0341 start_wqthread + 13
Thread 0 crashed with X86 Thread State (64-bit):
rax: 0x00007fff6382b2c0 rbx: 0x00007fff6384ce48 rcx: 0x021b77058d48fb89 rdx: 0x00007fff638545f8
rdi: 0x00007fff6384ce48 rsi: 0x00007fff976efa45 rbp: 0x00007fff5ec0dc30 rsp: 0x00007fff5ec0dbe0
r8: 0x0000000000000000 r9: 0x0000000000000001 r10: 0x00007fff93c7d1e0 r11: 0x00007fff6384ce48
r12: 0x00007fff976efa45 r13: 0x0000000000000000 r14: 0x0000000000000001 r15: 0x00007ffffffffff8
rip: 0x00007fff946adcdc rfl: 0x0000000000010206 cr2: 0x00007fff93c7c000
【问题讨论】:
Simulator crashes and quits on saving a screenshot while debugging on Xcode 8.2的可能重复 @Cœur 公平地说,您引用的问题是在此问题之前 一分钟 发布的,所以我几乎不会称其为重复。 【参考方案1】:在调用saveScreenShot:
选择器时,崩溃似乎是由于分段错误,或者更具体地说是一般保护错误而发生的。为什么会发生这种情况可能取决于几件事,因此很难说重新安装是否会有所帮助。
无论如何,如果模拟器中的屏幕截图(⌘S)功能导致崩溃,您几乎无能为力。您最好的选择可能是提交a bug report to Apple。
更新:
我刚刚更新到 8.2 的 GM,低头看,⌘S 也为我崩溃了。虽然我得到的是KERN_INVALID_ADDRESS
而不是EXC_I386_GPFLT
。
暂时的一种解决方法是复制屏幕并粘贴到预览中:
【讨论】:
【参考方案2】:是的,不幸的是,这是因为 OS X 10.11 上的 Foundation 中的一个错误而绊倒的。升级到 macOS Sierra 就没有问题了。
如果您现在无法升级到 Sierra,您仍然可以从命令行截取屏幕截图:
xcrun simctl io booted screenshot <path to output file>
这在Xcode 8.2 Release Notes中有提到
在 OS X El Capitan 上运行时,模拟器可能会在保存屏幕截图时崩溃。 (29182710) macOS Sierra 上不会发生崩溃。
【讨论】:
知道了。正如你提到的,我坚持使用 10.11.6 版本 多么好的发行说明,Apple 说什么都不会抱怨。 是的,很抱歉。直到包含解决方法为时已晚之后,才注意到该问题。我们添加了一个版本说明,以提高对该问题的认识并告知用户解决方法。 以防万一,带有桌面路径(如“保存屏幕截图”原始行为)-> xcrun simctl io booted screenshot ~/Desktop/filename.png【参考方案3】:请按照以下步骤获取屏幕截图。
1) 转到模拟器 -> 编辑 -> 复制屏幕,或者您可以使用快捷键 (ctrl + cmd + c)。 2) 打开预览并转到文件 -> 从剪贴板新建,或者您可以使用快捷方式 (cmd + n)。 3) 现在转到文件 -> 保存,或者您可以使用快捷方式 (cmd + s)。
或者您也可以参考下面的 GIF 演示文稿。
【讨论】:
【参考方案4】:所以一个更简单的解决方法是:
在模拟器中运行应用程序(显然)
在模拟器中转到编辑>复制屏幕
打开预览应用 返回模拟器并保存屏幕截图,即文件>保存屏幕截图完成!
不知道为什么这会阻止错误发生,但它对我有用。它比上述所有其他方法都快。
【讨论】:
【参考方案5】:解决方案 1
1) 转到模拟器 > 编辑 > 复制屏幕 (⌃⌘C)
2) 打开预览应用 > 转到文件 > 从剪贴板新建 (⌘N) 并保存 (⌘S) 到您机器上您最喜欢的位置
解决方案 2:- 使用 xcrun Xcode 命令行实用程序
打开Terminal App
并运行以下命令截屏
xcrun simctl io booted screenshot
如果您希望将捕获的屏幕截图保存到特定位置
xcrun simctl io booted screenshot <path_to_output_file>
【讨论】:
【参考方案6】:另一种方便的方式 -> Shift+Command+4 - 点击空格键,点击窗口获取模拟器窗口的快照。
https://support.apple.com/en-us/HT201361
【讨论】:
以上是关于保存屏幕截图时 Xcode 8.2 模拟器崩溃的主要内容,如果未能解决你的问题,请参考以下文章
Scenekit Xcode 模板 (BoilerPlate) 代码在运行时崩溃,Xcode 13, 2021
如何使场景完全伸展到宽度。附上我的 Xcode 模拟器的屏幕截图,它没有填满屏幕