【转】在企业内部分发 iOS 应用程序

(via: 破船之家,原文:Provision iOS IPA App for In-House Enterprise Distribution)
 
在企业内部分发 iOS 应用程序很是复杂。通过努力,我成功实现了在企业内部的应用程序分发。我决定用此文来记录个人最佳实践方法,以供未来参考。
 
若是你但愿经过 Safari 能在任意的 iOS 设备上安装应用程序 (不须要发布到 App Store,也不须要经过 iTunes,以及 MDM – 经过 MDM 方法会用到本文建立的 IPA 和 manifest,那么这篇文章能够帮助你。
 
在开始发布企业应用以前,须要具有如下条件:
1. 必须是  iOS Developer Enterprise Program 中的团队成员 (至少是一个 admin)。每一年须要向苹果支付费用 299$。普通的 iOS Developer Program 没法进行企业应用发布。腻味苹果但愿额外确保客户可以对你和你的公司信任,因此你须要申请企业计划。公司的 CEO 须要跟苹果签一个合同。
 
2. 域名须要一个有效的 SSL 证书,该域名用来放置应用程序。没有有效的 SSL 证书,iOS 设备将没法从站点安装应用程序。这样的 SSL 证书也很是昂贵。
 
下面介绍一下我开发中的相关环境配置。我使用 Xcode 5.1,和 iOS 7.1。我仍是一个 iOS Developer Program team 的 admin 成员。互联网上我发现许多过期的相关设置。若是在之后,你发现了错误,或者有更好的解决方案,请回复告诉我!
 
要想按照本文完成应用的企业分发,必须按照如下内容做为出发点: 1. 在 Xcode 中有一个用于企业级分发的工程。 2. 在 iOS Developer Enterprise Program team 中为此工程建立一个 App ID。稍后将在 配置文件中使用到这个 ID。若是尚未准备好这些,先来这里  建立一个恰当的 App ID。此处再也不详细介绍如何建立 App ID。
 
在本文中,咱们将建立下面这些内容:
1. 建立发布证书 (distribution certificate)
2. 建立配置文件 (provisioning profile)
3. 建立 IPA 和 manifest
 
建立发布证书 (distribution certificate)
针对企业级发布,须要一个发布证书 (发布证书与开发证书不一样)对代码进行签名。这个证书仅对建立发布的应用程序有用。不能在 Xcode 的开发中使用。
 
如何得到发布证书:在  iOS Dev Center 中,导航至  Certificates 小节。这里须要登陆到企业开发中心!另外还须要一个至少是 admin 的角色成员 ( 点击查阅iOS 开发中心更多关于角色介绍)。而后点击  Production,会看到以下内容 (敏感部分已经涂黑)
 
在上图中,列出了建立好的全部证书。若是已经建立了一个发布证书,能够重用。不过,重要的是建立证书时所用的证书签名请求文件。若是这个文件没有,那么在 Keychain 中的证书将不会有对应的私钥,也就不能用这个证书对代码作签名。若是你已经记不得是否建立过证书,能够先下载相关的证书,而后双击打开它,在 Keychain Access 应用程序中能够看到相关信息。若是在证书的左侧有一个小的箭头,那么说明在大家的 Mac 电脑中已经存储了此证书对应的私钥,也就能够用该证书对代码进行签名。经过单击箭头展开证书,看起来以下图所示:
若是没有箭头,说明尚未私钥。要么就是私钥存储在另一台 Mac 电脑,那么能够将其传到当前 Mac 电脑中。要么就是你没有私钥,这种状况下,你是不能用这个证书来签名分发应用程序的。解决办法就是:在苹果开发网站中试试别的证书,或者建立一个新的证书:经过在 Mac 电脑中建立一个新的证书签名请求文件。
 
若是尚未构建的话,经过点击右上角的 ? 按钮来建立发布证书,会看到以下界面 (但愿截图与你看到的稍微有点不一样):
选中圆形按钮 In-House and Ad Hoc。不知道为什么,当我为本文截图时,我没法点击这个按钮。多是我已经建立了一个发布证书,因此这个按钮不可选。无论怎样,你应该能够选这个按钮的。
 
在接下来的界面中,会看到这样:
这个界面告诉你如何建立一个 CSR 文件,该文件用于证书的建立。若是你不知道是否已经建立好了这样的一个文件,那么建议在 Spotlight 中输入 certSigningRequest,对电脑中的内容进行搜索。若是有这样一个文件,能够将其用来建立证书,要是没有的话,就手动建立一个。
 
建立好 CSR 文件以后,点击 Continue 来到下一个界面:
选择 CSR 文件,而后点击 Generate。
 
如今,证书已经建立好了:
 
将其下载到本地,而后双击安装到 Keychain中。
 
建立配置文件 (provisioning profile)
要建立用于发布的配置文件,定位到  Provisioning Profiles 的 Distribution 小节。而后点击右上角的 ? 按钮。如今看到以下图所示界面:
 
选中 In House,而后单击 Continue。选择为程序建立的 App ID:
 
而后单击 Continue。如今选择正确的发布证书:
单击 Continue。最后,命名配置文件,而后单击 Generate。
 
下载生成的配置文件,双击安装它:
建立 IPA 和 manifest
打开 Xcode,开始建立 IPA 文件。单击左上角中的项目名称。在中间区域,选择 targets 中的项目名称。选择顶部的 General。在 Team 中,选择 iOS Developer Enterprise Program 团队的名称。(为了本文,我选择了私人帐号中的团队,记得用企业团队替代!):
在中间区域,选择 Project 中的工程名。单击顶部的 Build Settings。在 Code Signing 中选择发布证书:
回到 中间区域的 target 中。单击项目名称。单击顶部的 Build Settings。在 Debug, Any iOS SDK, Release 和 Any iOS SDK 中选择发布证书。在 provisioning,选择以前建立的配置文件:
 
记住,上面这样的配置没法从 Xcode 将 应用程序运行至设备中。这些配置仅用于发布。(你能够点击 ? ,Xcode 将编译整个工程,并尝试将程序运行到设备或者模拟器中。可是以后会看到一个错误信息)。如今,点击菜单中的 Product –> Archive。若是 Archive 不可用,那么须要在 run scheme 中选择一个真实的 iOS 设备。Run scheme 的意思是:
选择 Archive 将为程序建立一个 archive。位了建立一个 archive,须要按照上面介绍的,安装一个合适的配置文件。archiving 完成以后,Xcode 将在 Organizer 中显示 archive:
 
点击 Distribute...,选择 Save for Enterprise or Ad Hoc Deployment:
接着在下拉列表中选择以前建立的配置文件:
接下来的界面中,勾选上 Save for Enterprise Distribution。将会呈现出一些文本框,此处容许你输入一些信息,这些信息将被填入程序的 manifest 文件中。这个 manifest 文件是一个 plist 文件,咱们能够用文本编辑器对其编辑。因此,这里填错了不要紧,稍后能够对其修改。我填入的信息以下所示:
上面的 URL 就是 IPA 文件在互联网中可被访问的路径。注意:虽而后面的处理过程都是基于 HTTPS 的,不过 IPA URL 必须是 HTTP。(注释:译者尝试过 IPA 的路径能够是 http 或 https,固然不排除之后苹果会严格限制)。
如今,你应该得到了两个文件,IPA 文件和 一个 manifest 文件。将它们上传到服务器上 (通常经过 FTP),路径就是在 manifest 文件中指定的相关路径 (本示例的路径是 mydomain.com/apps)。如今建立一个 html 文件,文件中包括以下 html 标记:
  1. <a href="itms-services://?action=download-manifest&url=https://mydomain.com/apps/MyInHouseApp.plist" id="text">Install the In-House App</a> 
manifest 文件的路径必须是 HTTPS!将 html 文件跟 IPA 和 manifest 文件一块儿放置到服务器上。
 
如今咱们来了解一下 HTTPS/SSL:为了可以经过互联网安装 IPA 文件,自从 iOS 7.1 以来,苹果就强制要求,manifest 文件必须经过 HTTPS 方式加载。
 
为了容许 IPA 文件安装成功,HTTPS 链接须要用 SSL 证书来认证,这个证书是从证书签发中心那里针对域名注册获得的。这样的证书很是的昂贵。不过你都已经为 iOS Enterprise Developer Program 支付了299$,那证书的价格就不算什么了。
 
为了安装 IPA,咱们在 iOS 设备的 Safari 中输入 html 文件的 URL 地址(以 HTTPS 开头),而后点击连接,并确认安装提示。
 
若是安装过程当中又错误提示框,大多数时候这个错误提示框没法定位具体缘由。为了找到错误缘由,将 iOS 设备链接到电脑,在 Xcode 中的 Organizer 里面选择对应设备中的 Console,就能够看到并分析相关的日志信息:
 
在上面示例中,我试图使用自签名的证书,经过 HTTPS 来安装程序。可是点击链接以后,我遇到了一个错误提示信息:Cannot connect to johannesluderschmidt.de。经过 Xcode 中的 Console,我看到这些信息:
 
  1. NSErrorFailingURLStringKey=https://johannesluderschmidt.de/app/appName.plist, NSUnderlyingError=0x165c7f30 “The certificate for this server is invalid. You might be connecting to a server that is pretending to be “johannesluderschmidt.de” which could put your confidential information at risk.” 
看吧,Safari 给的提示信息不多,可是在 console 中提供的信息就很是有用。
就是这样啦。很是容易,不是吗?我大约用了一天时间,并查阅了 stackoverflow 中的许多文章就搞定在企业内部分发 iOS 应用程序的技术原理了。
但愿你也能很快掌握!
相关文章
相关标签/搜索