【iOS】3秒でアプリ申請/プロビジョニングプロファイル周りの各用語を解説する

いろんなサイトを見る時に、単語の意味がわからなくて困ったのでまとめました。
3秒で話せるくらい簡単にまとめました（太字の解説）。
もっと詳しいことを知りたい方は、下にリンクを貼っておきますので、参考にしていただければ。

**注意**

* 手順については解説していません
* 参考サイトからの引用多めです（リンク切れが発生した時のことを考えて書き写しています）
* 情報が古い/間違っている場合、コメントをお願いします


### プロビジョニングプロファイル
 **「どこどこの誰々さん」は「どのデバイス」を使っていて、「どのアプリケーション」を作っているかという情報が書いてあるファイル。**
開発中（やAdHoc用）アプリを、iPhone/iPadの実機にインストールするために必要。
アプリケーションID、デバイス識別子、正規開発者証明書の関係をまとめたファイル。

### Profile UUID 
 **プロビジョニングプロファイルそれぞれに割り振られているID。**
作成時に自動的に生成される。
 UUID = Universally UniqueIDentifier (全世界で2つ以上のアイテムが同じ値を持つことがない一意な識別子のこと) 

### 正規開発者証明書（.p12ファイル）
 **「どこどこの誰々さん」の部分。**   
キーチェーンに保存されているやつ。
[Certificates](https://qiita.com/saki-toto/items/df84cd687919ec28591b#cer%E3%83%95%E3%82%A1%E3%82%A4%E3%83%ABcertificate%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E8%A8%BC%E6%98%8E%E6%9B%B8%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB)から出力できるファイル。暗号化された秘密鍵と証明書(≒公開鍵)のペアなので、扱いには気をつける必要がある。 
以下の種類がある。

 * iOS Development：開発用 
 * iOS Distribution (AppStore)：App Store配布用 
 * iOS Distribution (Ad Hoc)：[AdHoc](https://qiita.com/saki-toto/items/df84cd687919ec28591b#%E8%A9%95%E4%BE%A1%E7%94%A8%E9%85%8D%E5%B8%83adhoc)配布用 

### デバイス識別子(UDID)

**「どのデバイス」部分。**
開発中（やAdHoc用）の、アプリを動かしたいデバイスの識別子。 
App Store申請用には不要。（誰がインストールしてどのデバイスで動かすか分かんないからね） 

### アプリケーションID(App ID)

**「どのアプリケーション」部分。** 
アプリケーションを識別するID。

#### App ID Prefix 

**AppIDの最初の方についてる情報**
デフォルトではTeam ID となる 

#### App ID Suffix

**AppIDのお尻についてる情報**
以下の二種類がある。

 - Explicit App ID：それぞれのアプリ固有。BundleIDと同じ。配布用はこっち。
 - Wildcard App ID：複数のアプリケーションに使用できる 

### Team

プロビジョニングプロファイルを作成したAppIDのPrefix。
**Appleから自動で採番される、一意のID。**


### Bundle Identifier(Bundle ID)

App IDからPrefixを除いたもの。
App IDが xxxxx.jp.domainname.appnameの場合はBundle Identifierはjp.domainname.appname 


### CSRファイル（CertSigningRequestファイル/証明書署名要求）  

**「自分はどこどこの誰々さんなんです」ってAppleに提出するファイル。**
証明書の申請時に認証局に提出するファイル。
「公開鍵」とその所有者情報、及び申請者が対応する秘密鍵を持っていることを示すために申請者の署名が記載されている。 
このファイルに含まれる情報を元にCER証明書が発行される。 

### CERファイル（Certificateファイル/証明書ファイル）  
**「どこどこの誰々さんである」ってことを証明するもの。身分証明書。**
公開鍵が誰の公開鍵であるかを証明しているもの。暗号化された証明書。 

DevelopmentとProductionに分かれており、以下のような種類がある。

 - Development
  - 『iOS AppDevelopment』：iOSアプリ開発用 
  - 『Apple Push Notificationservice SSL (Sandbox)』:テストでプッシュ通知を行う際に必要
 - Production
  - 『App Store and Ad Hoc』：アプリの『App Store』への提出や、AdHoc配布用 
  - 『Apple Push Notificationservice SSL (Production)』：製品版でプッシュ通知を行う際に必要

### CodeSigning  
**「このアプリは、どこどこの誰々さんが作ったもの」ってことを証明するもの。**
コードサイニング証明書は、ソフトウェア（プログラム）にデジタル署名を行う電子署名用の証明書。
ソフトウェアの配布元を認証し、なりすましや内容の改ざんなどがされていないことを保証する。

 Code Signing ErrorなどのエラーはProvisioningProfile（Certificates）に登録されていないアカウントでアプリをビルドしようとすることが原因。  

# AppStoreを介さないアプリの配布の種類
### 評価用配布（AdHoc）
**最大100台のデバイスまでの限定配布用。**
インストールできるデバイスのUDIDをProvisioning Profileに登録する必要がある。 
デバイス追加の都度、UDID登録、Provisioning Profile更新、リビルド等の作業が必要。 
証明書が無効になるとアプリが起動できなくなる。
アプリ配布は開発用端末にデバイスを1台ずつUSB接続して行う。 

### 組織内配布（In-House） 
**社内向けのAppを社員に配布する用。**
台数無制限でアプリ配布可能。 
AdHocで必要となる煩雑な作業（UDID管理等）をしなくて良いが、意図しない関係者でもアプリインストールできるリスクあり。
証明書が無効になるとアプリが起動できなくなる。
In-House版アプリの利用者はADEP（[Apple Developer Enterprise Program](https://developer.apple.com/jp/programs/enterprise/)）契約主体法人の従業員に限る。 


# アプリを配布するのに必要なライセンスの種類
### Apple Developer Program（ADP）
**アプリをAppStoreでリリースしたい人全員に必要なライセンス。**
登録料は１年あたり1万円ちょっと。１年毎に更新が必要。

### Apple Developer Enterprise（ADEP）
**AppStoreに公開せず、社内配布したい時用のライセンス。**
こちらも１年毎に更新が必要で、登録料は4万円くらい。法人に限る。 
台数無制限で特定の人にアプリを配布できる。 

### iOS Developer Universal Program（iDUP）
**学生にアプリ開発教育をする用のライセンス。**
教育機関のみが契約できる。
 
# その他
知らなくても良いが、知っていると良いかもしれないもの

### ipaファイル  
**アプリの全ての情報の塊。**
コンパイル済みのアプリケーションの情報が入ったzipファイル。 
プロビジョニングプロファイルの情報+アプリの情報(名前、バージョン、ビルド番号、バンドルID、対象デバイス)が記録されている。 
 [ipaファイルを直接iPhoneにインストールする](http://www.l08084.com/entry/2018/04/06/224719)ことができる。 


# 参考サイト

- [\[iOS\]プロビジョニングファイルと証明書の意味](https://qiita.com/edo_m18/items/6f10e57f95b25d9dab4e)
- [iOSアプリのプロビジョニング周りを図にしてみる](https://qiita.com/fujisan3/items/d037e3c40a0acc46f618)
- [iosの証明書の更新のハマりどころ](https://qiita.com/lughshot/items/feebb14bd4fcc2d31fe2)
- [iOSアプリ開発用証明書（.cer形式ファイルと、.p12形式ファイル）の取得](http://mmorley.hatenablog.com/entry/2015/09/07/131745)
- [Appleの証明書とかまとめ！](https://dev.classmethod.jp/smartphone/iphone/apple-certificates-summary-and-etc/)
- [iOSライセンス＆配布方法まとめ](https://qiita.com/isaac-otao/items/126bced83d9af86c7ce5)
- [【2016年最新版】わかりやすく徹底解説！AppIDを登録する手順](http://unitynightowlgames.hatenablog.com/entry/2016/10/02/221903)
- [fastlane match
でiOSアプリ開発者を「証明書管理の苦しみ」から解放せよ！](https://tech.bizreach.co.jp/posts/161/ios-manage-certificates/)
- [ADEP (Apple Developer Enterprise Program) とは何か | エンタープライズiOS研究所](https://www.micss.biz/2019/11/28/980/)