代码改变世界

企业版IDP的申请及“In House”发布

2011-05-13 21:25  乱世文章  阅读(1053)  评论(0编辑  收藏  举报

企业版IDP,即iOS Development Enterprise Program。注意是$299/Year那种,并不是$99/Year的那种。

这种方式的IDP其最大的好处在于:可以发布“In House”应用。

这种应用使用一种叫做“In House Distribution Provisioning Profile”的文件进行发布,不能发布到Apple Shop进行销售,也不需要经过Apple的评审。你可以把“In House”应用通过任何方式发布给你的企业员工、用户及其他你认可的任何人,尤其适合于企业应用的开发。

网上关于个人版/公司版IDP申请流程,以及将应用发布到苹果商店的介绍有很多,但关于企业版IDP以及In House应用的讨论非常之少(尤其国内)。下面,笔者将对这两方面的问题进行一个全面细致的介绍。

1、申请Apple ID

这个步骤就不说了。

2、申请邓白氏编码

邓氏编码是美国联邦政府推荐使用的企业机构编码。可以看成是美国版的“组织机构代码”,只不过已经得到了联合国、澳大利亚政府、欧盟及美国政府的承认,成为了全球企业标准。

苹果公司需要邓氏编码才能申请IDP企业版。这倒不是对国内企业的歧视,而是出于的美国商业习惯。在美国所有的采购合同和商业合同中,都会要求供应商提供一个DUNS(邓氏编码),否则对方可能不会跟你签合同。因为所有的美国企业都使用D&B公司的数据库,这样才能保证所有企业编码不会重复。

申请邓氏编码在D&B公司的网站即可:

  http://www.dunsregistered.com/

中文网站“华夏邓白氏”:

http://dnbregistered.com.cn/

在网站上提交注册申请后,等待1-2天,对方人员会跟你联系(Email)。

原来以为申请会很麻烦(交流上),但实际上是由华夏邓白氏的中籍文员跟你联系的。

邓白氏注册服务有几个版本,收费情况也不一样。笔者一开始收到的邮件是“实地核实”的版本,报价15200/2年。

后来经与北京苹果联系,只需要购买最基本的“标准版”即可,报价8600元/2年, 有网友说2000-3000元/年,现在看来是不可能了 ,在这个物价飞涨的年代:-(。

联系时一定要强调是购买标准版服务(最便宜),否则你可能会花冤枉钱。

收到邮件后,把申请表、协议打印出来,填好并加盖公章,然后加上企业营业执照副本、扫描为电子的,发给对方邮箱。

其实还有一个就是汇款水单(小票),需要发送给对方。这一步其实可以省略。笔者申请时并没有email汇款水单 ,只要对方确认汇款到帐即可。

大约5-7天后,对方发来第2封邮件,告诉你贵公司的编码。此外还可以在网站上安装一个邓白氏电子标识——在网页上嵌入指定脚本,则会在页面上显示一个D&B图标,点击图标自动链接到D&B的网站并呈现你们公司的电子注册信息。

3、申请IDP企业版

登录苹果开发者网站iOS Dev Center,申请Apple Developer Program,只不过这次选择的是iOS Enterprise Program链接(在页面底部)。

点击Apply Now,下一页Continue,下一页选择“Use an existing Apple ID”,Continue。

下一页,输入你的Apple ID、密码登录。

后面就是确认注册协议和填写你的公司资料了(英文)。内容最好同邓氏的一样,否则对方会打电话来确认,需要更改。

填写完公司资料,还要填写委托人联系资料。注意委托人应该有代表公司签字的授权(公司认可,他们会在电话里确认)。

提交资料后,可以在邮箱里收到苹果的邮件,内容大概是感谢你提交了申请,申请的编号是多少,公司名称、邮箱地址等等,如果你想看评审流程,可以登录Member Center。

接下来就是等待苹果的电话了。

这个过程大概要2-3天,对方会安排懂中文的人员来电话,如果没什么问题,接下来(电话之后几分钟)会收到苹果的第2封邮件,大意是要你点击邮件中的链接,查看一个协议(我不知道这个协议和第1个协议有什么不同,反正我直接点同意了)。

协议同意后,显示一个页面,大意是你所申请的国家不支持在线购买苹果产品(在线支付),需要你下载一个pdf的purchase form:

将它打印出来,根据要求填好,然后传真给苹果。

注意,国内信用卡支持美元支付的一般是Visa卡(如招行)和Master卡(如交行),一定要找那种卡上印有“Visa”或”Master”标志的信用卡。

Cvc2 code是指信用卡背面的那串数字(7位)的末3位。

信用卡地址写申请信用卡时登记的地址。

因为公司的传真机无法发送国际传真,我将purchase form扫描后发给了亚洲苹果      chinadev@asia.apple.com , 请其转交给 Billing 团队。

亚洲苹果几分钟后自动回复了一封邮件,并在信中附了一个业务流水号: Follow-Up: 149653 xxx

下次再给亚洲苹果联系时,可以附上这个业务流水号。

然后3-5个工作日后,约早上6点多收到扣费成功短信(信用卡提供的功能)。登录邮箱后,果然收到了苹果的2封email,1封是发票,上面有你的发票号码,单位报账的时候把这封邮件内容打印出来就可以了。另1封是激活邮件,告诉你现在你的idp帐号已经生效了,你点击那个“login now”按钮可以登录到member center,这时可以看到你的developer program overview的状态已经改变。同时,Peoples中会包含一个成员,这个成员就是你注册IDP时所绑定的开发者帐号(Apple ID),同时也是该IDP的Team Admin或Agent。

4、制作iOS 开发者证书

4.1 在本机生成证书请求CSR

打开“钥匙串”应用程序,修改偏好设置如下图所示:

选择菜单“钥匙串访问 -> 证书助理-> 从证书颁发机构求证书”.

注意,如果此时密钥中的某个私钥处于选中状态,则菜单会变为“钥匙串访问->证书助理->用<私钥>从证书颁发机构求证书”,这样制作出来的CSR是无效的。

输入你的email地址和名字。确保email地址和名字与你注册为iOS开发者时登记的相一致。

勾选Saved to Disk(保存到磁盘)及Let me specify key pair information(指定密钥对信息),然后点Continue。

当选择了Let me specify key pair之后,会要求你指定文件保存位置。接下来按下图所示指定密钥对信息:

Continue,即生成了CSR文件。一旦生成CSR,在“登录”钥匙串中会生成一对密钥对(一个私钥,一个公钥)。你可以在钥匙串的密钥栏中查看。

4.2 提交CSR文件

用企业版IDP绑定的Apple ID( 跟制作CSR时要求输的的可能不一致,这里是注册企业版时绑定的iOS开发者帐号,即Agent)登录iOS Provision Portal 。

 

点击“Certificates-> Development” 中的 “Add Certificate”按钮。

接下来点击最下面的“Choose file”按钮,选择所生成的CSR文件,然后点 “Submit”。如果密钥长度未设置未2048,Portal会拒绝CSR。

提交CSR后,Team管理员(Agent)会收到一封提醒邮件,主题为 Certificate Request Requires Your Approval,提示你需要去同意该CSR。此时Agent需要登录Portal去同意该CSR。但实际上,Agent也可能根本不需要去点“同意”,Portal几秒钟后就自动同意了——笔者遇到的情况就是这样的。

4.3 下载并安装开发者证书

如果机器上未安装WWDR证书,请点击 “Certificate-> Distribution”中的链接“Saved Linked File to Downloads” ,以下载WWDR证书,并通过双击WWDR证书进行安装。

在“Certificate -> Development”中, 在Your Certificate下会列出当前有效的开发者证书。 点击“Download”,即可下载到本机。下载后双击,即可安装到本机。 可以在钥匙串“证书”一栏中查看到导入的开发证书。

  Team 成员只能下载自己的iOS开发证书。Team管理员有权下载所有成员的公有证书。苹果不接受CSR中的私钥。私钥仅对创建者有效,并且必须存储在系统钥匙串里。

4.4   保存私钥并迁移到其他系统

如果你在多台电脑上进行开发或者重装系统,那么把私钥存储在安全的地方是件很重要的事情。如果没有私钥,你无法在Xcode中签名代码并进行真机调试。

钥匙串在生成CSR时,就会在“登录”钥匙串中创建一个私钥。该私钥和你的用户帐号绑定,如果重装OS导致该私钥遗失,则该私钥无法再次生成。如果你想在多台电脑上开发和调试,你必须将私钥导入到每一台机器上:

在钥匙串访问程序中,选择登录钥匙串的“密钥”。可以看到有许多密钥对,选择与你的开发者证书相对应的私钥(还记得创建CSR时要你输入的邮箱地址和名字吗?那个名字会显示在私钥的名字上)。然后选择菜单“文件->导出项目…”,将私钥保存为.p12格式(Personal Information Exchange)。当提示输入密码时,设置一个密码并记住它,它会在导入.p12文件时使用。现住,你可以把.p12文件拷贝到其他机器上并双击它进行安装,这时会提示你输入导出私钥时设置的密码。

5、设备IDs

所谓设备ID(device ID又称UDID)是Apple 设备上的40位16进制码,每台Apple设备的device ID都是唯一的,Apple以此来识别不同的iOS设备。

我们通过在Provision Portal中录入设备的device ID,可以允许开发者在指定真实设备上进行调试。在Provision Portal中最多允许输入100个device ID。

因此,录入device ID是后续制作Provision Profile的必需步骤(而Provision Profile又是真机调试的必需步骤)。

5.1 获取device ID

两种获取device ID的方式:

Apple 设备(iPhone,iPod)连接电脑,打开Xcode的Orgnizer:

Apple 设备(iPhone,iPod)连接电脑,打开iTunes:

那个40位16进制的数字就是device ID。

5.2 添加单个device ID

Team管理员登录Provision Portal,点击Devices页面中的“Add Device”按钮,在其中输入:

Device Name:设备名称,输入一个描述该设备的名字。

UDID:即device ID。

点击提交即可。

6、创建App ID

App ID是识别不同应用程序的唯一编码。如果你的程序要连接Apple Push Notification服务(一种push通知),需要用到App ID。如果应用程序之间要共享钥匙串数据,也会用到App ID。总之,App ID在iOS设备上大量被使用。在这里App ID的最大用处是制作真机调试用的Provision Profile(它需要提供一个App ID)。

一个App ID有两部分构成:一个10位字符的Bundle Seed ID前缀,这个Bundle Seed ID由Apple分配,全球唯一,保证不会重复;一个Bundle Identifier后缀,这个Bundle Identifier由Team管理员指派,Apple建议用反域名规则命名这个Bundle Identifier。例如: 8E549T7128.com.apple.AddressBook.

如果你写了一系列应用程序,它们共用相同的钥匙串(如共用密码),或者根本就不使用钥匙串访问,你可以只创建一个App ID,所有的应用程序都使用以星号结尾的App ID。这个星号就是通配符,只能用于App ID最后一个字符。例如,这个App ID可以是: R2T24EVAEE.com.domainname.* 或者 R2T24EVAEE.*

6.1 创建App ID

Agent或Team 管理员登录Provision Portal,点击“App ID”页面中的“New App ID”按钮。

App ID Name:给这个App ID一个名字。如果存在多个App ID,每个App ID需要一个易于识别的名称。

App ID:如前面所述,Bundle Seed ID是Apple分配的,其实这里只需要你输入Bundle Identifier。可以使用统配符*。

7、制作开发者Provision Profile

拥有了开发者证书(Development Certificate),只是表明你有权利在电脑上进行开发,在模拟器上运行程序,但你还不能在iPhone上运行你开发的程序。其实如果你只是在模拟器上调试程序的话,要不要开发者证书都无所谓,因为证书只是用来代码签名(Code Sign)的,如果在模拟器上跑的话,你可以选择不签名(don’t code sign)。

如果要在真机上调试就不一样了。它需要一个Provision Profile,没有这个Provision Profile,苹果设备无法安装运行你开发的程序。这个Provision Profile中记录了一些信息:开发者证书、开发者Apple ID、一系列设备ID(开发者可以使用哪几部设备进行调试)。

7.1 创建开发者Provision Profile

Agent登录Provision Portal,在“Provisioning->Development”,点击“New Profile”按钮。

Profile Name:输入Profile的名字,随意。

Certificate: 选择开发者证书。

App ID:选择一个App ID。

Devices:设备ID列表。

 

点击“Submit”,即会生成Development Provisioning Profile。

7.2 安装Development Provision Profile

所有Team成员都可以下载Development Provision Profile。但只有Profile中记录了设备ID的设备以及iOS开发者证书所指定的开发者能够使用这个Profile。

Portal的“Provisioning->Development”,点击某个profile右边的“download”按钮。下载profile后,将下载到的文件拖拽到桌面Dock面板的Xcode图标上(或者直接拖到Xcode的Orgnizer中)。这会将profile文件拷贝到~/Library/MobileDevice/Provisioning Profiles目录。

7.3 签名并调试

Xcode中打开工程,选中 Target,打开info窗口,在Build面板中找到“Code Signing Identify”,打开并点击下面的“Any iOS Device” :

 

在弹出菜单菜单中选择你的签名,该签名应当和一个灰色的Profile对应。这个Profile就是我们前面安装的Development Provision Profile。例如,我们在7.1中创建的Profile 的Profile Name为My First Development Provisioning Profile,那么我们选择的签名就是位于“My First Development Provisioning Profile”(显示为灰色)下面的Team Leader的开发证书。也就是说“My First Development Provisioning Profile”中绑定的开发证书是Team Leader签名的。

Properties面板(其实就是info.plist中的内容),根据你的App ID设置你的Bundle Identifier。如果你的App ID是 A1B2C3D4E5.com.domainname.applicationname( 我们在前面创建的App ID),那么Bundle Identifier可以是 com.domainname.applicationname 。如果App ID使用了通配符,比如 A1B2C3D4E5.com.domainname.* ,则Bundle Identifier可以是com.domainname.<任意字符>。

点击项目窗口左上角的下拉框,选择“ Device | Debug ”,然后点击“Build and Debug”按钮,编译并在真机上运行程序。

8、发布应用程序

发布应用程序需要使用发布证书(Distribution Certificate)。发布证书的制作,跟制作开发者证书的步骤是一样的,只不过使用的是Provision Portal的“Certificates->Distribution”功能。

把制作号的发布证书下载、安装到本机。

但是发布用的Provision Profile稍有不同。 企业版IDP只有两种发布方式:In House和Ad Hoc。两种Profile制作步骤稍有区别。 用In House方式发布是企业版IDP真正区别于其他版本的IDP所在。我们重点介绍In House方式的发布。

8.1 制作In House 方式的Destribution Provision Profile

Team Admin登录Provision Portal,打开“Provisioning Distribution”页面。

 

Distribution Method:发布方式,选择In House。

Profile Name:Profile名称,用于区别多个Profile。

Distribution Certificate:选择要在Profile中绑定的发布证书。

App ID:指定一个已有的AppID。

Devices(optional):要绑定的device ID。由于In House方式可以在任何Apple 设备上发布,所以不需要设定Devices,这一项为空。

点击“Submit”,生成Profile。将Profile下载到本地进行安装。方法:把Profile文件拖拽到Dock上的Xcode图标。

8.2 制作Ad Hoc方式的Distribution Provision Profile

 

Admin或Agent登录Provision Portal。 打开“Provisioning Distribution”页面。

In House方式大同小异,只不过发布方式选择Ad Hoc,同在Devices(optional)栏勾选要绑定的device ID,最多可选择100个。

点击“Submit”,生成Profile。将Profile下载到本地进行安装。

8.3 编译In House发布版本

打开你的工程。在工程的info窗口的Configuration面板,从Configuration列表中选择Release,点击 Duplicate”按钮,将复制出来的Configuration改名为Distribution。

 

打开Target的Info窗口,在Build面板,将Configuration修改为Distribution:

 

 

 

点击“Any iOS Device”,在弹出菜单中选择对应Profile下对应的发布证书,这个Profile应该就是前面6.1中制作并安装的In House 方式制作的Distribution Provision Profile(还记得Profile Name吗?):

 

 

切换到Properties面板,在Identifier栏输入Bundle Identifier。该Bundle Identifier应根据App ID填写。

在工程窗口,选择当前配置为Distribution:

 

点击“File->New File”菜单,然后选择“Code Signing->Entitlements”:

 

打开Entitlements.plist,反选“get-task-allow”,保存。 该选项允许其他进程(比如调试器)附加到你的程序,当然,在发布阶段,这个选项应当设置为false。

注意,根据Apple的文档,iOS 4.0/Xcode3.2.3之后创建的Entitlements文件不再包括get-task-allow选项——默认情况下,如果Entitlements中没有get-task-allow选项,则不允许附加进程(即无法调试)。

在调试配置下运行时,你不需要Entitlements文件,因此是允许附加进程的(可以进行调试)。但是有时候,你已经有了一个Entitlements文件(比如你已经运行过Distribution配置),如果你再次运行Debug配置,则程序无法启动,因为get-task-allow默认为false(iOS 4.0及Xcode3.2.3以后)。这种情况下,请手动添加一个boolean类型的get-task-allow键,并设置为false。

 

再次打开Target的Build设置面板。在“Code Signing Entitlements”中,输入Entitlements.plist的文件名。

 

点击“Build”编译。注意:你需要准备一个57*57像素的图标,iPhone和iPod会在主屏上显示该图标。

选中工程文件夹Products下面的.app文件,然后点击Action下拉菜单中的Reveal in Finder。

8.4 制作安装包

iPhone应用程序的安装文件主要有两种:.ipa格式和.app格式。前者是以.ipa为后缀名的文件(已经包含了ProvisionProfile文件),后者实际是以.app为后缀的文件夹(不包含ProvisionProfile文件)。因此,前者可以直接发布给用户进行安装,而后者需要和ProvisionProfile文件打包在一起进行发布。

8.4.1 制作ipa包

当把.app文件安装到iTunes的资料库之后,应用程序就是以.ipa的方式存在了。在“资料库->应用程序”中选中这个应用程序图标,右键,选择“在Finder中显示”,然后就可以在Finder中把这个.ipa文件拷贝出来了。.ipa文件即可用后面的方法进行安装。

8.4.2 制作rar/zip包

把编译后的.app文件和ProvisionProfile文件一起压缩为rar/zip文件,即可发送给其他人进行安装,或者发布到网络上以供下载。注意,不要使用Mac自带的归档工具。因为windows使用ANSI编码而Mac使用Unicode编码,二者互不兼容,这样使用归档工具压缩出来的rar/zip包无法在windows下解开。你可以使用开源的压缩工具keka:

http://www.kekaosx.com/release/Keka-0.1.4.2.dmg

keka能制作在windows下兼容的压缩包。解压缩后的文件可用后面介绍的2种方法之一进行安装。如果一种方法不能安装,可换用另一种方法。

 

 

8.5 安装应用程序

Ad Hoc或In House发布的应用程序,可以将.app与Provision Profile文件打包在一起发送给用户。用户可以用两种方式安装:使用iTunes,或者使用iPhone配置使用工具。

8.5.1 使用iTunes

用户将压缩包中的.app和Provision Profile文件拖到iTunes的“资料库->应用程序”下,然后和iPhone/iPod进行同步。

8.5.2 使用iPhone配置实用工具

iPhone配置工具是完全免费的,你可以从这里下载:

http://support.apple.com/kb/DL926?viewlocale=zh_CN

安装后会在“应用程序/实用工具”中生成一个快捷方式“iPhone配置实用工具”。

同样,将iPhone/iPod连上电脑,打开“iPhone配置实用工具”,将.app和Provision Profile文件拖放到“iPhone配置实用工具”的“资料库->应用程序”下,然后选中你的iPhone/iPod,在右边“安装或删除应用程序列表”中,点击某个应用程序右边的“安装”按钮进行安装。

 

9、问题及错误

如果Xcode出现Code sign错误:

Code Sign Errors: profile doesn’t match any valid certificate/private key pair in the default keychain

同时在Organizer中出现下列提示:

A valid signing identity matching this profile could not be found in your keychain

则需要把钥匙串中的所有证书和密钥删除,然后重新请求证书、修复provision profile、下载并安装,一般可以得到解决。