在iOS 12模拟器上运行测试时DTX通道序列化程序队列中的随机SIGABRT

在iOS 12模拟器上运行测试时DTX通道序列化程序队列中的随机SIGABRT,ios,xcode,Ios,Xcode,从Xcode 10和iOS 12开始,我们的CI服务器随机失败,因为一个或多个测试在模拟器上崩溃 日志文件的状态如下 Test Case '-[SJDNotificationToObjectIDMarshallerTest testItMarshalsAnObjectID]' started. Test Case '-[SJDNotificationToObjectIDMarshallerTest testItMarshalsAnObjectID]' passed (0.003 seconds)

从Xcode 10和iOS 12开始,我们的CI服务器随机失败,因为一个或多个测试在模拟器上崩溃

日志文件的状态如下

Test Case '-[SJDNotificationToObjectIDMarshallerTest testItMarshalsAnObjectID]' started.
Test Case '-[SJDNotificationToObjectIDMarshallerTest testItMarshalsAnObjectID]' passed (0.003 seconds).
objc[43030]: Attempt to use unknown class 0x7fe4a241cfa0.

Restarting after unexpected exit or crash in SJDNotificationToObjectIDMarshallerTest/testItMarshalsAnObjectID; summary will include totals from previous launches.
测试用例在不同的运行中有所不同。尝试使用未知类的错误
总是相同的

它很难重现,因为它只在我们的CI服务器(MacMini)上每秒测试一次。在我速度相当快的MacBookPro上,这种情况很少发生。但我确实在我的机器上复制了几次。运行测试时,Xcode将暂停并显示崩溃的线程。回溯说:

* thread #2, queue = 'DTXChannel serializer queue [x1.c1]', stop reason = signal SIGABRT
  * frame #0: 0x000000010ba5801e libsystem_kernel.dylib`__abort_with_payload + 10
    frame #1: 0x000000010ba53561 libsystem_kernel.dylib`abort_with_payload_wrapper_internal + 82
    frame #2: 0x000000010ba5350f libsystem_kernel.dylib`abort_with_reason + 22
    frame #3: 0x0000000108ae91f5 libobjc.A.dylib`_objc_fatalv(unsigned long long, unsigned long long, char const*, __va_list_tag*) + 108
    frame #4: 0x0000000108ae911e libobjc.A.dylib`_objc_fatal(char const*, ...) + 127
    frame #5: 0x0000000108af1409 libobjc.A.dylib`lookUpImpOrForward + 645
    frame #6: 0x0000000108afe814 libobjc.A.dylib`_objc_msgSend_uncached + 68
    frame #7: 0x000000010951ac23 CoreFoundation`__21+[__NSSetI __new::::]_block_invoke + 51
    frame #8: 0x000000010951ab1a CoreFoundation`+[__NSSetI __new::::] + 474
    frame #9: 0x0000000109570ed4 CoreFoundation`+[NSSet setWithObjects:count:] + 52
    frame #10: 0x0000000109571eab CoreFoundation`-[NSSet setByAddingObjectsFromSet:] + 763
    frame #11: 0x000000011c015f44 DTXConnectionServices`-[DTXProxyChannel _allowedClassesForReturnValues] + 109
    frame #12: 0x000000011c016722 DTXConnectionServices`__42-[DTXProxyChannel _sendInvocationMessage:]_block_invoke + 260
    frame #13: 0x000000011c024e76 DTXConnectionServices`__51-[DTXChannel _scheduleMessage:tracker:withHandler:]_block_invoke.751 + 101
    frame #14: 0x000000010b6a651d libdispatch.dylib`_dispatch_call_block_and_release + 12
    frame #15: 0x000000010b6a7587 libdispatch.dylib`_dispatch_client_callout + 8
    frame #16: 0x000000010b6ae058 libdispatch.dylib`_dispatch_lane_serial_drain + 720
    frame #17: 0x000000010b6aeb9b libdispatch.dylib`_dispatch_lane_invoke + 401
    frame #18: 0x000000010b6b79c6 libdispatch.dylib`_dispatch_workloop_worker_thread + 645
    frame #19: 0x000000010ba9061c libsystem_pthread.dylib`_pthread_wqthread + 409
    frame #20: 0x000000010ba90415 libsystem_pthread.dylib`start_wqthread + 13
有人知道发生了什么事吗

它可以在Xcode 10 GM中复制,在每个运行iOS 12或12.1 Beta的模拟器中都可以复制当前的Beta 10.1 10O35n。
它在iOS 11模拟器上不可复制。

我花了很多时间试图解决同样的问题

对我来说,解决这个问题的最佳方法是删除
NS类的
ocmock
NSString
NSArray


我没有关于这个副作用的信息,但这个解决方案对我有效。

嘿。你知道那是什么吗?不知道。这真的很烦人,因为几乎每一秒ci构建都会崩溃。我打了个雷达,看看苹果有没有回复。你见过类似的车祸吗?很有趣。我要去看看。我们确实在模仿系统框架类。在一个特别脆弱的测试中,我们甚至模拟UIC应用程序。