无法检查是否对iPhone存在一个配置文件(unable to check if a configu

2019-08-02 12:16发布

我想,以检查是否在iPhone上存在一个配置文件,我发现了如何做到这一点下面的教程: http://alex.tapmania.org/2011/09/check_conf_prof_is_installed_ios.html

这对我来说,翻译成下面的代码:

NSString * certPath = [[NSBundle mainBundle] pathForResource:@"certificate" ofType:@"mobileconfig"];
    SecTrustRef trust;
    NSData * certData = [NSData dataWithContentsOfFile:certPath];
    SecCertificateRef cert = SecCertificateCreateWithData(NULL, (__bridge CFDataRef) certData);
    SecPolicyRef policy = SecPolicyCreateBasicX509();
    OSStatus err = SecTrustCreateWithCertificates((__bridge CFArrayRef) [NSArray arrayWithObject:(__bridge id)cert],policy, &trust);

    SecTrustResultType  trustResult = -1;
    err = SecTrustEvaluate(trust, &trustResult);


    if (trustResult ==4) {
        label.text=@"Profile installed";
    }
    else{
        label.text=@"Profile not installed";
    }

应用程序崩溃在该行:

OSStatus err = SecTrustCreateWithCertificates((__bridge CFArrayRef) [NSArray arrayWithObject:(__bridge id)cert],policy, &trust);

我还注意到,在这个阶段cert没有按吨有任何内存分配它。

怎么了? 这是正确的程序? 如果没有,是否有另一个教程,更有利?

谢谢!

Answer 1:

我不知道,为什么你会希望通过代码来做到这一点。 有Mac OSX上的应用程序已经为你做这个。 如果你打算做什么没有涉及代码,你可以下载这个从这个所谓的iPhone配置实用工具 Mac应用程序的苹果链接 。 有许多功能,包括配置/视图/等安装在iPhone上的文件。



Answer 2:

我最近解决了,您有同样的问题。 你已经发布的代码,并从链接的建议确实可以用来检查一个配置文件的存在。 你已经打了障碍无疑是您的证书有问题。

我建立了我对使用OpenSSL由ShiningLight win32的证书。 关于如何做到这一点的完整说明可以在这里找到: http://www.dylanbeattie.net/docs/openssl_iis_ssl_howto.html

但请注意,有几个陷阱的:

  1. 创建你的根证书时,在配置文件中的basicconstraints = CA设置必须设置为TRUE(需要的其他证件FALSE)。

  2. 对于iOS能够读他们,这两个证书必须使用DER进行编码。 要做到这一点使用OpenSSL的,你需要运行类似于OpenSSL的X509 -in证书/ cert.cer退房手续证书/ certDER.cer -outform DER在这两个证书的命令。 我强烈怀疑这是错误的编码,它崩溃你的代码。



文章来源: unable to check if a configuration profile exists on the iPhone