Swift崩溃报告功能签名专业化拥有保证

时间:2016-11-17 18:09:37

标签: ios swift

我在Swift中重写了一些Objective-C代码后,我的一些用户开始崩溃。当链接到Xcode时,我根本无法重现,我无法弄清楚为什么只有少数用户遇到崩溃。我从HockeyApp检索了日志,原因是:Selector name found in current argument registers: registeredContacts。这是我在我的代码中处理的数组,但在任何情况下都无法让它在访问或设置该数组时崩溃。

我认为它可能是我的Swift块语法以及我如何从Objective-C调用它。我的Swift函数签名:

func retrieveActivities(handler: (([WPActivity], Error?) -> Void)?) {

我在Objective-C中用以下方法调用它:

[[WPActivitiesManager shared] retrieveActivitiesWithHandler:nil];

有时我会使用该块,但在启动时我不需要它。正如我所说,这对我来说并没有崩溃,也没有编译器警告。

崩溃日志的顶部:

Exception Type:  SIGTRAP
Exception Codes: #0 at 0x1001c0438
Crashed Thread:  0

Application Specific Information:
Selector name found in current argument registers: registeredContacts

Thread 0 Crashed:
0   Waypoint                             0x00000001001c0438 function signature specialization <Arg[0] = Owned To Guaranteed, Arg[1] = Owned To Guaranteed> of Waypoint.WPActivitiesManager.(retrieveActivities (handler : ([__ObjC.WPActivity], Swift.Error?) -> ()?) -> ()).(closure #2) with unmangled suffix "_merged" + 612
1   Waypoint                             0x00000001001c13a4 partial apply forwarder for Waypoint.WPActivitiesManager.(retrieveActivities (handler : ([__ObjC.WPActivity], Swift.Error?) -> ()?) -> ()).(closure #2) with unmangled suffix "_merged" + 64
2   Foundation                           0x0000000189ca2754 __NSBLOCKOPERATION_IS_CALLING_OUT_TO_A_BLOCK__ + 12
3   Foundation                           0x0000000189be72c8 -[NSBlockOperation main] + 92
4   Foundation                           0x0000000189bd78c4 -[__NSOperationInternal _start:] + 616
5   Foundation                           0x0000000189ca4b00 __NSOQSchedule_f + 224
6   libdispatch.dylib                    0x00000001880691c0 _dispatch_client_callout + 12
7   libdispatch.dylib                    0x000000018806dd6c _dispatch_main_queue_callback_4CF + 996
8   CoreFoundation                       0x000000018918bf2c __CFRUNLOOP_IS_SERVICING_THE_MAIN_DISPATCH_QUEUE__ + 8
9   CoreFoundation                       0x0000000189189b18 __CFRunLoopRun + 1656
10  CoreFoundation                       0x00000001890b8048 CFRunLoopRunSpecific + 440
11  GraphicsServices                     0x000000018ab3e198 GSEventRunModal + 176
12  UIKit                                0x000000018f0a42fc -[UIApplication _run] + 680
13  UIKit                                0x000000018f09f034 UIApplicationMain + 204
14  Waypoint                             0x0000000100122888 main (main.m:14)
15  libdyld.dylib                        0x000000018809c5b8 start + 0

我怀疑registeredContacts评论(我相信HockeyApp添加)与此无关,但它是一个ObjC / Swift问题。任何想法都赞赏。

最终在Xcode中提供了日志,我还有以下信息:

Xcode log

1 个答案:

答案 0 :(得分:2)

  

我怀疑registeredContacts评论(我相信HockeyApp添加)与此无关

不,我认为你倒退了。那是完全相关的东西。这是您的崩溃报告无关紧要。

SIGTRAP仅仅意味着我们得到了一个例外。异常是在代码中抛出(或者更确切地说,在执行代码的过程中)。但你似乎没有得到任何关于它是什么的信息。我的猜测是,HockeyApp实际上干扰了您收到真实的报告,该报告会告诉您异常是什么。

因此 retrieveActivities中存在的问题。您可能会尝试通过计算线来猜测在哪里(您被告知实际发生崩溃的方法中的行数)。我相信它可能就像越界数组访问一样简单。因此,数组registeredContacts在此处弹出的事实非常具有启发性。在方法中的那一点寻找registeredContacts访问权限。