大企業が Apple Developer Program と Apple Developer Enterprise Program を契約するときに知っておきたい情報まとめ

Apple Developer Program では iOS アプリを実機上で実行できる端末数が100台までという制限があります。ある程度の人数のエンジニア（開発機たくさん）や QA チーム（検証機たくさん）を抱えた大企業がこの100台制限にかかったとき、Enterprise Program をどう活用したらよいのか調べたときのメモです。

この記事は 2017/02/01 ごろの情報に基づきます。情報に間違いがあればご指摘ください。

# TL;DR

基本は AppStore 公開と開発のために Apple Developer Program 一つを契約する。100台制限が問題となる場合は、追加で Apple Developer Enterprise Program を契約する。さらに台数制限が問題となれば必要な分だけ Apple Developer Enterprise Program を複数契約する。

# 調査したことまとめ

## Apple Developer Program / Apple Developer Enterprise Program について

[比較表 [iOS] Apple Developer Program と Apple Developer Enterprise Program の違い ｜ Developers.IO](http://dev.classmethod.jp/smartphone/difference-between-developer-and-enterprise-program/)
[登録 - サポート - Apple Developer](https://developer.apple.com/support/enrollment/jp/)

* Developer Program 11,800円/年
    * DUNS 番号ありの組織（チーム）登録または個人（一人のみ）登録のどちらか
    * AppStore で公開できる（iTunes Connect アカウントが付属する）
    * AdHoc/Xcode 実行の端末登録制限100台あり（iPhone/iPad/Watch/iPodTouchごとに100台）
* Enterprise Program 37,800円/年
    * DUNS 番号ありの組織登録のみ
    * AppStore で公開はできない（iTunes Connectアカウントが付属しない）
    * AdHoc/Xcode 実行の端末登録制限100台あり（iPhone/iPad/Watch/iPodTouchごとに100台）
    * InHouse ビルドできる
    * In-App Purchase の設定およびテストはできない（iTunes Connectアカウントがないため）

## Program 登録の制限事項

Program 開設に使用した AppleID は制限が強く、開設専用に AppleID を作成したほうが良さそうです。

[登録の前に - Apple Developer Enterprise Program](https://developer.apple.com/programs/enterprise/enroll/jp/)

* 同一の AppleID で Developer Program や Enterprise Program を複数登録することはできない。AppleID にただ一つの Developer Program/Enterprise Program だけが結びつく。Developer Program/Enterprise Program を開設した AppleID は他のDeveloper Program/Enterprise Program の Member になることができない
* 同一の企業（同一 DUNS 番号）で Developer Program を複数登録することはできない
* AppleID が異なれば同一の企業（同一DUNS番号）でEnterprise Programを複数登録することはできる
* Developer Program/Enterprise Program への Member 追加は無料で無制限
* Member は一つの AppleID で複数の Developer Program/Enterprise Program へ重複して加入できる

## その他のアカウントについて

* Member Center (Apple Developer Site)
    * 上記 Developer Program/Enterprise Program に含まれる開発者の管理機能のこと
    * 開発ユーザー登録・証明書・開発機・AppID・Provisioning Profile を管理する
* iTunes Connect
    * AppStore でのアプリ公開作業をするところ
    * iTunes Connect ユーザ登録・アプリリリース・売り上げ確認・支払い管理をする
    * Developer Program へ登録すると自動的に iTunes Connect へもアカウント作成される
    * Enterprise Program は結びつかない

## Member の権限について

全体責任者のチームエージェント（Agent）が一人存在する。通常は開発責任者を Admin としてそちらで管理を行う。

[開発者アカウントチームの管理](https://developer.apple.com/jp/documentation/IDEs/Conceptual/AppDistributionGuide/ManagingYourTeam/ManagingYourTeam.html)

* チームエージェント（Agent） => Apple に対する窓口・契約管理者・支払い・全権限所有
* チーム管理者 （Admin） => Member 管理、デバイス管理、AppID, Provisioning Profile の作成・編集権限
* チームメンバー（Member） => 証明書の登録、Provisioning Profile のダウンロードなど

## iTunesConnect の権限について

全体責任者のチームエージェント（Agent）が一人存在する。他のユーザは必要に応じて Role を調整する。

[iTunes Connect Developer Guide | iTunes Connect Properties](https://developer.apple.com/library/content/documentation/LanguagesUtilities/Conceptual/iTunesConnect_Guide/Appendices/Properties.html#//apple_ref/doc/uid/TP40011225-CH26-SW24)

* チームエージェント（Legal, Admin） => Apple に対する窓口・契約管理者・支払い・アプリ転送、アプリ削除など全権限所有
* iTunesConnectユーザ => Role で権限管理される
    * Admin => 契約以外の全権限所有
    * Finance => 財務レポート、売上、iAdなどへのアクセス権限
    * Sales => 売上、iAd などの権限。Finance より弱い権限
    * AppManager => 特定のアプリに関する強い操作権限
    * Developer => 特定のアプリへのアクセス。アプリバイナリアップロード
    * Marketer => ContactUs権限、マーケティング担当者
* テストユーザ => テスト版アプリの実行、テスト環境へのアクセス

## 更新系作業

* Developer Program
    * 証明書は1年で更新（Admin・Member）
    * Provisioning Profile は1年で更新（Admin）
    * 年一回端末登録の見直し
* Enterprise Program
    * 証明書は3年で更新（Admin・Member）
    * Provisioning Profile は1年で更新（Admin）
    * 年一回端末登録の見直し

## アプリの署名について

[証明書 - テクニカルサポート - Apple Developer](https://developer.apple.com/support/certificates/jp/)
[署名IDや証明書の管理](https://developer.apple.com/jp/documentation/IDEs/Conceptual/AppDistributionGuide/MaintainingCertificates/MaintainingCertificates.html)

* .ipa の署名は「Provisioning Profile + 証明書」の組み合わせで行う
* Provisioning Profile
    * Provisioning Profile には個別の AppID が結びついている
    * Provisioning Profile には Development（開発）, Distribution（AdHoc, AppStore, InHouse）の三種類がある
    * ワイルドカード AppID による AdHoc, InHouse Provisioning Profile を作ることはできる。ただし Push 通知・iCloud・AssosiatedDomains などの一部が使えないため、用途は限られる
* 証明書
    * 証明書には iOS Development（開発）と iOS Distribution（AdHoc, AppStore, InHouse）がある。Provisioning Profile の種類に合わせて使用する
    * iOS Development 証明書は Member 個人に結びつき、個人で秘密鍵を管理する
    * iOS Distribution 証明書は Admin が作成し、管理する
    * 秘密鍵は Mac キーチェーンから .p12 ファイル形式でエクスポートして管理する

## AppID について

* AppID は iOS アプリの BundleID のこと
* Apple Developer サイトから管理する
* iTunes Connect/Developer Program/Enterprise Program の全アカウント・全世界で AppID はユニークでなければならない