8

我们的 iOS 应用程序发生崩溃,由 crashlytics 报告:

崩溃:XPC API 滥用:尝试发送一条期望回复到 (com.apple.networking.connection.0x46bf35a0) 的消息

堆栈跟踪是:

Thread : Crashed: XPC API Misuse: Attempt to send a message expecting a reply to  (com.apple.networking.connection.0x46bf35a0)
0  libxpc.dylib                   0x35cc534a _xpc_api_misuse + 41
1  libsystem_c.dylib              0x35ba49e5 __strlcpy_chk + 48
2  libxpc.dylib                   0x35cb5f75 _xpc_serializer_create + 158
3  libxpc.dylib                   0x35cb5ea1 xpc_connection_send_message + 60

它发生在 iPhone 5 上的 iOS 9.0.2 下。我们无法重现崩溃,我们不知道如何开始调试/修复。似乎我们并不孤单

也许这里有人有任何想法。

4

2 回答 2

7

在这个问题上有很多未解决的错误:rdar://21832853 是原始错误,还有 rdar://22860899 和 rdar://22874333,两者都在 OpenRadar 上。

我认为这是由 SCNetworkReachability 中的一些基于 C 的网络代码引起的,它正在尝试与 iOS VPN 系统(大概是为了确定是否已连接)或用于 NSURLSession 请求的后台守护进程通信,但是我不确定。不幸的是,CFNetwork 不是开源的,而且 10.11 的 libdispatch 源代码(尽可能接近 iOS 9)还没有发布,所以我什至无法开始猜测网络代码做错了什么。

无论哪种方式,我认为您将无法解决它。话虽如此,假设我对根本原因是正确的,您可以通过运行网络链接调节器并反复打开和关闭飞行模式来重现它。无论如何,值得一试。

于 2015-10-20T17:39:59.740 回答
0

我认为这可能是您的代码错误,我以前每次关闭应用程序时都会遇到同样的问题,我有一个销毁函数,它释放 xpc 连接,如下所示:

void XpcComm::destory()
{
    std::lock_guard< std::mutex > lock( m_Lock );
    if ( m_xpcConn != nullptr )
    {
        xpc_connection_cancel( m_xpcConn );
        xpc_release( m_xpcConn );
    }
    m_xpcConn = nullptr;
}

我将其更新为

void XpcComm::destory()
{
    std::lock_guard< std::mutex > lock( m_Lock );
    if ( m_xpcConn != nullptr )
    {
        xpc_connection_cancel( m_xpcConn );
        xpc_release( m_xpcConn );
        m_xpcConn = nullptr;
    }
    
}

并修复了关闭应用程序时 xpc api 滥用崩溃的问题。

于 2022-02-27T01:19:27.617 回答