iOSアプリのプロジェクトファイルを、オープンソースやサンプルコードなどとして配布する予定のときには、コードサイニングの設定をプロジェクトファイルに設定したくないことがあります。しかし、ローカルで作業中はコードサイニングの設定を行わないと、デバイスにインストールできないので設定が必要です。
このようなときには、コードサイニングの設定にビルド設定ファイルを使うと便利です。
ビルド設定ファイルの作成
Xcodeのビルド設定ファイルの作成方法については、以下の記事を参照してください。

上記の記事を参考に、次の3つのビルド設定ファイルを作成します。
Debug.xcconfigRelease.xcconfigSigning.xcconfig
Debug.xcconfigをデバッグビルド、Release.xcconfigをリリースビルドに設定します。
Debug.xcconfigとRelease.xcconfigには以下のように入力し、Signing.xcconfigをインクルードするようにします。
#include? "Signing.xcconfig"コードサイニングを設定する
Xcodeでは、コードサイニングの設定は次の2箇所のいずれかで行います。
- 各ターゲットの
Signing & Capabilitiesタブ Build SettingsタブのSigning
Signing & Capabilitiesタブ
各ターゲットのSigning & Capabilitiesタブは、ターゲット固有のコードサイニングの設定を行います。このタブで設定した値は、ターゲットのBuild SettingsのSigningにも設定されます。

設定項目はSigningにまとまっています。
| 設定項目 | 説明 |
|---|---|
| Automatically manage signing | Xcode管理にするか |
| Team | デベロッパーチーム |
| Bundle Identifier | バンドル識別子 |
| Provisioning Profile | プロビジョニングプロファイル |
| Signing Certificate | 証明書 |
Build Settingsタブ
Build SettingsタブのSigningに、コードサイニング関連の設定がまとまっています。Signing & CapabilitiesタブとBuild Settingsタブは、同期するようになっています。Build Settingsタブで設定を変更すると、Signing & Capabilitiesタブにも反映されます。
また、Signing & Capabilitiesタブはプロジェクトの設定にはありませんが、Build Settingsタブはプロジェクトの設定にも入っています。
特別な理由がなければ、私は個々のターゲットではなく、プロジェクト全体の設定のBuild Settingsタブでコードサイニングを設定しています。その理由は、プロジェクトに含まれる全ターゲットで一貫したコードサイニング設定を適用するためです。

コードサイニングに関する設定は次のものです。
| 設定項目 | 説明 |
|---|---|
| Code Signing Identity | 証明書 |
| Code Signing Style | Xcode管理にするか |
| Development Team | デベロッパーチーム |
| Provisioning Profile | プロビジョニングプロファイル |
プロジェクトファイルの設定をクリアする
ビルド設定ファイルでコードサイニングの設定を変更する前に、プロジェクトファイルに設定されている値をクリアします。Xcodeはプロジェクトファイルとビルド設定ファイルの両方に設定が書かれていると、プロジェクトファイルの設定を優先します。
次のように操作します。
(1) プロジェクトの設定のBuild SettingsタブのSigning内の以下の設定で、太字になっているものがあるか確認します。
Code Signing IdentityDevelopment TeamCode Signing StyleProvisioning Profile
(2) 太字になっている項目を選択し、Deleteキーを押します。太字になっている項目は、継承した値、または、デフォルト値から変更されている項目です。Deleteキーでクリアすることで、設定がクリアされます。
(3) 同様の操作をターゲットの設定についても行います。
ビルド設定ファイルを編集する
Signing.xcconfigを編集し、次の4つの項目についてコードサイニングを設定します。
CODE_SIGN_STYLEDEVELOPMENT_TEAMCODE_SIGN_IDENTITYPROVISIONING_PROFILE_SPECIFIER
CODE_SIGN_STYLE
CODE_SIGN_STYLEはXcode管理かどうかを設定します。次のいずれかの値を指定します。
Automatic:Automatically manage signingをオンにするManual:Automatically manage signingをオフにする
DEVELOPMENT_TEAM
DEVELOPMENT_TEAMはデベロッパーチームを設定します。値はチームIDです。チームIDは、Appleデベロッパーサイトのアカウント情報の、Membership DetailsページのTeam IDに書かれています。
CODE_SIGN_IDENTITY
CODE_SIGN_IDENTITYはコードサイニングに使用する証明書を設定します。Xcodeで表示される名称を指定します。たとえば、Automaticの場合はApple Developmentなどです。キーチェーンに入っている証明書の場合は、Developer ID Application: Akira Hayashi (XXXXXXXXXX)のように、チームIDまで含めます。(XXXXXXXXXXは実際にはチームID)
PROVISIONING_PROFILE_SPECIFIER
PROVISIONING_PROFILE_SPECIFIERは、プロビジョニングプロファイルを指定します。プロビジョニングプロファイル名、または、UUIDで指定します。
設定ファイルの例
次のコードは、Signing.xcconfigのファイル例です。
CODE_SIGN_STYLE = Automatic
DEVELOPMENT_TEAM = ABCDEFGHIJ
CODE_SIGN_IDENTITY = Apple Development
PROVISIONING_PROFILE_SPECIFIER = ExampleProfileGitの管理対象から除外する
配布するファイルにコードサイニングの設定が入らないようにすることを目的にしているので、Signing.xccconfigをGitの管理対象から外します。Gitのリポジトリに含まれないので、ファイルがないときにビルド出来ない可能性があります。そのため、Debug.xcconfigとRelease.xcconfigで、Signing.xcconfigをインクルードするときに、#include?を使っています。#includeと違って、インクルードファイルがなくてもエラーになりません。











