有一个这样的需求:一些大厂比如:BATDS等,开发的应用很多,有些应用只是员工使用,只需要内部分发,不需要上架AppStore。那么怎么让员工通过iPhone下载尼?
首先:苹果允许用itms-services协议来直接在iphone/ipad上安装应用程序,我们可以直接生成该协议需要的相关文件,这样产品经理和测试都可以直接在设备上安装新版的应用。
299$的企业账号
用于打包,只有用企业证书打包的ipa才能下载
对应的plist文件
items
assets
kind
software-package
url
https://bsssit.cjh.com/dtap/public/app/ios/VoiceCollection.ipa
kind
full-size-image
needs-shine
url
https://bsssit.cjh.com/dtap/public/app/ios/configFile/audiopro.png
kind
display-image
needs-shine
url
https://bsssit.cjh.com/dtap/public/app/ios/configFile/audiopro.png
metadata
title
话术
bundle-version
1.0.0
kind
software
bundle-identifier
com.chj.VoiceCollection
这个我的测试过plist,注意plist 的结构,一定不能搞错(有同事搞错这个文件,害得我和后台找了2天才搞定)
software-package:url :ttps://bsssit.cjh.com/dtap/public/app/ios/VoiceCollection.ipa (你的ipa的地址)
url:logo图片的地址
bundle-identifier:com.xx.xx:(bundleID需要ipa中需要保持一致)
bundle-version:1.0.0 (CFBundleVersion需要和ipa中的保持一致)
title:话术 (随便起,用于踊跃alert确认时的提示)
itms-services协议:
itms-services://?action=download-manifest&url=https://********/**/tue_test.plist
部署plist文件的地址必须是https,不然在iPhone设备上可能会导致“无法连接到xxx”这样的提示,导致安装失败。如果没有https服务器。可以利用开源中国(http://git.oschina.net/)提供的代码托管服务,托管一下plist文件,然后ipa的安装包和index.html依旧放在自己的服务器上.itms-services协议后面的url地址,改成在plist文件在开源中国上的url(注意url结束到.plist为止,后面的那一串参数不要带,直接手动把http改为https)。
将修改后的plist放到https 的服务、把企业证书打的ipa 上传到自己的服务器。
编写一个简单的HTML页面,手机通过访问这个页面点击下载安装
比如:立即下载 的地址就是
itms-services://?action=download-manifest&url=https://.../xxx.plist
Install
NSString *scheme = @"itms-services://?action=download-manifest&url=https://.../xxx.plist";
[self openScheme:scheme];
- (void)openScheme:(NSString *)scheme {
UIApplication *application = [UIApplication sharedApplication];
NSURL *URL = [NSURL URLWithString:scheme];
if (@available(iOS 10.0, *)) {
[application openURL:URL options:@{} completionHandler:^(BOOL success) {
NSLog(@"Open %@: %d",scheme,success);
}];
} else {
// Fallback on earlier versions
if ([application canOpenURL:URL]) {
[application openURL:URL];
}
}
}
直接安装实例:(慧眼)
UIApplication *application = [UIApplication sharedApplication];
NSURL *URL = [NSURL URLWithString:@"itms-services://?action=download-manifest&url=https://oss.suning.com/sastore/snapp/upload/app_inner/ios/20190524/cc1c8baa88705aab909e571c435eef81.plist"];
if (@available(iOS 10.0, *)) {
[application openURL:URL options:@{} completionHandler:^(BOOL success) {
NSLog(@"Open %@: %d",scheme,success);
}];
} else {
// Fallback on earlier versions
if ([application canOpenURL:URL]) {
[application openURL:URL];
}
}
借鉴:https://www.jianshu.com/p/4eeddf929b90