入行iOS行业一年多了,iOS上架这块基本上所有的问题都遇到过了,有幸管理过三种不同的apple开发者账号,和相应的证书。前两天在帮一家公司处理app的企业证书分发,当时以为很简单的事情,分分钟就OK,结果遇到了一个坑,七七八八的浪费了我很多时间。

拿到证书和开发者账号后就开始打包,但每次都提示签名不对,提示指定的Provisioning profile 不存在,我做了以下的尝试:

(1)是否Provisioning profile文件不存在或者是invalid。于是,登录到开发者中心逐一检查AppID、Provisioning profile,并没有什么异常,但是还是刷新了一下Provisioning profile,并在本地清理掉所有的Provisioning profile,重新打包还是出错。

(2)是否是Xcode版本的问题。我的Xcode版本是7.2,clean一下Xcode,清理一下缓存,并用CleanMyMac清掉了Xcode运行时产生的所有缓存,重新打包还是不出错。依然提示指定的Provisoning profile不存在。

(3)采取了一种暴力的方式,对于新手不推荐!copy错误提示中的UUID,关掉当前工程,进入到当前工程的文件夹下,找到对应的.xcodeproj文件,鼠标右键显示包内容,打开包里面的project.pbxproj文件,推荐使用 Sublime Text来打开。全局搜索copy到的UUID,然后全部删除,并保存。重新打开工程打包,依然出错。

(4)配置好对应的Team之后,不配置code sign,直接archive,导出方式选项里选择Save for Enterprise deployment。无法导出,会有如下错误:

iOS 如何查看开发者账号到期时间_App


add进去之后,输入你的apple id 除了提示账号已经存在并没有什么卵用!当时觉得应该是证书的问题。

(5)尝试着以另外的三种导出方法来导出,结果都成功了。就觉得应该是账号的问题。

(6)记得企业账号是可以添加多个team 成员的,以为是当前member的role权限不够,登录到Apple member center发发先我拿到的账号对应的role角色是agent,拥有足够的权限去配置证书、AppID、Provisioning Profiles。开始怀疑这个账号到底是不是真的企业账号。

(7)在开发者中心的账号信息那里看到了Account Type为 Company/Organizations。问题就出在这里,这个不是个企业账号,怎么可能够打包出In-House的ipa!!!晕死,浪费了我很多时间好么!!!

当然,不能怪别人,客户不懂技术,自然不知道apple的企业分发ipa是个什么回事,也自然不清楚apple 的开发者账号的区别了。

证书的制作流程网上很多,随便一搜就有。这里我简单的记录一下三种账号的区别,以及对应的证书、 App ID 、 Provisioning Profiles的区别。

一、苹果对开发者主要分为3类:个人、组织(公司、企业)、教育机构。即:

1、个人(Individual)

2、组织(Organizations)

组织类又分为2个小类:

(1)公司(Company)

(2)企业Enterprise3、教育机构(Educational Institutions)

更多内容介绍,请看苹果官方说明:Choosing a Membership
新进入一家公司,拿到开发者账号(也就是apple ID)之后,点击Your account就可以看到你的账号信息了。如下图:

iOS 如何查看开发者账号到期时间_App_02



从Account Type类型可以看出, 我这个账号是Company/Organization类型的,下面再来看一个账号;

iOS 如何查看开发者账号到期时间_ios_03



这个是一个人账号,再来看一个账号,这个是一个企业账号,也即是所谓的In-House发布时所需要的证书。

iOS 如何查看开发者账号到期时间_iOS企业账号打包_04


二、我们经常最关注的是个人、公司、企业这3类,公司和企业都属于“组织”大类,下面对这3个做下简单对比:

A、个人(Individual):

(1)费用:99美元一年

(2)App Store上架:是

(3)最大uuid支持数:100

(4)协作人数:1人(开发者自己)

说明:“个人”开发者可以申请升级“公司”,可以通过拨打苹果公司客服电话(400 6701 855)来咨询和办理。

B、公司(Company):

(1)费用:99美元一年

(2)App Store上架:是

(3)最大uuid支持数:100

(4)协作人数:多人

允许多个开发者进行协作开发,比个人多一些帐号管理的设置,可设置多个Apple ID,分4种管理级别的权限。

说明:申请时需要填写公司的邓白氏编码(DUNS Number)。

C、企业 (Enterprise)

(1)费用:299美元一年

(2)App Store上架:否

(3)最大uuid支持数:不限制

(4)协作人数:多人

费用:299美元一年

说明:需要注意的是,企业账号开发的应用不能上线App Store,只能企业内部应用。适合那些不希望公开发布应用的企业。同样,申请时也需要公司的邓白氏编码(DUNS Number)。

三、三种账号对应的证书和Provisioning Profiles、App ID区别。

这里只讲对应的Product证书和Distribution类型的 Provisioning Profiles的区别,关于证书的制作流程不讲。App ID没什么好说的,三种账号创建的App ID没有什么区别,选择唯一还是通用根据需求来就好。

(1)证书的区别:

首先来看看company类型账号的证书

iOS 如何查看开发者账号到期时间_iOS企业账号打包_05


这个product 选项里面我们通常会用到也就是AppStore and AdHoc和 Apple Push这两个了。再来看看 Individual的,如下图:

iOS 如何查看开发者账号到期时间_ios_06


跟company没区别,原因在上面已经介绍过了。再来看Enterprise的,

iOS 如何查看开发者账号到期时间_ipa_07


前面有讲到过,Enterprise账号是不可以上传引用到AppStore的,所以这里就没有AppStore的选项。

(2)Provisioning Profiles

iOS 如何查看开发者账号到期时间_ios_08


再来看看individual账号的

iOS 如何查看开发者账号到期时间_App_09


如我们所猜想的,跟company账号是一样的。再来看看enterprise账号的,

iOS 如何查看开发者账号到期时间_iOS企业账号打包_10


没有AppStore选项。

关于Apple开发者账号的介绍就这么多。

有一个需要注意的,iOS8之后,可以给应用添加widget extension,这个时候无论何种方式打包,一定要记得在开发者账号给widget添加独立的App ID以及对应的Provisioning Profile。打包前code sign选对就好。Xcode7不再支持通配符打包,不管是否带widget!!!

客户的问题还没有解决,目前有两种选择,要么让客户将company账号升级到企业账号,要么就挂到别人现成的企业账号上,但是这个需要将AppID从当前的账号上移除,操作起来风险很大!待商讨。