iOS开发Xcode配置

iOS申请Certificates, Identifiers &Profiles 介绍

登录我们的开发者账号,可以看到有Certificates, Identifiers &Profiles这些目录,下面详细介绍下这些概念。




Certificates概念:

Certificates 即 ”证书“,这个是最基础的,不论是真机调试,还是上传到appstore都是需要的,是一个基证书,用来证明自己开发者身份的,约等于通行证,申请证书是我们进行真机调试与发布的第一步。证书是用来给应用程序签名的,只有经过签名的APP才能保证它的来源是可信任的,并且代码是完整的, 未经修改的。在Xcode Build Setting的Code Signing Identity中,你可以设置用于为代码签名的证书说白了,证书就是安装在Mac上给APP签名用的。

iOS 证书是用来证明 iOS App 内容(bundle with executable and resources)的合法性和完整性的数字证书。对于想安装到真机或发布到 AppStore 的应用程序(App),只有经过签名验证(Signature Validated)才能确保来源可信,并且保证 App 内容是完整、未经篡改的。

证书有下面几种:

  • 开发证书 ( Development Certificates ),主要是授权mac设备的开发权限,在xcode里面打包需要的证书(初学者可以就这么理解)
  • 发布证书 (Distribution Certificates ), 主要是授权mac设置发布权限。
  • APNs证书 即推送证书,推送证书又分为开发版和正式版本,开发版用于测试推送,只能连接测试服务器。

众所周知,我们申请一个Certificate之前,需要先申请一个Certificate Signing Request (CSR) 文件。

而这个过程中实际上是生成了一对密钥(公钥和私钥),保存在你Mac的Keychain中。代码签名正是使用这种基于非对称密钥的加密方式,用私钥进行签名,用公钥进行验证。如下图所示:

在你Mac的keychain的login中存储着相关的公钥和私钥,而证书中包含了公钥。你只能用私钥来进行签名,所以如果没有了私钥,就意味着你不能进行签名了,所以就无法使用这个证书了,此时你只能revoke之前的证书再申请一个。因此在申请完证书时,最好导出并保存好你的私钥。当你想与其他人或其他设备共享证书时,把私钥传给它就可以了。私钥保存在你的Mac中,而苹果生成的Certificate中包含了公钥。当你用自己的私钥对代码签名后,苹果就可以用证书中的公钥来进行验证,确保是你对代码进行了签名,而不是别人冒充你,同时也确保代码的完整性等。




Identifiers概念:

Identifiers 即”标识符“,约等于是身份证,只为了区分不同的APP。用于创建以下三个:

  • App IDs App ID用于标识一个或者一组App,App ID是和Xcode中的Bundle ID是一致的或者匹配的。
  • Pass Type IDs
  • Website Push IDs

其中,App ID是应用的唯一标示符,每一个应用的app id是不一样的




Devices概念:

  •  Devices 用于创建测试设备,一个99美元允许创建100个设备

Device最简单了,就是iOS设备。Devices中包含了该账户中所有可用于开发和测试的设备。 每台设备使用UDID来唯一标识。每个账户中的设备数量限制是100个(每个类型各100个,iPhone、iPad算两个类型)。




Provisioning Profiles概念:

  • Provisioning Profiles 即“描述文件”。它的功能很特别,专门用于将 Certificates、Identifiers、Devices结合起来,形成一个描述证书、标示符的描述文件。Provisioning Profiles 放入我们的xcode中,让 xcode知道我们的证书和哪些设备之类的信息相匹配。
  • 这个东西是很有苹果特色的一个东西,我一般称之为PP文件,该文件将appID,开发者证书,硬件Device绑定到一块儿,在开发者中心配置好后可以添加到Xcode上,也可以直接在Xcode上连接开发者中心生成,真机调试时需要在PP文件中添加真机的udid;是真机调试和必架必备之珍品。

一个Provisioning Profile文件包含了上述的所有内容:证书、App ID、设备。是一个综合描述文件。

如果我们要打包或者在真机上运行一个应用程序,我们首先需要证书来进行签名,用来标识这个应用程序是合法的、安全的、完整的等等;然后需要指明它的App ID,并且验证Bundle ID是否与其一致;再次,如果是真机调试,需要确认这台设备能否用来运行程序。而Provisioning Profile就把这些信息全部打包在一起,方便我们在调试和发布程序打包时使用,这样我们只要在不同的情况下选择不同的profile文件就可以了。而且这个Provisioning Profile文件会在打包时嵌入.ipa的包里。

如下面所示:

一个用于Development的Provisioning Profile中包含了该Provisioning Profile对应的App ID,可使用的证书和设备。这意味着使用这个Provisioning Profile打包程序必须拥有相应的证书,并且是将App ID对应的程序运行到Devices中包含的设备上去。

如上所述,在一台设备上运行应用程序的过程如下:




一些Tips:

  • certificates 证书。它的作用只是为了绑定此开发者账号下需要发布APP所使用的设备(即Mac),因为设备需要给发布的应用签名。certificates的数量有上限(2-3),所以一般情况下,我们只需把一台电脑作为生成证书的主电脑,做一套开发、发布证书即可。如果需要在其他人的电脑上开发和发布,导出p12文件给他安装即可
  • 如果我账号下变需要发布100款app,证书该怎么处理?需要做100套开发证书、100套发布证书吗?当然不是!我们只需要创建100个不同的appID,开发证书和发布证书只用一套就OK,但是pp文件你需要做200套!一半是开发使用的pp文件,一半是发布时使用的pp文件。因为pp文件负责appId与证书联系起来。所以,不用害怕证书。
  • Certificates(证书)的作用:只为了绑定发布APP使用的Mac(需要使用Mac的签名)。
  • Identifiers(标识):只为了区分不同的APP
  • Profiles(pp文件):让Certificates和Identifiers联系起来。开发环境的pp还会绑定能够安装测试包的手机的udid。
  • certificates与APPID没有关系,pp文件的作用是让他俩绑定关系
  • 一个开发者账号只能够申请有限的开发者证书和发布证书,那么怎样在多台设备上进行开发呢?我们可以使用在电脑上安装好的证书导出相应的p12文件,然后设置相应的密码来供其他开发者使用。这样就可以实现多台设备都可以进行开发。



关于P12证书:

  • 我们的每一个证书都可以生成一个.p12文件,这个文件是一个加密的文件,只要知道其密码,就可以供给所有的mac设备使用,使设备不需要在苹果开发者网站重新申请开发和发布证书,就能使用。注意一般.p12文件是给与别人使用的,本机必须已经有一个带秘钥的证书才可以生成.p12文件
  • 打开钥匙串,选择我们需要的证书,右击,选择“导出“iPhone Distribition:“`”:
  • 为.p12文件填一个名字,点击存储:
  • 点击好,在桌面上就形成了一个.p12文件了:
在别人的电脑上要成功安装,须具备两个文件:
1.该证书导出的".p12"文件。
2.苹果开发者中的与"证书"对应的"描述文件",也就是PP文件。
.p12文件本身就是一个加密的证书,所以用这个文件就可以让其他mac设备使用了:
拿到这两个文件后,依次双击"证书",".p12"文件(需要输入密码,密码就是当时生成.p12时设定的密码,),作用是加入钥
串中,使我们的电脑具备开发的证明,"描述文件"(作用是置于xcode中,让xcode知道我们开发的合法性),添加完后就可以使用了。




我们来申请一个证书:

  • 第一步 创建CSR文件

首先,需要创建一个CSR(Certificate Signing Request)文件。

点击”其他”,找到“钥匙串”:

选择从颁发机构申请证书,注意下面的红色框,必须选择那一个才可以:

点击后看到:

如果选择 “存储到磁盘”,那么“用户邮件地址” 随便填一个就好,点击“继续”:

“存储为:” 可以给证书命名,选择一个位置,点击”存储”:

这样在桌面就生成了一个证书。

注意这一个本地证书可以同时用来生成“开发证书”和“发布证书”。

第二步: 在开发者账号里申请证书 (下面只介绍“发布证书“的申请,申请”开发证书“步骤相同,就是换一个选项 )

登录苹果开发者中心:https://developer.apple.com/account/resources/certificates/list

选择证书类型–>选择创建证书

这里可以选择 [开发证书] 还是 [生产证书]

发现这有Apple Distribution 和 iOS Distribution的证书,Apple开头的证书是在XCode11以后出现的,也是苹果推荐的,相当于引导开发者不只是iphone上, 其他苹果设备的也能让你打包发布。所以Xode11以后二者作用都一样,11之前的话Apple开头的证书会报错,低版本的不支持Apple证书。

选择我们本地的CSR的文件

可以看到生产证书已经创建好了,我们可以下载下来,双击安装在我们的主Mac电脑的钥匙串上。另外,之前的CSR文件可以删除了。

可以看到我们的生产证书已经成功添加到钥匙链中了。

当然我们可以在证书上点击鼠标右键导出P12文件给别人用




关于证书的一些Tips:

建议开发证书和生产证书都下载下来安装在Mac上

那么什么时候更换呢?当然平常开发的时候,用开发证书和BundleID因为要真机调试,上线的时候在换成iOS生产的证书。

那么如何更换呢?更换的地方有三个

  • 1. BundleID

大标题下面的Id就是Bundleid

  • 2. plist文件里
  • 3. Code Siging



创建Identifiers的例子:

  • 登录苹果开发者网站点击 Identifiers+
  • 这里选择App IDs下一步
  • 这里选择App下一步
  • 这里输入Description,Bundle ID 和 APP使用的 Capabilities。苹果的App id分为2种,一种是explicit ID , 直译为显式ID, 一种是wildcard ID ,直译 通配ID。在创建app id的时候可以设置,创建之后类型不可切换。
    2种ID最直观的区别,explicit ID必须是全名,比如 com.lc.test , wildcard ID最后一个段为星号(*),比如 com.lc.*  。wildcard ID的星号部分,可以随便替换,不影响打包,而且不同的后缀打包出的app不同(简单的说就是一个wildcard ID如果最后的星号部分不同,安装到机器上后是2个app,不会相互覆盖),explicit ID 不能改。wildcard ID不能使用 iap,game center , 推送 , explicit ID可以。

    最后总结,explicit ID基本是用来上appstore的(主要是有game center ,推送,iap等权限)。wildcard ID 很适合走非官方平台。

    最后再说说为什么wildcard ID适合非官方平台。因为苹果app是靠bundle ID来区分的,如果2个app bundle ID相同,就会相互覆盖。wildcard ID因为最后的星号可以随便改,所以可以为不同平台增加一个区分的作用。否则不同平台之间的版本会相互覆盖。
  • 注册Identifiers成功

创建Profiles的例子:

  • 登录苹果开发者网站点击 Profiles+
  • Provisioning Profile 分为开发和生产两种。我们选择 Distribution ->App Store 下一步
  • 选择一个Identifiers App ID
  • 选择一个证书 下一步
  • 输入Provisioning Profile文件的名字 下一步
  • 可以看到Provisioning Profile已经正常创建出来了,可以下载到本地。