Ответы пользователя по тегу Swift
  • Как определить установленный сертификата в ios 11?

    @MeGaPk Автор вопроса
    iOS Программист, 3д печатник
    Сам спросил, сам ответил.

    Вообщем эйпл тупо поменяло ответ переменной trustResult, теперь это kSecTrustResultProceed.
    Прикладываю рабочий код с фиксом.
    - (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;
    }
    Ответ написан
    Комментировать