2017-06-05 104 views
0

我有iOS的11上安裝證書,該代碼沒有檢測到我安裝自定義證書:檢測的iOS設備11

- (BOOL)IsMobileConfigInstalled { 
    NSString *certPath = [[NSBundle mainBundle] pathForResource:@"cert" ofType:@"der"]; 
    NSData *certData = [NSData dataWithContentsOfFile:certPath]; 
    SecCertificateRef cert = NULL; 
    if ([certData length]) { 
     cert = SecCertificateCreateWithData(NULL, (__bridge CFDataRef) certData); 
     if (cert != NULL) { 
      CFStringRef certSummary = SecCertificateCopySubjectSummary(cert); 
      NSString *summaryString = [[NSString alloc] initWithString:(__bridge NSString *) certSummary]; 
      CFRelease(certSummary); 
     } 
    } 
    SecPolicyRef policy = SecPolicyCreateBasicX509(); 
    SecTrustRef trust; 
    OSStatus err = SecTrustCreateWithCertificates((__bridge CFArrayRef) @[ 
      (__bridge id) cert 
    ], policy, &trust); 
    SecTrustResultType trustResult = (SecTrustResultType) -1; 
    err = SecTrustEvaluate(trust, &trustResult); 
    CFRelease(trust); 
    CFRelease(policy); 
    CFRelease(cert); 
    return kSecTrustResultUnspecified == trustResult; 
} 

問題是什麼?

+0

的問題是,你沒有解釋什麼是應該到相反,它做什麼和做什麼。另一個問題是,你應該先在iOS 10上試試這個。 – deadbeef

+0

@deadbeef當然在ios 10中工作。並已經發布這個應用程序... – MeGaPk

回答

0

問題已解決。 蘋果剛剛「固定」導致trustResult。

所以,現在corrent答案:kSecTrustResultProceed

我固定的代碼版本: iOS上的10個工作和11

- (BOOL)IsMobileConfigInstalled { NSString *certPath = [[NSBundle mainBundle] pathForResource:@"cert" ofType:@"der"]; NSData *certData = [NSData dataWithContentsOfFile:certPath]; SecCertificateRef cert = NULL; if ([certData length]) { cert = SecCertificateCreateWithData(NULL, (__bridge CFDataRef) certData); if (cert != NULL) { CFStringRef certSummary = SecCertificateCopySubjectSummary(cert); NSString *summaryString = [[NSString alloc] initWithString:(__bridge NSString *) certSummary]; CFRelease(certSummary); } } SecPolicyRef policy = SecPolicyCreateBasicX509(); SecTrustRef trust; OSStatus err = SecTrustCreateWithCertificates((__bridge CFArrayRef) @[ (__bridge id) cert ], policy, &trust); SecTrustResultType trustResult = (SecTrustResultType) -1; err = SecTrustEvaluate(trust, &trustResult); CFRelease(trust); CFRelease(policy); CFRelease(cert); NSString *ver = [[UIDevice currentDevice] systemVersion]; float ver_float = [ver floatValue]; if (ver_float >= 11) return kSecTrustResultProceed == trustResult; return kSecTrustResultUnspecified == trustResult; }