.p12:因为直接从Apple下载的证书只有公钥,没有私钥。没办法证明这个证书是你的(没有办法证明你有这个权利)。而从本地钥匙串中导出的.p12文件是包含公钥和私钥的,也就是说可以把证书上描述的权利赋予他人。
描述文件:描述文件里包含了AppID,Certificates(证书),Devices(设备)。说明生成描述文件需要用到这些信息。我们要打包或者在真机上运行一个应用程序,首先需要证书来进行签名,用来标识这个应用程序是合法的、安全的、完整的等等。然后需要指明它的AppID,并且验证BundleID是否与其一致。再次,如果是真机调试,需要确认这台设备能否用来运行程序。而ProvisioningProfile就把这些信息全部打包在一起,方便我们在调试和发布程序打包时使用,这样我们只要在不同的情况下选择不同的profile文件就可以了。而且这个ProvisioningProfile文件会在打包时嵌入.ipa的包里。
在Xcode8以后苹果引入了自动管理证书(automaticallymanagesigning),设置自动管理证书后xcode会根据账号证书和苹果开发者中心设置的内容,自动生成描述文件并下载到机器中使用。
如果我们想手动管理证书,请将xcode中的“automaticallymanagesigning”勾掉。
首先要安装证书或者直接安装到处的p12文件。其次要得到“常用名称”
1、打开“钥匙串访问”
在“Launch”中搜索“钥匙串访问”
2、找到你的证书,单击鼠标右键,单击“显示简介”
3、其中常用名称就是证书名称copy待用
得到证书名称还不够还需要得到描述文件(ProvisioningProfiles)
每个用户有其相应的ProvisioningProfiles配置目录在当前用目录中,我的目录如下
cd/Users/rongshenglai/Library/MobileDevice/ProvisioningProfiles其中就是我目前持有的描述文件。
2、点击“Certificates,Identifiers&Profiles”
这里就是我的描述文件,“Development”是开发者描述文件可以打包后在真机上安装,“Distribution”是发布描述文件如果要发布到appstore需要这个描述文件。
3、创建描述文件
a)单击“+”创建一个描述文件
b)选择开发者描述文件还是发布描述文件,选择后单击“continue”
c)选择appid(也就是设置此描述文件应用于那个app,如果你有多个app需要给每个app都配置一个描述文件),选择好后单击“continue”
d)选择那个证书可以使用此描述文件,不知道全选即可,单击“Continue”
e)选择打包后可以在那些设备上使用,选择好后单击“Continue”
f)在ProfileName中输入此描述文件的名字,单击“Continue”。
4、下载描述文件
证书创建完成后需要把描述文件手动下载到本机
找到你要使用的描述文件(开发者、发布)单击后显示如下内容,单击“Download”后保存到“/Users/rongshenglai/Library/MobileDevice/ProvisioningProfiles”目录中注意每个人的个人目录不同根据情况修改。
下载的文件名类似“XXXX.mobileprovision”前边的XXXX记录下来它就是描述文件名,使用时不要带.mobileprovision
注意:刚才制作描述文件时一定要选择你使用的证书。
四、ProvisioningProfile文件的说明
以下为典型供应配置文件*.mobileprovision的构成简析:
(1)Name:该mobileprovision的文件名。
(2)UUID:该mobileprovision文件的真实文件名。
(3)TeamName:AppleID账号名。
(4)TeamIdentifier:TeamIdentity。
(5)AppIDName:explicit/wildcardAppIDname(ApplicationIdentifierPrefix)。
(6)ApplicationIdentifierPrefix:完整AppID的前缀(TeamIdentifier.*)。
(7)DeveloperCertificates:包含了可以为使用该配置文件应用签名的所有证书
证书是基于Base64编码,符合PEM(PrivacyEnhancedMail,RFC1848)格式的,可使用OpenSSL来处理(opensslx509-text-infile.pem)。
从DeveloperCertificates提取之间的内容到文件cert.cer(cert.perm):
-----BEGINCERTIFICATE-----
将之间的内容拷贝至此
-----ENDCERTIFICATE-----`
Mac下右键QuickLook查看cert.cer(cert.perm),在KeychainAccess中右键GetInfo查看对应证书ios_development.cer,正常情况(公私钥KeyPair配对)应吻合;Windows下没有足够信息(WWDRCA.cer),无法验证该证书。
如果你用了一个不在这个列表中的证书进行签名,无论这个证书是否有效,这个应用都将CodeSignFail。
(8)Entitlements键
keychain-access-groups:$(AppIdentifierPrefix),参见CodeSigningEntitlements(*.entitlements)。
每个应用程序都有一个可以用于安全保存一些如密码、认证等信息的keychain,一般而言自己的程序只能访问自己的keychain。通过对应用签名时的一些设置,还可以利用keychain的方式实现同一开发者签证(就是相同bundleseed)下的不同应用之间共享信息的操作。比如你有一个开发者帐户,并开发了两个不同的应用A和B,然后通过对A和B的keychainaccessgroup这个东西指定共用的访问分组,就可以实现共享此keychain中的内容。
application-identifier:带前缀的全名,例如$(AppIdentifierPrefix)com.apple.garageband。
com.apple.security.application-groups:AppGroupID(group.com.apple),参见CodeSigningEntitlements(*.entitlements)。
com.apple.developer.team-identifier:同TeamIdentifier。