2018/04/21

Xcode で Signing Certificate が Error になる場合の確認方法

(この記事は、Xcode 9.3 を使っています)

TL;DR


Build Settings タブにある Code Signing Identity を確認しましょう。

解説


Xcode 8 から Signing で「Automatically manage signing」が選べるようになり、とても便利になりました。この設定は Project Navigator から Targets を選択し、General タブの中にあるSigning で有効にできます。



ここで Team を選択すると、選択された Team 並びに、現在使用している Scheme の Info タブで設定できる Build Configuration などを踏まえ、適切な組み合わせの Provisioning Profile が選択(場合によっては生成)され、設定される、という仕組みになっています。



「Automatically manage signing」チェックボックスを無効にする(即ち チェックを外す)と、以前同様に、手動で Provisioning Profile を選択することも可能です。この場合は、Provisioning Profile を元に、Team が決定されます。




いずれの場合でも、Signing Certificates は最適なものが自動的に選択されますが、稀にこの選択が失敗してしまい、次のようなエラーになる場合があります。

Provisioning profile "XXX-Provisioning-Profile" doesn't include signing certificate "iPhone Developer: John Appleseed (XXXXXXXXXX)".

この Signing Certificates は同じく Project 設定の中にある「Build Settings」タブの「Signing」セクションにある「Code Signing Identity」の情報を元に決定されます。



例えば、「Release Build では iOS Distribution カテゴリの Certificate を使いたい」という場合には、この値を 「iOS Distribution」へ変更しましょう。



私の環境では、Automatically manage signing を無効に設定(すなわち Manual へ設定)した上で、Release build では、Distribution 用 Provisioning を使う設定にしていました。しかし Code Signing Identity は iOS Developer のままであった為、上記のエラーとなってしまいました。Code Signing Identity を iOS Distribution へ設定したところ、エラーが消えました。

なお、Automatically manage signing を有効に設定した場合、 Code Signing Identity は何れの build でも iOS Developer へ設定しておく必要があります。この値を不適切に設定すると、Generic タブの Signing セクションで、

_APPNAME_ has conflicting provisioning settings._APPNAME_ is automatically signed for development, but a conflicting code signing identity iPhone Distribution has been manually specified. Set the code signing identity value to "iPhone Developer" in the build settings editor, or switch to manual signing in the project editor.
といったエラーが表示されますので、Code Signing Identity の設定値を確認してみましょう。