保存屏幕截图时Xcode 8.2模拟器崩溃

更新XCode 8.2后,每次保存模拟器屏幕截图总是使其崩溃。 即使我重置内容和设置仍然崩溃。

我应该删除所有的模拟器,并再次安装它们?

更新

  • 8.2.1有同样的问题。
  • 8.3只有塞拉支持。

以下是崩溃报告:

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 

在调用saveScreenShot:select器时,崩溃似乎是由于分段错误,或者更具体地说是一般保护错误而发生的。 为什么发生可能取决于几件事情,所以很难说重新安装是否会有所帮助。

在任何情况下,如果模拟器中的屏幕截图(⌘S)函数导致崩溃,那么几乎没有什么可以做的。 你有最好的select可能是向苹果提交一个错误报告 。

更新:

我刚刚更新到了8.2 GM,而且低下,⌘S也为我崩溃。 虽然我得到KERN_INVALID_ADDRESS而不是EXC_I386_GPFLT

一种解决方法暂时是复制屏幕并粘贴到预览:

截图

您可以使用xcrun Xcode命令行实用程序截取Simulator的屏幕截图。 截取屏幕截图,运行命令xcrun simctl io booted screenshot

来源: Xcode 8.2发行说明

在OS X El Capitan上运行时,保存屏幕截图时,模拟器可能会崩溃。 (29182710)在macOS Sierra上不会发生崩溃。

是的,不幸的是,这是在OS X 10.11基础上的一个错误。 如果升级到macOS Sierra,则不会有问题。

如果你现在不能升级到Sierra,你仍然可以从命令行截图:

 xcrun simctl io booted screenshot <path to output file> 

这在Xcode 8.2发行说明中提到

在OS X El Capitan上运行时,保存屏幕截图时,模拟器可能会崩溃。 (29182710)在macOS Sierra上不会发生崩溃。

请find下面的步骤获取屏幕截图。

1)转到模拟器 – >编辑 – >复制屏幕,或者你可以使用快捷方式( CTRL + CMD + C )。
2)打开预览,并从剪贴板转到文件 – >新build,或者可以使用快捷方式( cmd + n )。
3)现在转到文件 – >保存或者你可以使用快捷方式( CMD + S )。

或者你也可以参考下面的GIF演示。

GIF

所以更简单的解决方法是:

  1. 在模拟器中运行应用程序(显然)

  2. 在模拟器中,进入编辑>复制屏幕

  3. 打开预览应用程序
  4. 回到模拟器并保存屏幕截图,即文件>保存屏幕截图

完成!

不知道为什么这阻止了错误的发生,但它为我工作。 它比上述所有其他方法都快。

解决scheme1

1)转到模拟器>编辑>复制屏幕(^⌘C)

在这里输入图像说明

2)打开预览应用程序>转到文件>从剪贴板(⌘N)和保存(⌘S)新到您的机器上最喜欢的位置

在这里输入图像说明

解决scheme2: – 使用xcrun Xcode命令行实用程序

打开Terminal App并运行以下命令进行截图

xcrun simctl io booted screenshot

如果您想将捕获的截图保存到特定的位置

xcrun simctl io booted screenshot <path_to_output_file>

另一个方便的方法 – > Shift + Command + 4 – 点击空格键,点击窗口获得模拟器窗口的快照。

https://support.apple.com/en-us/HT201361