作为我们移动设备管理功能的一部分,我们为客户提供私有(private)应用商店。管理员可以将 ipa 文件上传到我们的服务器,我们将允许托管设备直接安装这些企业应用程序。
当管理员上传ipa时,我们想做一些验证,如果ipa不符合要求,立即拒绝。具体来说:
我有以下问题:
embedded.mobileprovision
,但 appstore 版本没有该文件。检查该文件的存在是否足以确定上传的 ipa 是否为企业 ipa,或者是否有更准确的方法来识别非企业 ipa?embedded.mobileprovision
中似乎有一个字段 ExpirationDate
,我可以检查它的值来确定到期日期吗?提前致谢。
下面的代码完成了所需的任务。
Boolean foundMobileProvision = false;
Pattern mobileProvisionPattern = Pattern.compile("embedded\\.mobileprovision$");
while ((entry = zipStream.getNextEntry()) != null) {
Matcher mobileProvisionMatcher = mobileProvisionPattern.matcher(entryName);
if (!entry.isDirectory()) {
if (mobileProvisionMatcher.find()) {
foundMobileProvision = true;
CMSSignedDataParser parser = new CMSSignedDataParser(new BcDigestCalculatorProvider(), zipStream);
InputStream plistContentStream = parser.getSignedContent().getContentStream();
Map<String, Object> mobileProvisionAttributes = PlistParser.parsePlistToMap(plistContentStream);
plistContentStream.close();
validateEnterpriseProvision(mobileProvisionAttributes);
}
}
}
zipStream.close();
if (!foundMobileProvision) {
throw new InvalidEnterpriseProvisionException("Uploaded app must have a valid enterprise provisioning profile");
}
private void validateEnterpriseProvision(Map<String, Object> mobileProvisionAttributes) {
Boolean provisionAllDevices = (Boolean) mobileProvisionAttributes.get(IOS_MOBILE_PROVISION_ALL_DEVICES);
if (provisionAllDevices == null || !provisionAllDevices) {
throw new InvalidEnterpriseProvisionException("Uploaded app must have a valid enterprise provisioning profile");
}
Date expirationDate = (Date) mobileProvisionAttributes.get(IOS_MOBILE_PROVISION_EXPIRATION_DATE);
if (new Date().after(expirationDate)) {
throw new EnterpriseProvisionExpiredException("rofile expired");
}
}
关于iOS - 验证私有(private)应用商店的企业配置文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33683634/
欢迎光临 OStack程序员社区-中国程序员成长平台 (https://ostack.cn/) | Powered by Discuz! X3.4 |