4

我正在尝试检查 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没有分配任何内存。

怎么了?这是正确的程序吗?如果没有,还有其他更有益的教程吗?

谢谢!

4

2 回答 2

0

我最近解决了你遇到的同样的问题。您发布的代码和链接中的建议确实可用于检查配置文件是否存在。您遇到的障碍无疑是您的证书问题。

我使用 ShiningLight 的 openSSL for win32 创建了我的一对证书。可以在此处找到有关如何操作的完整说明:http ://www.dylanbeattie.net/docs/openssl_iis_ssl_howto.html

但是请注意,有几个问题:

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

  2. 为了让 IO 能够读取它们,两个证书都必须使用 DER 进行编码。要使用 openssl 执行此操作,您需要在两个证书上运行类似于openssl x509 -in certs/cert.cer -out certs/certDER.cer -outform DER的命令。我强烈怀疑是错误的编码导致您的代码崩溃。

于 2013-12-11T11:25:20.150 回答
0

我不确定您为什么要通过代码执行此操作。已经有 Mac OSx 应用程序可以为您执行此操作。如果您打算做的事情不需要涉及代码,您可以从这个Apple 链接下载这个名为iPhone Configuration Utility的 Mac 应用程序。具有许多功能,包括配置/查看/等安装在 iPhone 上的配置文件。

于 2013-03-12T18:30:28.047 回答