iOS企业内部应用分发
iOS 支持以无线方式安装企业内部应用,而无需使用 iTunes 或 App Store。
VanJay
格式要求
应用格式要求:.ipa,并且使用企业内部预置描述文件进行构建,即经企业证书签名。
无线安装要求:
- XML 清单文件(一个 plist 配置文件)
- 可让设备访问 Apple iTunes 服务器的网络配置(设备要能连接互联网,因为要校验)
- 对于 iOS 7.1 或更高版本, plist 文件和 ipa 文件需要放在 HTTPS 的服务器上
为了安装应用,用户使用特殊的 URL 前缀从您的网站上下载plist清单文件,您可以分发该特殊前缀的URL给用户或者放置于可供用户访问的互联网上。
准备分发企业内部应用:
- 创建应用的归档,格式为 *.ipa 格式,并且归档中包括企业内部预置描述文件,且使用分发证书签名;
- 无线清单文件,您可以使用支持编辑 plist 文档的编辑器编写或者直接修改下面提供的范例,各字段意义范例中会写明;
- 可直接供内连网或互联网访问的 HTTPS 服务器。
关于无线 plist 清单文件
单文件是一个 XML plist 文件,可供 Apple 设备用来从您的 Web 服务器上查找、下载和安装应用。
以下栏是必填项:
- URL:应用 (*.ipa) 文件的完全限定 HTTPS URL
- display-image:57 x 57 px 的 PNG 图像,在下载和安装过程中显示,图片的 Web URL
- full-size-image:512 x 512 px 的 PNG 图像,表示 iTunes 中相应的应用,图片的 Web URL
- bundle-identifier:应用的包标识符,与 Xcode 项目中指定的完全一样
- bundle-version:应用的包版本,在 Xcode 项目中指定
- title:下载和安装过程中显示的应用的名称
样本清单文件还包含可选字段。例如,如果应用文件太大,并且想要在执行错误检验(TCP 通信通常会执行该检验)的基础上确保下载的完整性,可以使用 MD5 校验,使用见范例。
您也可以在一个plist文件中配置多个应用,一个 item 作为一项。
构建网站
将这些项目上传到网站上可供已认证的用户访问的区域:
- 应用 (.ipa) 文件
- 清单 (.plist) 文件
您的网站可以是链接到清单文件的单个页面。用户轻点 Web 链接后会下载清单文件,并触发下载和安装。
以下是示例链接:
虽然 URL 的协议部分是“itms-services”,但 iTunes Store 并不参与此过程。<a href="itms-services://?action=download-manifest&url=https://example.com/manifest.plist">安装应用</a>
配置服务器 MIME 类型(一般不用配置)
您可能需要配置 Web 服务器,让清单文件和应用文件可正确传输。
- 对于 Server 应用,请将 MIME 类型添加到网页服务的 MIME 类型设置:
- application/octet-stream ipa
- text/xml plist
- 对于微软的互联网信息服务器 (IIS),请使用 IIS Manager 在服务器的“属性”页面中添加 MIME 类型:
- .ipa application/octet-stream
- .plist text/xml
无线 iOS 应用分发故障诊断
如果无线应用分发失败,并显示“无法下载”信息:
- 请确定应用已正确进行签名。测试方法是使用 Apple Configurator 2 将它安装到设备上,然后查看是否发生错误。
- 请确定清单文件的链接是否正确,清单文件是否可供网络用户访问。
- 请确定 .ipa 文件(在清单文件中)的 URL 是否正确,并且该 .ipa 文件是否可供网络用户通过 HTTPS 访问。
网络配置要求
如果设备连接到内网,那么您必须允许它访问以下站点:
https://ax.init.itunes.apple.com
使用蜂窝移动网络下载应用时,设备会限制其当前文件大小。如果无法访问此站点,安装可能会失败。
https://ppq.apple.com
设备会联系此网站,检查用来给预置描述文件签名的分发证书状态。
应用更新
- 程序内检查 Server 端ipa版本和本地版本,比较是否已发布新版本,并提示用户更新。
- 如果用户想保留旧版本数据,请告知其不要卸载旧版本,并且新旧版本 bundle-identifier 相同。
- 更新方法:直接使用应用内部的openURL 方法,打开的是plist文件的web url 带 itms-services描述 链接(真机)。
证书验证
- 用户首次打开应用时,系统会通过联系 Apple 的 OCSP 服务器来验证分发证书。如果证书已撤销,应用将不会启动。为了验证状态,设备必须能够访问 ocsp.apple.com。
- OCSP 响应会在设备上缓存一段时间(由 OCSP 服务器指定),当前为 3 到 7 天之间。在重新启动设备和缓存的响应过期之前,将不会再次检查证书的有效性。如果当时收到撤销命令,系统将阻止应用运行。
【警告】撤销分发证书会导致使用该证书签名的所有应用失效。只有万不得已时才应撤销证书,比如确定专用密钥已丢失或确信证书已遭破解。
示例
示例 iOS 应用 plist 清单文件,可复制,保存为plist格式,也可从 这里 下载
<!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>md5-size</key>
<integer>10485760</integer>
<key>md5s</key>
<array>
<string>41fa64bb7a7cae5a46bfb45821ac8bba</string>
<string>51fa64bb7a7cae5a46bfb45821ac8bba</string>
</array>
<key>url</key>
<string>https://www.example.com/apps/foo.ipa</string>
</dict>
<dict>
<key>kind</key>
<string>display-image</string>
<key>needs-shine</key>
<true/>
<key>url</key>
<string>https://www.example.com/image.57x57.png</string>
</dict>
<dict>
<key>kind</key>
<string>full-size-image</string>
<key>md5</key>
<string>61fa64bb7a7cae5a46bfb45821ac8bba</string>
<key>needs-shine</key>
<true/>
<key>url</key><string>https://www.example.com/image.512x512.jpg</string>
</dict>
</array>
<key>metadata</key>
<dict>
<key>bundle-identifier</key>
<string>com.example.fooapp</string>
<key>bundle-version</key>
<string>1.0</string>
<key>kind</key>
<string>software</string>
<key>subtitle</key>
<string>Apple</string>
<key>title</key>
<string>Example Corporate App</string>
</dict>
</dict>
</array>
</dict>
</plist>
简单配置示例
作为包体积较小的应用,如以下简单配置即可,从这里下载
<!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://yourwebsite/appName.ipa</string>
</dict>
<dict>
<key>kind</key>
<string>full-size-image</string>
<key>needs-shine</key>
<true/>
<key>url</key>
<string>https://yourwebsite/app_icon_full_size.png</string>
</dict>
<dict>
<key>kind</key>
<string>display-image</string>
<key>needs-shine</key>
<true/>
<key>url</key>
<string>https://yourwebsite/app_icon_download.png</string>
</dict>
</array>
<key>metadata</key>
<dict>
<key>bundle-identifier</key>
<string> your app bundle id </string>
<key>bundle-version</key>
<string>shortVersion</string>
<key>kind</key>
<string>software</string>
<key>subtitle</key>
<string>欢迎使用</string>
<key>title</key>
<string> app 名称</string>
</dict>
</dict>
</array>
</dict>
</plist>
Author: CoderJay
如需转载,请注明出处