ビルドマシンの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>