发布企业级iOS应用

大部分企业级iOS应用开发者,都很少接触发布应用的环节。这些工作一般都会是你的项目经理、技术主管来负责。不过我觉得作为iOS开发者,不了解如何发布企业级应用,有些不完美。刚好最近帮助另外一个部门的同事解决了一些发布问题,借此机会,把过程总结一下,希望可以带给大家一些参考。

一、发布应用完整流程

image description
大家想了解完整的流程,可以参考App Distribution Guide

本文我们主要讲解发布企业级iOS应用流程中,Member Center 和 Xcode 操作的内容。

二、发布企业级iOS应用流程

发布企业级iOS应用流程如下图所示:

image description

1、前提条件

在进行下面操作之前,有个前提条件:你必须是 iOS Developer Enterprise Program 中的成员,且用户角色必须是Agent或者Admin(工作中我们一般情况下都是最多能有Admin角色)。因此你必须让公司iOS Memeber Center 管理者邀请你加入并分配给你至少是Admin角色。有关不同角色的权限,可以参考Managing Your Team in Member Center。管理者邀请界面如下:

image description

之后用你自己的账号进入开发者中心,按照提示加入相应Team即可。

2、创建发布证书 Certificate

(1)下载发布证书

在你的Member Center中,选中Certificates->Production,如果你们已经有了Certificate文件,把它下载下来,你会发现是个ios_distribution.cer文件,直接双击就安装到你的钥匙串工具中了。

其实此时你是拥有了私钥,并且该私钥和Member Center存储的公钥是对应的,这部分内容会在下文中详细解释。

(2)创建全新的发布证书

如果没有Certificate,则需要你重新创建一个,其步骤如下图所示:

image description

你会发现第3步时,要求你选择一个CSR文件。CSR文件即.certSigningRequest文件。创建过程如下:打开钥匙串访问工具,钥匙串访问->证书助理->从证书颁发机构请求证书:

image description

填写相关信息,其中:用户电子邮件地址、常用名称未必填项,CA电子邮件地址可以不填写(尽管它提示“必需”)。这里要注意“常用名称”,最好起名时和你MAC用户名一致,或者起个起码容易辨认的名字。因为当你下载发布证书(即上述ios_distribution.cer文件),双击安装后,在钥匙串访问工具可以通过该名称方便的找到它:
image description

之后,选择“存储到磁盘”,下一步,即可在本地保存一个CSR文件。创建全新的发布证书时,选择这个CSR文件即可。

发布证书创建完毕之后,你也需要把它下载下来,双击安装到你的钥匙串工具中。

3、创建App ID

image description

这个过程没什么好说的,大家看图就明白了。只是要注意:

  • Name 起名时最好能够一眼辨认,因为可能你的Team会创建N多App ID,随意起名找起来会很麻烦。另外,此处不知道何时出现了改版,以前Name起名时可以有下划线,现在不允许了,因此之前如果你有创建过带下划线的名称,如今要进行修改时,必须更换Name。
  • Bundle ID 要与你的App工程保持完全一致,包括大小写,否则是不可能打包成功的。

4、创建配置文件 Provision

image description

image description

我们可以看出,创建配置文件 Provision 的过程,实际就是把 APP ID 与 发布证书 Certificate 绑定到一起的过程。下载后,可以看到这是一个.mobileprovision文件。

需要注意的是,配置文件 Provision 的有效期是一年。一年之后,如果你没有发新的App版本,原有应用会出现如下错误警告:应用“XXX”无法打开,以为预置描述文件已过期。

因此,你的团队需要维护这些Provision,在文件到期前需要重新Generate一下Provision,并且重新打包发布一个新的App版本,以免影响用户使用。操作过程如下图所示:

image description

5、Xcode打包配置

选中工程,打开Build Settings标签,找到Code Signing。如下图1所示配置相关信息。其中最主要的是:

  • Code Signing identity下的Release,选中你们的发布证书-Certificate
  • Provision Profile下的Release,选中你们的描述文件-Provision

在设置时如果没有出现相应的Provisioning Profiles选项,如下图2所示,打开XCode->Preferences->Account,双击账号所在Team,弹出下图3所示的对话框,DownLoad你需要的Provisioning Profiles,之后就可以选择它了。

image description

6、Archive并导出发布文件

(1)Archive

XCode 最近几个版本的Archive都有所不同。撰写本文时,我用的是XCode Version 7.1.1 (7B1005),Archive时选择如下所示:

image description

(2)打开Organizer

Build成功之后,会出现下面图1所示的Organizer界面。

这个界面关闭后,可以通过XCode->Window->Organizer 重新打开。

(3)导出.ipa文件

点击Organizer界面最右侧的Export,弹出图2所示的对话框,让你选择导出方法。选择第3个-Save for Enterprise Deployment

对话框中选项1、3、4都容易理解,只有第2个Save for Ad Hoc Deployment 不知所云。其实,它是说保存到本地,准备在账号添加的可使用设备上使用。在正式发布之前,我们都希望App能在周围的朋友之间先进行测试,提提意见,修改完善之后再发布到App Store上。Apple考虑到这一点,因此通过Ad Hoc来实现发布前的用户测试。从另一个角度讲也就是通过Ad Hoc将未发布的App 给其他人提前免费使用。

接下来,选择你所在的Team(图3)。

这一步真不知道干嘛用,之前打包配置时已经选了,为什么在此还要选?希望知道的朋友可以告诉我。

选择支持设备(图4),一般都会选第一个,选第二个的话这能指定特定设备,如iPad Air 2才能使用。

image description

选择是否创建概要文件(图5)。
Include manifest for over-the-air installation 勾选上则会创建plist文件。
勾选之后,会让你填写一些信息,比如网站地址什么的,这里就不再截图了,一看就明白。只是在此建议plist文件名与ipa名一致,方面后期管理。

over-the-air: OTA 目的是让企业用户能够在脱离Apple App Store的情况下通过网页无线发布 iOS 应用。简单来讲就是在Safari中点击一个链接就可以在iPhone或iPad上下载并安装应用(目前很多越狱软件都是使用的这种发布方式)。更多内容可以参考iOS 部署参考

这里还有一个选项-Rebuild from bitcode(图6), 大家自己阅读它的含义吧,在此勾选上就行了。

三、部署到服务器

这部分内容不是本文重点,大家参考这些文章吧:

iOS开发企业版ipa分发 以及在线安装

iOS开发企业版ipa分发

此外还有一些解决Https问题的文章,大家可以阅读:

http://blog.csdn.net/x32sky/article/details/21237573

http://stackoverflow.com/questions/20276907/enterprise-app-deployment-doesnt-%20work-on-ios-7-1/22325916#22325916

http://www.wosign.com/support/ssl_installation.htm

http://m.blog.csdn.net/blog/SiamPig/21560401

http://www.cnblogs.com/janken/p/3726017.html

四、理解你做的这些事情

从Member Center左侧导航栏我们可以看出,你做的这些工作,都是围绕3个东西:

  1. Certificates
  2. Identifiers-App IDs
  3. Provisioning Profile

英文直译:

  1. 证书/凭证
  2. 标识符-App IDs
  3. 配置文件

要解释这几个东西,我们需要先了解一下这几个概念:

  • 公钥和私钥(Public Key and Private Key)
  • 摘要(Digest)
  • 签名(Signature)
  • 数字签名(Digital Signature)
  • 数字证书(Digital Certificate)
  • 证书中心(Certificate Authority,简称CA)

公钥和私钥是成对的,它们互相解密。公钥加密,私钥解密。私钥数字签名,公钥验证。

数字签名(Digital Signature)由两部分组成。使用HASH函数可以生成数据的”摘要”(Digest),用私钥对摘要(Digest)进行加密,生成”数字签名”(Signature)。

对于公钥,我们无法确认它就是属于某人的。因此需要有个组织-证书中心(Certificate Authority,简称CA),能够颁发一个证书-数字证书(Digital Certificate),通过这个证书能够证明,某个公钥就是某人的。

下面摘抄一些百度百科的原文:

数字签名,顾名思义,就是使普通签章的数字化,他们的特性都是某人可以轻易制造签章,但他人却难以仿冒。数字签名可以永久地与被签署信息结合,无法自信息上移除。数字签名大致包含两个算法:一个是签署,使用私密钥匙处理信息或信息的哈希值而产生签章;另一个是验证,使用公开钥匙验证签章的真实性。RSA和DSA是两种最流行的数字签名机制。数字签名是公开钥匙基础建设(public key infranstructures, PKI)以及许多网络安全机制(SSL/TLS, VPNs等)的基础。

数字签名主要功能:保证信息传输的完整性、发送者的身份认证、防止交易中的抵赖发生。

数字签名技术是将摘要信息用发送者的私钥加密,与原文一起传送给接收者。接收者只有用发送者的公钥才能解密被加密的摘要信息,然后用HASH函数对收到的原文产生一个摘要信息,与解密的摘要信息对比。如果相同,则说明收到的信息是完整的,在传输过程中没有被修改,否则说明信息被修改过,因此数字签名能够验证信息的完整性。

我相信你看完这些一定会不知所云。因为你需要阅读下这篇文章:What is a Digital Signature。英文不好的可以看看这篇翻译。不过还是推荐你先读一遍英文原版的内容,因为很容易把一些词汇和苹果官方文档的内容联系在一起,便于深入理解。

而要了解苹果做的事情,你需要阅读这些文章:

官方文档Maintaining Your Signing Identities and Certificates中。

苹果开发者账号那些事儿(二)

苹果开发者账号那些事儿(三)

好了,匆匆收场。不是不想写了,而是我也理解的不是很透彻,但找到了深入理解的方向和文章,希望能够和大家共同进步。