Guy*_*her 5 iphone crash ios crashlytics swift
我使用crashlytics来解决AppStore中应用程序的崩溃问题.有些用户正在崩溃,我似乎无法在我的机器上重现(也没有几个朋友通过TestFlight测试我的应用程序).这是来自Fabric的日志:
Thread : Crashed: com.apple.main-thread
0 libobjc.A.dylib 0x181d09bdc objc_msgSend + 28
1 Foundation 0x18304be20 __NSThreadPerformPerform + 340
2 CoreFoundation 0x182640efc __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE0_PERFORM_FUNCTION__ + 24
3 CoreFoundation 0x182640990 __CFRunLoopDoSources0 + 540
4 CoreFoundation 0x18263e690 __CFRunLoopRun + 724
5 CoreFoundation 0x18256d680 CFRunLoopRunSpecific + 384
6 GraphicsServices 0x183a7c088 GSEventRunModal + 180
7 UIKit 0x1873e4d90 UIApplicationMain + 204
8 <App Name> 0x1000b2f0c main (AppDelegate.swift:14)
9 libdispatch.dylib 0x18210e8b8 (Missing)
Run Code Online (Sandbox Code Playgroud)
我似乎无法理解这意味着什么,并搜索其他问题寻求帮助,但似乎无法找到答案.我也很快联系了Crashlytics团队,他们告诉我以下内容:
听起来这次崩溃的根源是某种内存崩溃.这导致Crashlytics在完成写入之前关闭,从而导致崩溃报告中出现这种情况.
有什么好的方法来调试这个以确定崩溃的来源?感谢帮助!
编辑:
在崩溃报告的崩溃报告中添加了线程的屏幕截图,以防有人想从那里获得一些信息:

Thread : com.apple.NSURLConnectionLoader
0 libsystem_kernel.dylib 0x1823354bc mach_msg_trap + 8
1 libsystem_kernel.dylib 0x182335338 mach_msg + 72
2 CoreFoundation 0x182764ac0 __CFRunLoopServiceMachPort + 196
3 CoreFoundation 0x1827627c4 __CFRunLoopRun + 1032
4 CoreFoundation 0x182691680 CFRunLoopRunSpecific + 384
5 CFNetwork 0x182e01434 +[NSURLConnection(Loader) _resourceLoadLoop:] + 412
6 Foundation 0x18316fc40 __NSThread__start__ + 1000
7 libsystem_pthread.dylib 0x182417b28 _pthread_body + 156
8 libsystem_pthread.dylib 0x182417a8c _pthread_body + 154
9 libsystem_pthread.dylib 0x182415028 thread_start + 4
Thread : AVAudioSession Notify Thread
0 libsystem_kernel.dylib 0x1823354bc mach_msg_trap + 8
1 libsystem_kernel.dylib 0x182335338 mach_msg + 72
2 CoreFoundation 0x182764ac0 __CFRunLoopServiceMachPort + 196
3 CoreFoundation 0x1827627c4 __CFRunLoopRun + 1032
4 CoreFoundation 0x182691680 CFRunLoopRunSpecific + 384
5 libAVFAudio.dylib 0x188959834 GenericRunLoopThread::Entry(void*) + 164
6 libAVFAudio.dylib 0x18892e3a8 CAPThread::Entry(CAPThread*) + 84
7 libsystem_pthread.dylib 0x182417b28 _pthread_body + 156
8 libsystem_pthread.dylib 0x182417a8c _pthread_body + 154
9 libsystem_pthread.dylib 0x182415028 thread_start + 4
Run Code Online (Sandbox Code Playgroud)
编辑2: 我正在使用所有Swift代码,我将消息转发给选择器的方式如下:
NSTimer.scheduledTimerWithTimeInterval(0.02, target: self, selector: Selector("updateProgressCircle"), userInfo: nil, repeats: true)
func updateProgressCircle() {
// Do something
}
Run Code Online (Sandbox Code Playgroud)
问题是我无法在本地重现任何崩溃.只有用户才面临这种情况.我以类似的方式称呼选择器.
objc_msgSend当您尝试将消息转发到选择器(使用良好的旧 Objective-C 转发消息传递)时,会发生崩溃。这可以通过目标操作、通知、协议声明、计时器、执行选择器或涉及传递函数选择器语法的任何其他函数来生成:即:"doSomethingWithThis:"。
我可以从你的崩溃日志中看到你的应用程序中有快速的组件(至少是 AppDelegate)。与 Obj-C 组件不同,Swift 组件与开箱即用的 Obj-C 转发消息传递系统不兼容。
我的直觉是,您的代码中有一个符合协议的 swift 对象,被添加为目标/通知观察者,或者以某种方式期望其函数之一被转发消息调用。我建议你复习一下你的课程,看看是否是这种情况。一旦找到罪魁祸首,您可以通过将 @objc 附加到需要该消息的函数来轻松修复此错误。
即:如果您的函数在 swift 类中被调用(并且例如注册了通知):
func yourFunction() {
//your code
}
Run Code Online (Sandbox Code Playgroud)
叫它:
@objc func yourFunction() {
//your code
}
Run Code Online (Sandbox Code Playgroud)
这是一个漫长的过程,但我希望这会有所帮助!
| 归档时间: |
|
| 查看次数: |
3583 次 |
| 最近记录: |