iOS开发证书制作及项目上传流程

iOS开发中证书制作和项目上传发布这一块,很多初学者都对此比价困扰,有些即便是工作有些时日的对此可能也不是很清楚,毕竟可能只是写个代码,这一块并不怎么参与。我刚工作那会开始时一直在网上看了很多文档,总是过一段时间就会忘,后来参与项目中操作几次基本就很顺手了。

我也见过工作几年的对此不了解的人,然而这什么都说明不了,人家工作能力依然是很强。只是术业有专攻,在很多专项上造诣很深,但是这却被很多人低估。

我所见过的觉得技术比较厉害的人,身上并没有什么戾气,相反会觉得自己知之甚少,毕竟接触的越多觉得不会的就更多。而表现很嚣张的人一般有两类,一是在大学时就有接触,并且小有研究,这时候正是心高气傲的年纪,经常会指点江山,越俎代庖替那些行业大佬做决断,另一种就是刚工作没多久觉得了解的差不多了的人,能力大小决定视野层次,有时候真的觉得这也许和能力没有关系,只和为人有关。犹如以前看到的一段子,一人问学计算机专业的朋友能不能帮忙盗个QQ密码,帮忙写个游戏外挂,帮忙刷个票等,得到不能的答案后心里嘀咕:”你tm不是学计算机的吗”。正因为学计算机的,所以才知道这事情的难度,然而外人可能并不知道,理所当然的觉得这并非难事,说不定还会想这点事都办不成这tm的也算是计算机高材生?工作以来偶尔在群里给一些人解决问题,慢慢的意识到一些现象,现在也就仅限于常联系的那几个人了。别人问你问题的时候,也许是听别人说了你很厉害,也可能只是单纯的看你工作几年了觉得肯定有一定能力,也许仅仅是因为看到你刚刚为其他人解决了一个问题,这时候如果你不会,那结果很自然,他们会觉得这货也并不怎么样,而如果你会但是你所讲的可能他们并不是听得很懂,他们又会觉得你是在装逼,可能是在不懂装懂,只有你很顺利的解决他们的问题并且他们很快就能理解的时候,这才是一次皆大欢喜的问答流程,然而这种可能性并不大,随着问题的难度越来越深,这种可能性越来越小。所以现在很多时候,如果我觉得并不能马上解决,或者要解决又需要科普一些其他的技术要点,或者本身就不太清楚,干脆就直接说不会或者没时间,这已经违背了我的意愿,然而我却越来越多的这么做,这不是一个好现象。

在生活中也时常会有这种问题,本身计算机专业,但是我大学时是个典型的渣渣,虽然现在也是,但是大学更甚。经常会有朋友的电脑出问题打电话咨询我,尽管经常我觉得回答的还可以,但问题却少有解决,所以我一次又一次的让他们失望了,虽然有时觉得这根本不是一个问题,但是结果很明显。有时是他们的执行力的问题,有时是我的问题,或描述不清楚,或力所不能及。我把这当成一个遗憾,没错,是遗憾。

有人会说,真正的大牛并不介意他人的观点,毕竟实力在那摆着。这话从来都是个伪命题,纯粹是在扯犊子,难道包括诋毁吗?古代中国文人无法容忍别人看低自己的风骨,现在做技术的也一样不能接受别人对自己的质疑,尤其是来自技术不堪的人的质疑。哪些人可以做到“我不在意,便伤不到我”这个境界,只有那些功成名就,已经不需要考虑外界声音的时候。我对陌生人的贬低、谩骂、不信任毫无在意,但是我的那些朋友的声音我没法不在意,因为他们是我生活的一部分,是这样。

以上,旨在说明,一切技术要点并不是衡量一个开发人员的能力标杆。闻道有先后没错,术业有专攻也是真的,别去妄图通过某个单一指标去判断技能水平,很多人总是惊艳与无形处!

这都是在扯犊子,说正经的。


开发者账号分为个人、公司和企业,当然还有教育结构。公司账号相比个人账号多了些账号管理的设置,允许多个开发者协作开发,在申请时须填写公司的邓白氏编码(DUNS Number),企业账号不能发布应用到App Store,只能企业内部使用,申请时也需要邓白氏编码。而教育账号费用0美元 ,只能教育机构或学院内部使用,必须是苹果iOS开发者计划授权机构,不能对外正式发布iOS应用程序。

开发者账号在申请后,需要创建开发证书和发布证书。一般而言,一个账号需要一个开发证书和一个发布证书,使用过程可能还有若干个推送证书。其实可以创建不止一个开发和发布证书,但是再次创建的时候,之前的就不能使用了,所以账号申请下来以后,开发和发布证书创建好后,下载下来,导出私钥,保存好,在组内其他成员使用的时候避免再次创建开发和发布证书,只需把私钥给他即可。
账号申请下来后如何创建证书呢?下面演示一下流程

首先打开钥匙串,创建一个证书签名请求文件,点击从证书颁发机构请求证书

电子邮件地址填写申请的开发者账号,选择存储到磁盘,找个位置存放

接下来进入官网,如下图,Certificaes下面的即是该账号下的证书文件,1是推送证书(发布模式),对应的Type是Apple Push Services,2是开发证书,对应的Type是iOS Development,3是发布证书,对应的Type是iOS Distribution,4是推送证书(开发模式),对应的Type是Apns Development iOS,如果项目不需要推送,推送证书完全不需要创建,只需要一个开发证书一个发布证书即可。初次申请账号后这里面是空的,需要自己创建一个开发和发布证书。点击右上角的+号

然后选择创建的证书类型,1是开发证书,2是推送证书(开发模式),3是发布证书,4是推送证书(发布模式),选择后然后下一步

这一步是选择App ID,也就是项目的唯一标示,对应的是项目中的Bund ID,在制作推送证书的时候需要这一步,普通的开发证书和发布证书不会出现这一步,接下来会讲到

Choose File点击选择刚才我们生成的证书签名请求文件,再下一步即生成了相应的证书。把证书下载下来,双击安装,这时钥匙串里就会显示我们生成的证书。

打开钥匙串,如下图,我这里1、2都是推送证书(开发模式),3、4都是推送证书(发布模式),5是系统证书,6、7、8是开发证书,因为我有三个开发账号,所以这里有三个开发证书,9是发布证书。这个时候官网上就会显示我们生成的证书,但是别人下载的时候安装并不能使用,因为没有证书签名请求文件,安装后会显示缺少私钥,就是8、9下面钥匙显示的地方。那别人怎么拿到这个证书呢?记住,不要重新去创建,会导致之前的不能使用,需要我们把开发和发布证书的私钥导出来,可以随便设置一下密码,发给需要用到的人,这个导出的p12文件包含证书和签名请求。以前在Xcode4.5的时候还有一种导出方法,就是通过Xcode直接导出来一个文件即可,但是Xcode4.5之后就不再支持这种方法了。

另外,证书签名请求文件,即我们第一步生成的那个CSR文件,只能使用一次,如果需要再次制作证书需要重新生成证书签名请求文件。证书做好之后,如果我们想真机调试,还需要做什么呢? 我们每个程序都有一个Bund ID,用来唯一标示一个程序。这个Bund ID在推送的时候需要使用到,苹果需要根据Bund Id来找到手机上的指定应用。下图Identifiers目录下App IDS就需要填写项目签名,也就是标示。这里是使用反向域名的形式,一般是com.公司名.*。分为两种,1是Explict App ID,固定标示,这个要和项目的Bund ID严格一致,2是Wildcard App ID广域标示,*是通配符,可以匹配所有项目。如果项目需要用到推送,需要创建一个固定标示,因为推送需要根据Bund ID找到手机上的应用。如果不需要推送,两种都可以使用,为了方便,不推送的情况下建议使用通配符

下图是我的一些App ID,1、2、5均使用了通配符,其中使用1的App ID可以调试所有的应用,3、4是固定标示。

接下来还要添加我们的设备,告诉苹果哪些设备需要用来调试。个人和公司账号都是99台的上限,企业是299台,只在开发模式下需要。将设备的UDID添加进来

接下来是生成描述文件

描述文件分为三种,开发(iOS App Development)、发布(App Store)和测试(ADHoc),ADHoc是指打包后用来测试的,有时候需要在上传到App Store前测试一下,选择后进行下一步

这个时候需要选择App ID,如果选择含有通配符的App ID,那就可以运行在所有符合这个App ID的项目中,如果选择固定标示的App ID,那生成的描述文件则只能运行在指定Bund ID的项目上。

这一步需要选择证书,如果上一步选的是开发环境下的描述文件,那这一步就需要选择开发证书,一般来说这里只有一个开发证书。但是也有可能其他人也创建了证书,那这里就可能不止一个了。可以根据过期日期判断创建先后顺序,不要同时选择多个,只需要选择最新的证书,反之这里就是发布证书。

这一步是选择需要调试的设备,只在开发模式下和ADHoc模式下才会有这个选项,一般都全部勾选

这就生成了后缀为.mobileprovision的描述文件,可以通过这个描述文件判断类型,是开发还是发布,还可以看App ID,所选设备数、过期日期等信息。然后下载下来双击安装

这样所需要的文件就全部生成了。在Xcode中需要做些配置。1处是开发证书,点击如果没有显示,可能是没有证书或者缺少私钥,说明之前的步骤有问题,需要重新检查一下,2处点击应该显示的是发布证书,3、4分别设置为开发和发布模式下的描述文件。

注意,有时描述文件可能会被更新的比较频繁,因为调试设备一旦增加就需要更新描述文件,有的人会通过Xcode直接生成描述文件,这样官网上描述文件的后面一半都会标有Mangeged by Xcode,最好别这么干,一来显的不专业且比较乱,二是极端情况下可能会导致该账号下的所有证书和描述文件都不可用。在更新描述文件的时候,有时候下载下来安装好后依然不可用,这可能是因为系统还在使用之前我们本地的描述文件,这个时候可以去存放描述文件的目录下删除,如下图所示

但是名字都是一串数字,怎么判断对应的是哪个描述文件呢?可以到Xcode中去查看,点击选中的描述文件,再点击other就会出现对应的一串数字。现在Xcode感觉是越来越不稳定了,很多时候都感觉反应慢半拍,所以再重新下载安装描述文件的时候最好先把之前对应的删了。

这时候就可以真机调试了。如果其他组员也参与项目需要真机调试怎么办呢?之前有说到,如下图,到钥匙串中导出对应证书的私钥给到你的组员,这个私钥其实包含证书和证书签名请求,双击安装即可。至于描述文件你给到组员或者他们自己到官网去下载都可以


在项目完成后,需要打包测试或提交到App Store,在下图Provisioning Profile下Release模式下选择对应的描述文件,Coding Signing Identity下Release模式下选择相应的证书,直接选Automatic也可以,系统可以智能识别。然后菜单栏Product下选择Archive开始打包。注意,在选择设备的时候最好不要选择你的手机,而是选择Generic iOS Device,否则只会在你当前手机环境下进行编译打包

这时候可以直接点击Upload to App Store,接下来还有选择开发者账号这一步,但是这种通过Xcode直接上传的方式近来很多人都说特别慢或者上传不成功,上传失败的话可以使用另外一种方式Application Loader。右下角有是否下载dSYM文件,也就是符号集,每一个.dSYM文件都有一个UUID,和.app文件中的UUID对应,代表着是一个应用。而.dSYM文件中每一条崩溃信息也有一个单独的UUID,用来和程序的UUID进行校对。使用友盟或者百度错误统计的时候,一些运行时或者内存错误并不能判断出具体位置,这个时候就需要通过.dSYM文件。每次Archive一个包之后,都会随之生成一个dSYM文件,当程序崩溃的时候,我们可以获得到崩溃的错误堆栈,但是这个错误堆栈都是0x开头的16进制地址,需要我们使用Xcode自带的symbolicatecrash工具来将.Crash和.dSYM文件进行符号化,就可以得到详细崩溃的信息。

点击Export导出包,分别是App Store、测试、企业分发和开发包,选择后下一步

注意,左下角的对勾默认是不勾的,如果是企业账号打包,要做企业分发,需要勾选左下角的对勾

然后就需要填写ipa在服务器上的路径及应用名称,这和以前企业打包的时候流程有些偏差.Xcode 6以下ipa 和 plist 同时生成,Xcode6以上 只生成ipa,不过plist文件在包里也可以找到,然后将这两个文件交给服务器人员,然后将plist在服务器上的地址加到字符串“itms-services://?action=download-manifest&url=”之后,将这个地址用浏览器打开就会提示安装应用。

如果只是个普通的测试包,可以直接上传到蒲公英分发平台,通过链接下载安装即可。如果上传到App Store可以通过Aoolication Loader上传,每次上传我都会打开Vpn,5m/s的上传速度简直不能更爽,但是很多人会卡在这一步,有时候因为网络原因会上传失败。一般在早上上传成功的可能性更大一些。

以上,即是整个流程。包括账号申请、续费、Ituens上信息填写就不在赘述了,很多文档都比价齐全。现在整体比以前简单多了,苹果一直在优化,所以有些流程可能会有小的出入。

最后,扯个淡,事情没办完的感觉是痛苦的,希望早点结束,可以让我全身心的去投入战斗!

只是希望!


如有任何疑问或问题请联系我:fishnewsdream@gmail.com,欢迎交流,共同提高!

Objective-C/Swift技术开发交流群201556264,讨论何种技术并不受限,欢迎各位大牛百家争鸣!

微信公众号OldDriverWeekly,欢迎关注并提出宝贵意见

老司机iOS周报,欢迎关注或订阅

刚刚在线工作室,欢迎关注或提出建设性意见!

刚刚在线论坛, 欢迎踊跃提问或解答!

如有转载,请注明出处,谢谢!

本站总访问量 本文总阅读量