ビルドマシンのCertificate と Provisioning Profile を更新するとき 複数のDeveloper Program がインストールされていると ビルドエラーが起きてもCertificateのせいなのか Provisioning のせいなのか分からなくなることがあります。
そこで、どの名義のCertificate が Mac にインストールされているのか調べる方法と、どのCertificate がどの Provisioning とひもづいているか調べる方法をまとめます。
インストール済みの Certificate を調べる
インストール済みのCertificate とその名義はKeychain.appで調べることができます。
同アプリをひらいて 証明書を選んで 情報を見る を選ぶだけです。見方としては_サブジェクト名_の 通称 と_ユーザーID_を見ます。これが名義の名前とTeam Identifier を指しています。
Apple Developer Program の名義は Team Identifier で区別できます。Team Idは同じ法人であっても Standard ProgramとEnterprise で異なります。
なお、security コマンドでもいろいろな情報が取得できます:
$ security find-identity -v -p codesigning
1) <SHA-1 hash> "iPhone Developer: ほげほげ"
1 valid identities found
$ security find-certificate -Z -p
SHA-1 hash: <SHA-1 hash>
-----BEGIN CERTIFICATE-----
<PEM String>
Certificate がどの Provisioning とひもづいているか調べる
Certificate がひもづくProvisioning を知るには mobileprovision ファイルを調べます。
mobileprovisionファイルは ~/Library/MobileDevices/Provisioning Profiles にあります。同ファイルを調べるには security コマンドを使います:
$ security cms -D -i <UDID>.mobileprovision
..
<key>AppIDName</key>
..
<key>ApplicationIdentifierPrefix</key>
<array>
<string><Team Identifier></string>
出力結果のうち ApplicationIdentifierPrefix がそのProvisioning とひもづく Team Identifier を指しています。
ちなみに、DeveloperCertificates は PEM形式の Certificateです。
<key>DeveloperCertificates</key>
<array>
<data><PEM String>
(余談) ipa ファイルを調べて Team Id とCertificate を割り出す
Team Id は ipaファイルをcodesign コマンドで調べるとわかります:
$ codesign -vv -d foo.app
..
Identifier=<Bundle identifier>
..
Authority=<Developer Programの名義>
..
TeamIdentifier=<Team Identifier>
いっぽう Certificate は ipa ファイルのなかにある embedded.mobileprovisionでわかります:
- ipaファイルの拡張子をzip にrename してアンアーカイブ
- Payload ディレクトリのなかの app ファイルを選んで パッケージの内容を表示
このなかに codesign に使った embedded.mobileprovision があります。あとは security コマンドを使うだけです:
$ security cms -D -i embedded.mobileprovision
..
<key>AppIDName</key>
..
<key>ApplicationIdentifierPrefix</key>
<array>
<string><Team Identifier></string>