iOS企业内部应用分发

iOS 支持以无线方式安装企业内部应用,而无需使用 iTunes 或 App Store。

VanJay

格式要求

应用格式要求:.ipa,并且使用企业内部预置描述文件进行构建,即经企业证书签名。

无线安装要求:

  1. XML 清单文件(一个 plist 配置文件)
  2. 可让设备访问 Apple iTunes 服务器的网络配置(设备要能连接互联网,因为要校验)
  3. 对于 iOS 7.1 或更高版本, plist 文件和 ipa 文件需要放在 HTTPS 的服务器上
    为了安装应用,用户使用特殊的 URL 前缀从您的网站上下载plist清单文件,您可以分发该特殊前缀的URL给用户或者放置于可供用户访问的互联网上。

准备分发企业内部应用:

  1. 创建应用的归档,格式为 *.ipa 格式,并且归档中包括企业内部预置描述文件,且使用分发证书签名;
  2. 无线清单文件,您可以使用支持编辑 plist 文档的编辑器编写或者直接修改下面提供的范例,各字段意义范例中会写明;
  3. 可直接供内连网或互联网访问的 HTTPS 服务器。

关于无线 plist 清单文件

单文件是一个 XML plist 文件,可供 Apple 设备用来从您的 Web 服务器上查找、下载和安装应用。

以下栏是必填项:

  1. URL:应用 (*.ipa) 文件的完全限定 HTTPS URL
  2. display-image:57 x 57 px 的 PNG 图像,在下载和安装过程中显示,图片的 Web URL
  3. full-size-image:512 x 512 px 的 PNG 图像,表示 iTunes 中相应的应用,图片的 Web URL
  4. bundle-identifier:应用的包标识符,与 Xcode 项目中指定的完全一样
  5. bundle-version:应用的包版本,在 Xcode 项目中指定
  6. title:下载和安装过程中显示的应用的名称
    样本清单文件还包含可选字段。例如,如果应用文件太大,并且想要在执行错误检验(TCP 通信通常会执行该检验)的基础上确保下载的完整性,可以使用 MD5 校验,使用见范例。
    您也可以在一个plist文件中配置多个应用,一个 item 作为一项。

构建网站

将这些项目上传到网站上可供已认证的用户访问的区域:

  1. 应用 (.ipa) 文件
  2. 清单 (.plist) 文件
    您的网站可以是链接到清单文件的单个页面。用户轻点 Web 链接后会下载清单文件,并触发下载和安装。
    以下是示例链接:
    <a href="itms-services://?action=download-manifest&url=https://example.com/manifest.plist">安装应用</a>
    虽然 URL 的协议部分是“itms-services”,但 iTunes Store 并不参与此过程。

配置服务器 MIME 类型(一般不用配置)

您可能需要配置 Web 服务器,让清单文件和应用文件可正确传输。

  • 对于 Server 应用,请将 MIME 类型添加到网页服务的 MIME 类型设置:
    • application/octet-stream ipa
    • text/xml plist
  • 对于微软的互联网信息服务器 (IIS),请使用 IIS Manager 在服务器的“属性”页面中添加 MIME 类型:
    • .ipa application/octet-stream
    • .plist text/xml

无线 iOS 应用分发故障诊断

如果无线应用分发失败,并显示“无法下载”信息:

  1. 请确定应用已正确进行签名。测试方法是使用 Apple Configurator 2 将它安装到设备上,然后查看是否发生错误。
  2. 请确定清单文件的链接是否正确,清单文件是否可供网络用户访问。
  3. 请确定 .ipa 文件(在清单文件中)的 URL 是否正确,并且该 .ipa 文件是否可供网络用户通过 HTTPS 访问。

网络配置要求

如果设备连接到内网,那么您必须允许它访问以下站点:

https://ax.init.itunes.apple.com

使用蜂窝移动网络下载应用时,设备会限制其当前文件大小。如果无法访问此站点,安装可能会失败。

https://ppq.apple.com 设备会联系此网站,检查用来给预置描述文件签名的分发证书状态。

应用更新

  1. 程序内检查 Server 端ipa版本和本地版本,比较是否已发布新版本,并提示用户更新。
  2. 如果用户想保留旧版本数据,请告知其不要卸载旧版本,并且新旧版本 bundle-identifier 相同。
  3. 更新方法:直接使用应用内部的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
如需转载,请注明出处