检查iOS上是否安装了mobileconfig配置文件

Ala*_*lan 6 iphone ipad ios

在iPhone桌面安装mobileconfig文件(在iPhone上以编程方式安装配置文件).

如何检查是否安装了此配置文件?

在iPhone中Settings->General->provision file,我可以找到列表.

Dur*_*n.H 8

我遇到了以下方法来确定是否安装了移动配置,但到目前为止我还没有测试过.

没有可用的直接API.但是有一种解决方法可以通过证书信任验证来实现.

如果我们使用移动配置附加自签名信任ca并将其安装在设备上,我们可以通过检查由自签名根ca签名的叶证书的信任级别来检查是否安装了移动配置.也就是说,如果应用程序中叶证书的信任验证失败,则表示未安装或未安装移动配置

脚步:

  • 创建自签名根CA您可以使用证书助理或终端中的openssl来完成.

  • 创建另一个证书,并得到其签名使用自签名根CA

  • 将上一步中创建的签名证书附加到xcode

  • 自签名根CA附加为Mobile Config的一部分

    • 在IPCU中打开您的移动配置

    • 向下滚动到凭据

    • 按右侧的" 配置 "

    • 选择自签名根CA(确保其以.cer格式)

      IPCU

    • 立即导出Mobile Config并使用全球可信CA(如GoDaddy)进行签名.此步骤是可选的,如果完成,设备将显示已验证的移动配置,否则在安装移动配置时将显示为未验证.


代码片段:

-(BOOL)IsMobileConfigInstalled {

NSString* certPath = [[NSBundle mainBundle] pathForResource:@"LeafCertificate" ofType:@"cer"];

NSData* certData = [NSData dataWithContentsOfFile:certPath];

SecCertificateRef cert = SecCertificateCreateWithData(NULL, (__bridge CFDataRef) certData);

SecPolicyRef policy = SecPolicyCreateBasicX509();

SecTrustRef trust;

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

SecTrustResultType trustResult = -1;

err = SecTrustEvaluate(trust, &trustResult);

CFRelease(trust);

CFRelease(policy);

CFRelease(cert);

if(trustResult == kSecTrustResultUnspecified)
    return YES;
else
    return NO;
}
Run Code Online (Sandbox Code Playgroud)

参考文献:

以下是苹果开发人员论坛中围绕该主题的技术讨论的链接

这是指向您的博客文章的链接.

以下是有关此主题Ref1,Ref22的堆栈溢出讨论的链接