首先,在 Xcode 中选择配置文件具有误导性;在 Xcode 中构建实际上与配置文件无关!实际发生的是 Xcode 只是将配置文件中的公钥证书与您的钥匙串中的一个匹配,然后使用私钥对可执行文件进行签名。那是沼泽标准的 Mach-O 可执行签名。这也是他们在 Xcode 5 中将其更改为更清晰的原因。这也是配置文件上的错误(未找到签名身份)的来源 - 这意味着 Xcode 找不到与配置文件中的任何公钥对应的私钥。
你的个人开发者证书是标准的 PKI 东西;您的 Mac 以 Apple 不知道您的私钥的方式向 Apple 发送证书请求(类似于 SSL 证书请求)。Apple 生成证书,钥匙串将其与原始请求相匹配,为您提供证书的公钥和私钥。为单个开发人员创建配置文件时,会列出该开发人员的公钥。创建团队配置文件时,将包含所有选定团队成员的公钥。这允许团队成员签署可执行文件,但签名者的姓名将是团队名称而不是个人。
当 iOS 启动任何可执行文件时,它首先检查签名。如果签名由 Apple App Store 签名,则它会运行。
如果没有,它会检查已安装的配置文件。配置文件包括: 1. 开发者证书列表 2. 应用程序 ID 3. 授权(例如 iCloud、Game Center 等) 4. 设备 UDID 列表 5. 整个事情由 Apple 打包和签名。
检查配置文件以确保它是由 Apple 的密钥(使用 Apple 的公钥)签名的。然后验证当前设备的 UDID 是否在列表中。它还验证应用程序 ID 是否匹配(尽管允许使用通配符)。然后它根据有效的开发人员证书公钥列表检查 Mach-O 签名。如果其中任何一个匹配,则可执行文件运行并被授予列出的权利。如果没有,则被阻止。
我强烈建议在文本编辑器中打开一个 .mobileprovision 文件;你会学到很多东西!