8wDlpd.png
8wDFp9.png
8wDEOx.png
8wDMfH.png
8wDKte.png

崩溃的 _dispatch_sync_f SecTrustGetCertificateAtIndex 身份验证挑战 iOS

Gen 3月前

61 0

有人能帮我理解一下这种罕见且随机的崩溃吗?有没有办法修复此问题而不会重现?线程 0 名称:线程 0 崩溃:0 libdispatch.dylib

有人能帮我理解一下这种罕见且随机的崩溃吗?有没有办法修复这个问题而不让它重现?

Thread 0 name:
Thread 0 Crashed:
0   libdispatch.dylib               0x00000001b2d7e538 _dispatch_sync_f + 4 (queue.c:1898)
1   Security                        0x00000001b372d0d8 SecTrustGetCertificateAtIndex + 244 (SecTrust.c:0)
2   PK9                             0x0000000102d63124 __61+[CertificateUtils certificatesFromTrust:options:completion:]_block_invoke + 88 (CertificateUtils.m:201)
3   CoreFoundation                  0x00000001aadb51b8 __CFRUNLOOP_IS_CALLING_OUT_TO_A_BLOCK__ + 28 (CFRunLoop.c:1805)
4   CoreFoundation                  0x00000001aadb39ac __CFRunLoopDoBlocks + 356 (CFRunLoop.c:1847)
5   CoreFoundation                  0x00000001aadb1888 __CFRunLoopRun + 812 (CFRunLoop.c:2953)
6   CoreFoundation                  0x00000001aadb1478 CFRunLoopRunSpecific + 608 (CFRunLoop.c:3420)
7   GraphicsServices                0x00000001ee30a4f8 GSEventRunModal + 164 (GSEvent.c:2196)
8   UIKitCore                       0x00000001ad1db360 -[UIApplication _run] + 888 (UIApplication.m:3685)
9   UIKitCore                       0x00000001ad1da99c UIApplicationMain + 340 (UIApplication.m:5270)
10  PK9                             0x0000000102e5dfe8 main + 68 (main.m:15)
11  dyld                            0x00000001cdae9dcc start + 2240 (dyldMain.cpp:1269)

发生崩溃的函数:

+ (void)certificatesFromTrust:(SecTrustRef)trust options:(CertificateOptions)options completion:(void (^)(NSArray *))completion
{
    if (trust == NULL) {
        completion(nil);
    }
    else {
        // trust needs to be evaluated prior to attempting to retrieve the certs
        CFIndex count = SecTrustGetCertificateCount(trust);
        
        [self evaluateTrust:trust completion:^(OSStatus status, SecTrustResultType result) {
            NSMutableArray *certs = [NSMutableArray arrayWithCapacity:(NSInteger)count];
            
            for (CFIndex i = 0; i < count; i++) {
                SecCertificateRef cert = SecTrustGetCertificateAtIndex(trust, i);
                if (cert != NULL) {
                    // Extract certificate data
                    NSData *certData = CFBridgingRelease(SecCertificateCopyData(cert));
                    
                    if (certData != nil && (options & CertificateOptionsRemoveRootCertificates) && count > 1) {
                        // We were told to strip all anchor certificates, so only keep this one if it's issued by someone else (and not the only cert, i.e. self-signed)
                        const unsigned char *certDataBytes = (const unsigned char *)[certData bytes];
                        X509 *x509Cert = d2i_X509(NULL, &certDataBytes, [certData length]);
                        NSString *subjectCN = X509CertificateGetCommonName(X509_get_subject_name(x509Cert));
                        NSString *issuerCN = X509CertificateGetCommonName(X509_get_issuer_name(x509Cert));
                        X509_free(x509Cert);
                        
                        if ([subjectCN isEqualToString:issuerCN]) {
                            certData = nil; // do not add root certificates
                        }
                    }
                    
                    if (certData != nil) {
                        // create a copy of the certificate and add it to the array transferring ownership to ARC
                        cert = SecCertificateCreateWithData(NULL, (__bridge CFDataRef)(certData));
                        [certs addObject:CFBridgingRelease(cert)];
                    }
                }
            }
            
            completion(certs);
        }];
    }
}
帖子版权声明 1、本帖标题:崩溃的 _dispatch_sync_f SecTrustGetCertificateAtIndex 身份验证挑战 iOS
    本站网址:http://xjnalaquan.com/
2、本网站的资源部分来源于网络,如有侵权,请联系站长进行删除处理。
3、会员发帖仅代表会员个人观点,并不代表本站赞同其观点和对其真实性负责。
4、本站一律禁止以任何方式发布或转载任何违法的相关信息,访客发现请向站长举报
5、站长邮箱:yeweds@126.com 除非注明,本帖由Gen在本站《objective-c》版块原创发布, 转载请注明出处!
最新回复 (0)
  • 我的 SDK 需要另一个 SDK,我有它的 .h 文件 (xdjaalg.h)。当我仅使用 xdjaalg.h 文件编译动态库时,出现错误:ld: 未定义的符号:。所以我必须链接 xdjaalg.a,但我没有

    我的 SDK 需要另一个 SDK,我有它的.h 文件(xdjaalg.h)。当我仅使用 xdjaalg.h 文件编译我的动态库时,出现错误: ld: Undefined symbols: 。所以我必须链接 xdjaalg.a,但我没有将 xdjaalg.a 编译到我的 SDK 中。

    当我将选项更改为时 Mach-O Type Static Library 一切 Build Settings 顺利。但我想使用动态库。

    有什么方法可以使动态库像系统框架那样仅使用头文件进行编译。

    我也很好奇为什么系统框架没有这个限制,我只是导入系统头文件 UIKit.h ,它可以很好地编译(无论是动态还是静态)。但是 xdjaalg.h 构建失败 ld: Undefined symbols:

返回
作者最近主题: