模拟器调试的时候有的时候不能检验出程序在真实手机上的差异,若是须要进行真机测试或者发布应用到App Store上去的时候, 公司若是没有开发过App,你能够从头开始弄,大部分都是后来接手的,那么当咱们进入https://developer.apple.com/account/ios/profile/profileList.action网站的时候咱们可能会有一些迷茫,会看到以下图片"
ios
能够很容易的发现这样的几个东西。xcode
Devices是设备,不须要解释,每一个开发者帐号能够关联100台设备,能够经过xcode直接添加你的设备,Certificate、App ID和Provisioning Profile不是那么好理解。 安全
证书是你有权利开发的凭证,是开发者的一种标识,至关于身份证,一个开发者帐号只有一套。一套含两个,Development和Distribution(也就是Production)。app
其中Development证书提供开发者在电脑上真机调试的权限,能够制做多个副本分发到多台电脑。测试
Distribution证书给开发者提供发布ios程序的权限,也就是说有了这个,你就有权力发布程序到App Store去了。只有一个,不能制做副本分发到多台电脑。网站
下面是证书的分类信息:(括号内为证书有效期)加密
In-House and Ad Hoc (3年):用来发布In-House和AdHoc的应用程序。spa
App Store :用来发布提交App Store的应用程序。
申请一个Certificate以前,须要先申请一个Certificate Signing Request (CSR) 文件,而这个过程当中其实是生成了一对公钥和私钥,保存在你Mac的Keychain中。代码签名正是使用这种基于非对称秘钥的加密方式,用私钥进行签名,用公钥进行验证。以下图所示,在你Mac的keychain的login中存储着相关的公钥和私钥,而证书中包含了公钥。你只能用私钥来进行签名,因此若是没有了私钥,就意味着你不能进行签名了,因此就没法使用这个证书了,此时你只能revoke以前的证书再申请一个。所以在申请完证书时,最好导出并保存好你的私钥。当你想与其余人或其余设备共享证书时,把私钥传给它就能够了。私钥保存在你的Mac中,而苹果生成的Certificate中包含了公钥。当你用本身的私钥对代码签名后,苹果就能够用证书中的公钥来进行验证,确保是你对代码进行了签名,而不是别人冒充你,同时也确保代码的完整性等。 调试
App ID用于标识一个或者一组App,App ID应该是和Xcode中的Bundle ID是一致的或者匹配的。App ID主要有如下两种: code
每建立一个App ID,咱们均可以设置该App ID所使用的APP Services,也就是其所使用的额外服务。每种额外服务都有着不一样的要求,例如,若是要使用Apple Push Notification Services,则必须是一个explicit App ID,以便能惟一标识一个应用程序。下面是目前全部可选的服务和相应的配置要求。
一个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中包含的设备上去。
如上所述,在一台设备上运行应用程序的过程以下:
与证书同样,Provisioning Profile也分为Development和Distribution两种:
(注:前面提到不一样帐户类型所能建立的证书种类不一样,显然Profile文件的种类是和你所能建立的证书种类相关的)
In House 与Ad Hoc的不一样之处在于:In House没有设备数量限制,而Ad Hoc是用来测试用的,Ad Hoc的包只能运行在该帐户内已登记的可用设备上,显然是有最多100个设备的数量限制。因此这两种Provisioning Profile文件的区别就在于其中的设备限制不同而已,而他们所使用的Certificate是相同的。
进行Development开发主要有如下几个步骤:
事实上第三步一般是不须要的,由于咱们一般都是用Xcode生成和管理的iOS Team Provisioning Profile来进行开发,由于它很是方便,因此不须要本身手动生成Provisioning Profile。
iOS Team Provisioning Profile是第一次使用Xcode添加设备时,Xcode自动生成的,它包含了Xcode生成的一个Wildcard App ID(*,匹配全部应用程序),帐户里面全部的Devices和全部Development Certificates,以下图所示。所以,team中的全部成员均可以使用这个iOS Team Provisioning Profile在team中的全部设备上调试全部的应用程序。而且当有新设备添加进来时,Xcode会更新这个文件。