公開手順について記載された記事は多くあって、その手順通りに従っていれば基本的には公開できますが、機械的に手順を踏んでいくと上記の関係が理解できないままになってトラブルにぶつかると無駄にハマります。
私は先日ハマりまくったせいで少し理解できたので、ここで整理してみます。
証明書(Certificates)
実機デバッグ用(Development)とアプリ公開用(Distribution)がある。
アプリを何個つくろうが、それぞれ1つずつ用意すればOK。
ProvisioningProfileと紐付けすることで、正しい開発者のもとでアプリがビルドされたことを証明する。
AppID
ProvisioningProfileとアプリを紐づけるためのID。
このIDと整合する値をXCode上のBundleIdentifierに記述しないと実機インストールやアプリ公開ができない。
AppIDを「com.example.hogehoge.*」というようにワイルドカード指定しておけば、BundleIDで「com.example.hogehoge.App1」「com.example.hogehoge.App2」などと1つのAppIDで対応できるので、アプリを作るたびにAppIDを追加するといった手間が不要になる。
ただし、アプリ内購入やゲームセンター、Appleからのプッシュサービスに対応するにはワイルドカードは使用出来ない。
ProvisioningProfile
実機デバッグ用(Development)とアプリ公開用(Distribution)がある。
ビルドしたバイナリとAppIDと証明書を紐づける。
AppIDごとに必要になる(アプリごと、ではない)。
Developmentの場合は上記に加えてテストに使用するデバイス(iPhoneなど)を紐づける。
ダウンロードすると「〜.mobileprofile」(iPhoneの場合)といったファイルが落ちてくるのでダブルクリックするとXCodeに追加される。
XCodeにおいてメニューから「プロジェクト」-「プロジェクト設定の編集」と選択して、出て来たダイアログの「コード署名ID」-「Any iOS」の項目に追加したプロファイルを選択する。
ここでDevelopmentのプロファイルを指定してビルドすれば、出来たバイナリを紐付けされているデバイスにインストールして動作確認ができる。
リリース時はDistributionのプロファイルを指定してビルドする。
AppIDにワイルドカードが指定されている場合はアプリごとに用意する必要はない。
BundleID
アプリの識別子と考えていい。
基本的にはアプリごとで一意の値を指定する。
AppIDと整合させる必要がある。
AppIDを「com.example.hoge.*」としたならば「com.example.hoge」までは確実に一致させてい、ワイルドカードに指定した部分は任意の値を入れる(例「com.example.hoge.App1)。
当然、ワイルドカードを使っていない場合は完全に一致させる必要がある。
AppIDと整合しない場合は実機へのインストールやAppStoreへの公開が出来なくなる。
以上がいまの私の理解です。