2016-03-07 218 views
4

我使用crashlytics来获取AppStore中的应用程序的崩溃。有些用户正在崩溃,我似乎无法在我的机器上重新生成(既没有几个朋友通过TestFlight测试我的应用程序)。这是原木面料:快速崩溃libobjc.A.dylib objc_msg发送

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) 

我似乎无法理解这是什么意思,并寻找帮助,其他的问题,但似乎无法找到答案。我也很快联系了Crashlytics团队,他们告诉我以下内容:

听起来像这次崩溃的来源是某种内存不足的崩溃。这会导致Crashlytics在写完之前关闭,导致在崩溃报告中出现这种情况。

任何不错的方法来调试这个,以查明崩溃的来源?感谢帮助!

编辑:从crashlytics在崩溃报告线程 新增截图万一有人想从那里的一些信息: enter image description here

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 

编辑2: 我使用所有SWIFT代码,我向Selectors转发邮件的方式如下:

NSTimer.scheduledTimerWithTimeInterval(0.02, target: self, selector: Selector("updateProgressCircle"), userInfo: nil, repeats: true) 

func updateProgressCircle() { 
    // Do something 
} 

问题是我无法从本地再现任何崩溃。只有用户正在面对这一点。我以类似的方式调用选择器。

+1

崩溃中没有任何更多信息或控制台输出? – jtbandes

+0

添加了其他正在运行的线程的屏幕截图(我只复制了主线程中的信息)。这就是我能从崩溃报告中得到的。检查编辑问题 –

回答

3

当您尝试将消息转发到选择器(使用良好的旧Objective-C转发消息)时,发生崩溃objc_msgSend。这可以通过目标动作,通知,协议声明,定时器,执行选择器或涉及传入函数的选择器语法的任何其他函数产生:例如:"doSomethingWithThis:"

我可以从您的崩溃日志中看到,您的应用中有快速组件(至少是AppDelegate)。与Obj-C组件不同,Swift组件与开箱即用的Obj-C转发消息传递系统不兼容。

我的直觉是你的代码中有一个符合协议的快速对象,被添加为目标/通知观察者,或者以某种方式期待它的某个函数被前向消息传递调用。我建议你通过你的课程,看看是否是这样。一旦找到罪魁祸首,您可以通过将@objc附加到期望该消息的函数来轻松修复此错误。

即: 如果你的函数,在一个迅速类是所谓的(并且是说,注册了一个通知):

func yourFunction() { 
    //your code 
} 

调用它:

@objc func yourFunction() { 
    //your code 
} 

这是一个长镜头但我希望这有助于!

+0

有趣!今晚我会回来看看今天晚上的工作,谢谢你的建议 –

+0

我很好奇,看看这是否有帮助! –

+0

所以问题是我无法在本地重新制作我的崩溃,只有用户因为某种原因面临这种情况,所以我不能确定这是否能解决我的问题。我编辑了这个问题来回答你。 –

0

我相信这可能与AVAudioPlayer有关。在我的情况下,我有这个相同的错误,并得到了一些提示,注意到我的2个正在运行的线程有AVAudioPlayer相关的内容。

我有一个AVAudioPlayer类变量,我重新初始化而不重置为第一。我在我的AVAudioPlayer变量初始化之前添加了下面的代码,并且自那之后没有发生错误。

audioPlay是变量名称。

if audioPlay != nil 
{ 
    //print("blabla") 
    audioPlay?.stop() 
    audioPlay = nil 
}