不让苹果开发者账号折磨我

转载 2016年01月05日 09:12:44

在iOS开发过程中,不可避免的要和证书打交道,真机调试、App上架、打包给测试去测试等都需要搞证书。在此过程中我们会遇到很多的问题,但是如果掌握了真机调试的原理和本质;遇到问题,我们就更容易定位问题之所在,从而迅速的解决问题。这篇文章不是一步步教给你证书,描述文件的制作(其实制作步骤是非常简单的),而是尽可能的讲明白Member Center中的一些知识及原理。并且此文不涉及如何申请开发者账号,以及App上架App Store的流程。


此篇文章的逻辑如下图所示:

图0-0 此篇文章的逻辑图


Certificates


什么是证书


什么是证书?证书就是:证明证书拥有者拥有证书上所说的能力。一个证书要涉及到颁发者,拥有者,证明拥有者拥有了什么能力。例如,CET-4证书;颁发者:学校,拥有者:自己,证明的能力:英语达到四级水平。苹果开发者证书也是一样,颁发者:自己,拥有者:安装证书的电脑;证明的能力:可以安装或者打包某应用程序。开发者证书分为两种类型:Development Certificate(开发证书)和Production Certificate(发布证书)。


开发者证书能力来源


那么当某台电脑安装开发者证书后,这台电脑是如何拥有这种能力的呢?


苹果在此运用了代码签名技术。代码签名验证允许我们的操作系统来判断是谁对App进行了签名,在安装了Xcode后,Xcode会在项目编译期间使用你的代码签名验证,这个验证由一个由Apple认证过的公钥-私钥对组成,私钥存储在你的钥匙串中(Mac本地,在系统实用工具中),公钥包含在证书(Certificates)中,证书在本地钥匙串和开发者账号中都有存储,另外,还有一个我们可以叫做媒介证书的证书来确保我们的证书(Certificates)是经过授权而发布的当安装好Xcode时,媒介证书(Intermediate Certificate)就已经安装到我们的钥匙串中去了。通过在开发者账号(Developer Account)和本地(Mac)都经过验证的证书(Certificate)我们就可以利用合法的证书进行App的测试和发布了。


证书在Xcode工程中所对应的位置

图1-1 证书在Xcode工程中所对应的位置


Identifiers


Identifiers中又分为App IDs、Pass Type IDs、Website Push IDs、iCloud Containers、App Groups、Merchant IDs、这里主要讲解App IDs。


App ID是什么


App ID其实就是一个App的身份证,一个App的唯一标示。在Project中称为Bundle ID。在Member Center、Project、iTunes Connect都是需要此ID去标示此App的唯一性。Bundle ID在不同环境下的表现关系。如(图2-1)所示。

图2-1 Bundle ID在不同环境下的表现


一个Bundle ID精确的标识了一个App。Bundle ID字符串中只能包含字符(A-Z,a-z,0-9),连接符(-),点(.)而且此字符串最好是reverse-DNS格式的。例如你公司的域名是Acme.com,你App的名字是Hello,那么你可以用com.Acme.Hello作为你的Bundle ID。


Bundle ID的作用:


  • 在Xcode工程中,Bundle ID储存在Info.plist中,当你编译工程的时候,他会把此文件拷贝到你的app包中。

  • 在iTunes Connect,用Bundle ID去标识App,在你第一次构建上传之后,你就不能在改变或者删除你的Bundle ID了。

  • 在Member Center,你创建一个和Bundle ID相匹配的App ID。如果App ID是精准类型的,你就必须精确的去匹配你的Bundle ID,Bundle ID是大小写敏感的。


在Member Center中添加App ID


在Member Center中添加App ID也是很简单,选中App ID点击右上角的+号,App ID Description就是写一下这个App ID的描述了。App ID Prefix:App ID的前缀,这里苹果为了更精确的保证App ID的唯一性使用了开发者账号的Team ID作为App ID的前缀。App ID Suffix:App ID的后缀,这里有两种类型,一种是精准的,一种是通用的,我们在使用中大多数都是使用精准的,直接把我们的Bundle ID填进去就好。下面就是App包含的服务,这个根据自己业务所需的类型自己选择就可以了,而我们用的最多的也就是Push Notifications推送服务。然后continue就可以了。


Devices


Device就是用来测试的设备。在Member Center中添加device的步骤其实也很简单了,主要就是要拿到device的UDID,这里我们可以利用iTunes、iTools、Xcode这些工具都可以拿到设备的UDID。需要注意的就是,每个开发者账号,每年最多可以添加100台调试设备,而且不能更改,想要更改就要等到下一年重新续费的时候才能更改调试设备了。在下面要讲述的描述文件中只有发布到App Store和In House的时候这两种类型的描述文件的制作是不需要添加device的,而其他描述文件的制作都是需要添加device的。具体使用情况,参考下面的【Provisioning Profiles】。


使用iTunes查找UDID

图3-1 使用iTunes查找UDID


使用Xcode查找UDID


选择Xcode工具条上的Window,然后选Devices选项。


图3-2 使用Xcode查找UDID


Provisioning Profiles


描述文件描述了可由哪台电脑,把哪个App,安装到哪台手机上面。一个描述文件的制作是需要上面的一些信息的。所以苹果在Member Center中把这个文件的制作排在最后面是很合理的。描述文件其实可以分为两种类型,一种是带有device信息的;而另一种是不带device信息的。


带device信息的描述文件

图4-1带有device信息的描述文件


这种类型的描述文件包括所有开发类型的描述文件和发布到Ad Hoc上面的描述文件,因为做这些事情的时候,都有很明确的目的,这个App要安装到哪台设备上面。


不带device信息的描述文件

图4-2不带device信息的描述文件


不带device信息的描述文件只有发布到App Store和In House两种情况下才使用这个描述文件,因为通过这两个渠道发布的App我们是不能确定将来那一台设备才会安装,只让也就不会带有App的信息。


描述文件在Xcode中的位置

图4-1 描述文件在Xcode中的位置


团队开发证书的管理


在团队开发的时候,最好是一个人去管理证书,当有其他人要用的时候,可直接导出.p12证书供其他开发者使用。证书出了问题,我感觉还是相当麻烦的,而App ID在添加之后,基本上是不会改变的,除非要为App添加新的服务,这时候才要重新编辑App ID,所以App ID最好也是管理证书的人去管理App ID。添加设备这一块就很随意了,所有的开发者都应该有权去管理添加设备这一块。描述文件的制作这个要区分一下是开发类型的描述文件,还是发布类型的描述文件。开发类型的描述文件应该是团队里的每一个开发者都有权去管理的,实际上当开发类型的描述文件出现问题的时候,开发者可以对此描述文件重新编辑一下进行使用,这样是不会影响其他开发者的,甚至你可以自己重新制作一个描述文件也没什么问题。但是发布类型的描述文件,这个最好还是管理证书的那个人去管理这个描述文件。打包发布的时候如果这个描述文件出现变化,还是很麻烦的,而且这个描述文件对于团队其他开发者来说也不是很常用,甚至是根本用不到这个描述文件。以上这些就是我个人对于团队开发证书管理的建议,当然也有不足之处,如你有好的建议,也欢迎你私密我,共同交流,共同进步。


举例使用


上面几段可能原理性的内容过多了一些,但是个人感觉掌握这些原理还是很有必要的。下面举个例子,对应上面的原理,讲一下实际的运用。


产品需求:我的一个App,包含推送功能,在开发状态下已经测试完成所有功能,但是这时产品经理为了保证产品在上线后也万无一失,就想测试一下上线后,推送的功能是否稳定。这时我们的App还没有上线,那我们要怎样才能去测试这样的一个功能呢?


分析这个需求,要测试上线后推送功能,其实无非就是看上线后推送的证书会不会出现什么问题。这时候我们就会想到Ad Hoc。因为发布App除了App Store渠道之外,还可以选择Ad Hoc。这时候我们就先选定用哪几部手机进行测试,先添加到device中,然后开始制作描述文件。点击右上角+号 -> 然后选择Distribution中的Ad Hoc -> 点击continue -> 选择你要测试的App的App ID -> 点击continue -> 选择你发布到App Store时候所用的证书 -> 点击continue -> 选择你要安装的测试设备 -> 给此描述文件起一个名字 -> 点击generate。这样你就生成了一个发布到Ad Hoc上面对应的描述文件,用此描述文件打包出来的App和发布到App Store上面的App用的是同一个证书,所以在此情况下App的推送没有什么问题,基本可以推断App上线之后应该也是没有什么问题的。



CMM简介

CMM简介张友生(本文转载自软件工程专家网www.21cmm.com)  CMM是软件过程能力成熟度模型(Capacity Maturity Model)的简称,是卡内基-梅隆大学软件工程研究院为了满...
  • gigix
  • gigix
  • 2002-03-08 09:19:00
  • 6920

iOS应用发布篇二(开发者账号购买)

引言 上一篇博文完成了开发者账号的申请,这个账号大家使用苹果产品的人大多都有,此时账号不可以发布应用,需要购买“开发者会员”,苹果开发者个人版需要支付99刀(688RMB),企业版需要支付199刀,还...
  • qq_20044689
  • qq_20044689
  • 2016-06-09 13:05:58
  • 923

李阳诗篇

李阳最经典战斗诗篇: 打击我吧 热爱丢脸欢迎挫折享受痛苦挑战潜能追求成功锻造辉煌 打击我吧!折磨我吧!侮辱我吧!冤枉我吧!迫害我吧!让暴风雨都来吧!让我付出代价!你使我兴奋!你使我斗志昂扬!你使我咬牙...
  • sardine_fish
  • sardine_fish
  • 2010-06-08 17:37:00
  • 961

iOS--错误集锦--申请公司开发者账号遇到的相关问题

申明:此为本人学习笔记,若有纰漏错误之处的可留言共同探讨 今天帮公司申请个公司开发者账号,新创建的一个apple ID  结果发现了这样的问题,如图 纠结了好久才发现这个问题的原因...
  • csdn_hhg
  • csdn_hhg
  • 2015-11-30 23:24:50
  • 916

苹果开发者账号Apple ID如何进行资料修改?

我们在申请了开发者账号后,有时候需要对账号进行资料修改。  只要你有了Apple ID,也就是邮箱,和苹果的密保,密码。那这个Apple ID就唯一属于你的了。 下面会截图说明如何进行修改...
  • angel78952
  • angel78952
  • 2017-07-10 17:08:56
  • 6156

申请苹果开发者账号流程

公司开发者账号申请 Apple 开发者账号,除给大学使用的教育账号外,共有个人账号、公司账号、企业账号三种: 个人账号:个人申请用于开发 App...
  • qq_22982291
  • qq_22982291
  • 2017-12-01 17:22:12
  • 286

iOS苹果个人开发者账号购买流程 2018 版

1.购买苹果开发者账号之前需要有一个 Apple ID ,没有的可以先注册一个,地址:https://appleid.apple.com/account?page=create#!&p...
  • a44496913
  • a44496913
  • 2017-02-08 20:04:51
  • 14656

苹果开发者账号的种类

三种账号的区别 (Individual,Company,EnterPrise) 1、个人开发者账号(苹果公司会收取年费) 优点:申请速度快(最快1天申请完成,最慢2-3个工作日),可以上架至Ap...
  • u013915422
  • u013915422
  • 2016-03-31 14:44:16
  • 3746

IOS 企业级苹果开发者账号申请流程

今天在公司的技术交流群里交流苹果企业级账号的申请,受大家鼓励,将几个月前申请流程整理了一下,现在想来申请苹果账号不可怕,只是申请的流程信息过于琐碎。 由于笔者刚踩完坑,与苹果客服交流了一个多月,搜索借...
  • Leemin_ios
  • Leemin_ios
  • 2016-07-29 10:14:15
  • 37486

申请苹果公司版和企业版开发者账号注意事项

这两个月,为了申请苹果开发者账号,在下参考了三四个经验贴,但还是耗时一个多月并踩了大坑。故而决定将自己的经验整理出来,希望有缘看到这个教程的朋友们有个前车之鉴,避免重蹈覆辙,浪费宝贵的时间。 强烈...
  • Yanglin6
  • Yanglin6
  • 2018-01-08 11:35:21
  • 9124
收藏助手
不良信息举报
您举报文章:不让苹果开发者账号折磨我
举报原因:
原因补充:

(最多只允许输入30个字)