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

7

你的意思是通过编程来检查吗? - Guilherme
是的,通过编程进行检查。 - Alan
1个回答

10

我发现了一种以下方法来检测移动配置是否已安装,但我目前还没有测试过。

目前没有直接的API可用于此。但是通过证书信任验证的方式可以实现这一点。

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

步骤:

  • 创建一个自签名根CA,可以使用Certificate Assistant或在终端中使用openssl进行操作。

  • 创建另一个证书并使用自签名根CA签名它

  • 将在上一步骤中创建的已签名证书附加到Xcode

  • 自签名根CA作为移动配置文件的一部分附加

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

    • 向下滚动到Credentials

    • 在右侧按Configure

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

      iPCU

    • 现在导出移动配置文件并使用类似于GoDaddy的全球受信任CA进行签名。如果完成了此步骤,则设备将显示已验证的移动配置文件;否则,在安装移动配置文件时将显示为未经验证。


代码片段:

-(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;
}

参考资料:

这是一个苹果开发者论坛上针对该主题的技术讨论链接

这是一篇博客文章,按步骤为您解释了此过程。 链接

以下是关于该主题的stackoverflow讨论链接Ref1, Ref22


1
谢谢您在这里列出步骤而不是仅提供链接。该网站似乎已经死了,所以这篇帖子非常有帮助。 - Bot
1
苹果开发者论坛的链接已经失效,请使用以下链接:https://forums.developer.apple.com/message/121584#121584 - bkbeachlabs
1
我写了一篇详细的博客文章,讲述如何在发布版本中启用自定义调试功能。这里是链接:https://andrewking.ca/2020/04/how-to-enable-custom-debugging-in-release-builds/ - bkbeachlabs

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接