These crashes are uploaded from device, namely an iPad 4 (running the app in compatibility mode) uploaded through Crashlytics and then downloaded from there. I haven’t been able to reproduce the crash and so I haven’t seen a raw dump. Here’s the full crash stack, redacted, from an iPad 4 running iOS 10.1.1 (this is an iOS 10+ app).
#0. Crashed: com.apple.main-thread 0 App 0x665ac Controller.handleSomeNotification(SomeNotification) -> () (Controller.swift:92) 1 libswiftCore.dylib 0x131854f swift_unknownWeakLoadStrong + 10 2 App 0x65cfc Controller.handleFinishSomeNotification(Notification) -> () (Controller.swift) 3 App 0x65dd8 @objc Controller.handleSomeOtherNotification(Notification) -> () + 437720 4 CoreFoundation 0x1bafa761 __CFNOTIFICATIONCENTER_IS_CALLING_OUT_TO_AN_OBSERVER__ + 10 5 CoreFoundation 0x1bafa09d _CFXRegistrationPost + 386 6 CoreFoundation 0x1baf9e81 ___CFXNotificationPost_block_invoke + 40 7 CoreFoundation 0x1bb5581d -[_CFXNotificationRegistrar find:object:observer:enumerator:] + 1188 8 CoreFoundation 0x1ba5a09d _CFXNotificationPost + 540 9 App 0x15b004 specialized specialized NotificationCenter.post<A> (A, forName : NSNotification.Name) -> () (Notifications.swift) 10 App 0x8d6f4 SomeListener.(post(SomeNotification : SomeNotification) -> ()).(closure #1) (SomeNotificationHandler.swift) 11 App 0x96318 partial apply for SomeListener.(post(SomeNotification : SomeNotification) -> ()).(closure #1) (SomeNotificationHandler.swift) 12 libdispatch.dylib 0x1b1f5097 _dispatch_call_block_and_release + 10 13 libdispatch.dylib 0x1b1f5083 _dispatch_client_callout + 22 14 libdispatch.dylib 0x1b1f95fd _dispatch_main_queue_callback_4CF + 890 15 CoreFoundation 0x1bb0aa17 __CFRUNLOOP_IS_SERVICING_THE_MAIN_DISPATCH_QUEUE__ + 8 16 CoreFoundation 0x1bb08cff __CFRunLoopRun + 1422 17 CoreFoundation 0x1ba58073 CFRunLoopRunSpecific + 486 18 CoreFoundation 0x1ba57e81 CFRunLoopRunInMode + 104 19 GraphicsServices 0x1d204bfd GSEventRunModal + 156 20 UIKit 0x20c0c82f -[UIApplication _run] + 574 21 UIKit 0x20c06f61 UIApplicationMain + 150 22 App 0x4bc38 main (AppDelegate.swift:12) 23 libdispatch.dylib 0x1b22250b (Missing) Essentially I have a listener waiting on a background queue for a push notification to come in, which then repackages the payload into a Notification using a generic convenience method I wrote, and posted onto the main queue. Controller is listening for this two separate notifications, one of which is the SomeNotification. But the @objc method in there is the selector for the other notification, SomeOther. There should be no path between 3 and 2 in the stack, and there are no weak references I can see, except perhaps the implicit ones from NotificationCenter. Badly resymbolicated log? Is that even possible? Jon > On Feb 13, 2017, at 6:52 PM, Greg Parker <gpar...@apple.com> wrote: > >> >> On Feb 13, 2017, at 12:18 PM, Jon Shier via swift-users >> <swift-users@swift.org <mailto:swift-users@swift.org>> wrote: >> >> Swift Users: >> I’m currently seeing a crash in my iOS app that has no apparent cause, >> but a bit of Swift runtime machinery in the stack has me confused. >> >> #0. Crashed: com.apple.main-thread >> 0 App 0x665ac >> Controller.handleOtherNotification(Notification) -> () (Controller.swift:92) >> 1 libswiftCore.dylib 0x131854f swift_unknownWeakLoadStrong + 10 >> 2 App 0x65cfc Controller.handleFinish(Notification) >> -> () (Controller.swift) >> 3 App 0x65dd8 @objc >> Controller.handleNotification(Notification) -> () + 437720 >> >> Controller.swift: 92 is a call to a custom UIView subclass method that takes >> an optional date contained extracted from the notification. Any idea what >> the core callout would be due to? There are no weak or unknown values being >> used here. Once the notification observers are called it’s all internal to >> Controller. >> >> One thing I just noticed is that the line at 3 is the selector for a >> different notification, which should lead down the path see from 2 onward. >> It’s redacted and so not easy to see, but in Controller, there’s no path >> that leads from handleNotification to handleFinish. > > That backtrace does look strange. Even if there were some surprising call to > swift_unknownWeakLoadStrong() in handleFinish(), there's no way that > swift_unknownWeakLoadStrong() would call handleOtherNotification(). > > (swift_unknownWeakLoadStrong + 10 is the instruction after a call, assuming > you're on 64-bit iOS simulator, but that call is to > swift::isNativeSwiftWeakReference() which itself doesn't call anything.) > > Also, in frame 3, the byte offset from the start of handleNotification() is > larger than the address itself. And all of these addresses look too small if > you're on 64-bit. > > Where did this backtrace come from? Do you have a crash log as generated by > the OS? > > > -- > Greg Parker gpar...@apple.com <mailto:gpar...@apple.com> Runtime > Wrangler
_______________________________________________ swift-users mailing list swift-users@swift.org https://lists.swift.org/mailman/listinfo/swift-users