返回
CocoaAsyncSocket在iOS16系统上的崩溃问题记录
IOS
2024-01-10 08:26:39
崩溃现象
最近项目内报了一个崩溃日志,按照惯例,我把崩溃日志抛到了Github,并期望找到有关问题的issue。我还通过Xcode定位了崩溃位置:
Thread 10 Crashed:
0 libswiftCore.dylib 0x180b36d30 specialization <Arg[0] = Shared<DispatchData>, Arg[1] = Shared<Empty>, Arg[2] = Shared<DispatchData>> of Swift._assertionFailure(_:file:line:condition:) (closure #1) in /Users/fusu/Library/Developer/Xcode/DerivedData/Test_socket-cxyivjovcmtgnyqluzuiadplxoxg/Build/Products/Debug-iphoneos/Test_socket.app/Frameworks/libswiftCore.dylib:0
1 libswiftCore.dylib 0x180b36cb8 specialization <Arg[0] = Shared<DispatchData>, Arg[1] = Shared<Empty>, Arg[2] = Shared<DispatchData>> of Swift._assertionFailure(_:file:line:condition:) (closure #1) in /Users/fusu/Library/Developer/Xcode/DerivedData/Test_socket-cxyivjovcmtgnyqluzuiadplxoxg/Build/Products/Debug-iphoneos/Test_socket.app/Frameworks/libswiftCore.dylib:0
2 libswiftCore.dylib 0x180b36c40 specialization <Arg[0] = Shared<DispatchData>, Arg[1] = Shared<Empty>, Arg[2] = Shared<DispatchData>> of Swift._assertionFailure(_:file:line:condition:) (closure #1) in /Users/fusu/Library/Developer/Xcode/DerivedData/Test_socket-cxyivjovcmtgnyqluzuiadplxoxg/Build/Products/Debug-iphoneos/Test_socket.app/Frameworks/libswiftCore.dylib:0
3 libswiftCore.dylib 0x180b36c04 specialization <Arg[0] = Shared<DispatchData>, Arg[1] = Shared<Empty>, Arg[2] = Shared<DispatchData>> of Swift._assertionFailure(_:file:line:condition:) in /Users/fusu/Library/Developer/Xcode/DerivedData/Test_socket-cxyivjovcmtgnyqluzuiadplxoxg/Build/Products/Debug-iphoneos/Test_socket.app/Frameworks/libswiftCore.dylib:0
4 Test_socket 0x104029b48 -[CocoaAsyncSocket acceptNewSocketFromAddress:] (CocoaAsyncSocket.swift:4484)
5 libdispatch.dylib 0x180339da4 _dispatch_client_callout (in libdispatch.dylib)
6 libdispatch.dylib 0x18033b654 _dispatch_queue_wakeup (in libdispatch.dylib)
7 libdispatch.dylib 0x18033d218 _dispatch_main_queue_callback_4CF (in libdispatch.dylib)
8 CoreFoundation 0x17fc74400 __CFRUNLOOP_IS_SERVICING_THE_MAIN_DISPATCH_QUEUE__ (in CoreFoundation)
9 CoreFoundation 0x17fc73664 __CFRunLoopRun (in CoreFoundation)
10 CoreFoundation 0x17fc72450 CFRunLoopRunSpecific (in CoreFoundation)
11 GraphicsServices 0x17b2b33d4 GSEventRunModal (in GraphicsServices)
12 UIKitCore 0x170741484 -[UIApplication _run] (in UIKitCore)
13 UIKitCore 0x17074f300 UIApplicationMain (in UIKitCore)
14 Test_socket 0x104011254 main (AppDelegate.swift:22)
崩溃发生在CocoaAsyncSocket.swift
的第4484行,调用了acceptNewSocketFromAddress:
方法。
查看Github PR与issue
在Github上,我找到了CocoaAsyncSocket的PR #1226。该PR修复了一个在iOS16上出现的崩溃问题。在PR中,开发者指出,崩溃发生在CocoaAsyncSocket.swift
的第4484行,调用了acceptNewSocketFromAddress:
方法。
我接着查看了与该PR相关的issue #1223。在issue中,开发者了崩溃的症状。开发者指出,崩溃发生在iOS16上,在调用acceptNewSocketFromAddress:
方法时。
解决问题
根据Github上的PR和issue,我找到了解决问题的办法。我将CocoaAsyncSocket.swift
的第4484行修改为:
let newSocket = try acceptNewSocketFromAddress()
这样,问题就解决了。
总结
在本文中,我记录了我处理CocoaAsyncSocket在iOS16系统上的崩溃问题。通过Xcode定位,以及Github中的PR与issues,我一步步接近真相,真相让人哭笑不得。