有一个这样的需求:一些大厂比如:BATDS等,开发的应用很多,有些应用只是员工使用,只需要内部分发,不需要上架AppStore。那么怎么让员工通过iPhone下载尼?
这里就讲一下如何不上架AppStore 通过企业证书打包的ipa 企业分发?
首先:苹果允许用itms-services协议来直接在iphone/ipad上安装应用程序,我们可以直接生成该协议需要的相关文件,这样产品经理和测试都可以直接在设备上安装新版的应用。
1. 第一步准备:
-
299$的企业账号
用于打包,只有用企业证书打包的ipa才能下载 -
对应的plist文件
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>items</key>
<array>
<dict>
<key>assets</key>
<array>
<dict>
<key>kind</key>
<string>software-package</string>
<key>url</key>
<string>https://bsssit.cjh.com/dtap/public/app/ios/VoiceCollection.ipa</string>
</dict>
<dict>
<key>kind</key>
<string>full-size-image</string>
<key>needs-shine</key>
<true/>
<key>url</key>
<string>https://bsssit.cjh.com/dtap/public/app/ios/configFile/audiopro.png</string>
</dict>
<dict>
<key>kind</key>
<string>display-image</string>
<key>needs-shine</key>
<true/>
<key>url</key>
<string>https://bsssit.cjh.com/dtap/public/app/ios/configFile/audiopro.png</string>
</dict>
</array>
<key>metadata</key>
<dict>
<key>title</key>
<string>话术</string>
<key>bundle-version</key>
<string>1.0.0</string>
<key>kind</key>
<string>software</string>
<key>bundle-identifier</key>
<string>com.chj.VoiceCollection</string>
</dict>
</dict>
</array>
</dict>
</plist>
这个我的测试过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确认时的提示)
3. IPA安装包一个
2.部署plist文件与IPA安装包
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 上传到自己的服务器。
3.下载使用
编写一个简单的HTML页面,手机通过访问这个页面点击下载安装
比如:立即下载 的地址就是
itms-services://?action=download-manifest&url=https://.../xxx.plist
<!DOCTYPE HTML>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>Install</title>
</head>
<body>
<p align=center>
<font size="10">
<a style="color:#69DEDA" href="itms-services://?action=download-manifest&url=https://.../xxx.plist">立即下载</a>
</font>
</p>
</body>
</html>
- 我们可以看到 “href=” 里面是指向了 plist 文件的地址(而不是IPA安装包的地址)
- 最好还是使用iPhone设备自带的Safari浏览器打开该页面,点击下载。
上面是Safari 下载,在应用中更新的代码:有更新时触发下面的代码
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];
}
}