
自社製品を複数企業へライセンス提供するための
iOS Custom App配布 調査資料
最近、アプリの公開規則や組織向けアプリ提供の内容が変わってきている様子。気になっていることがあって調査した内容をBlogにメモしておく。自社がアプリの所有者・保守主体となり、複数の顧客企業だけに正式版を配布する場合の アカウント構成、Xcode操作、顧客配布、運用上の制限、プライバシー・セキュリティー上の論点を整理する。
1. 本資料の位置付けと免責
本資料は、調査基準日時点で確認できたAppleの公開情報を基に、検討上の論点を整理したものである。 Appleの制度、画面名称、審査基準、利用条件、対応OS、料金およびMDM製品の仕様は変更される可能性がある。
記載内容の正確性・完全性・将来の継続性、Appleによる承認、審査期間、特定環境での動作、 セキュリティーまたは法令適合性を保証するものではない。実装・契約・本番導入前には、 Appleの最新公式資料、Apple Developer Support、採用するMDM事業者、法務・個人情報保護・情報セキュリティーの専門家に確認すること。
「免責」と記載しても、契約や法令上発生する責任が当然に消滅するわけではない。顧客向けの正式資料に転用する場合は、 実際の契約、処理データ、システム構成および運用体制に合わせた確認が必要である。
2. 結論:採用する基本構成
3. 全体の配布構成
| 主体 | 使用サービス | 担当範囲 | 保有すべき情報 |
|---|---|---|---|
| 自社 | Apple Developer Program/App Store Connect | 開発、署名、審査、更新、対象組織登録 | Bundle ID、Team ID、アプリ登録、証明書・鍵、ソースコード |
| 顧客企業 | Apple Business | 組織確認、ライセンス取得、配布方針 | Organization ID、Apps and Booksのロケーション・トークン |
| 顧客IT/委託先 | MDM | 端末登録、割当、更新、削除、制限 | 端末・利用者情報、構成プロファイル、運用ログ |
| 自社バックエンド | 認証・API・DB | 契約企業と利用者の認証、権限・データ分離 | テナント、ユーザー、ロール、監査ログ、失効情報 |
4. アカウントと権限設計
4.1 自社Developerアカウント
- 個人名義ではなく、自社法人名義のApple Developer Programを使用する。
- Account Holderは、契約締結権限と長期的な在籍が見込める自社責任者とする。
- 開発者は各自のApple Accountを招待して使用し、共通アカウントを共有しない。
- 役割は最小権限とし、開発担当はDeveloper、申請担当はApp Manager等に分ける。
- 退職者・外注終了者のアクセスを即時削除する。
- Account Holderの2要素認証、復旧連絡先、支払方法、年次更新を属人化させない。
4.2 顧客企業のアカウント
- 顧客企業ごとにApple Businessの組織確認を行う。
- 顧客のOrganization IDと正式組織名を取得し、App Store Connectに登録する。
- 顧客のApple Business管理者アカウントを自社が恒常的に預からない。
- 顧客のMDM設定は原則として顧客または顧客の正規委託先が管理する。
5. 開発開始前の準備
5.1 製品識別子
Bundle IDは自社ドメインを基準に、一製品を一意に識別できる形式とする。
jp.co.example.productname
- 顧客ごとに同一機能の別アプリを量産せず、可能な限り一つのアプリを複数テナントで共用する。
- 顧客ごとの差異はログイン後の契約情報、Feature Flag、MDM構成等で切り替える。
- Bundle IDは最初のビルドをアップロードした後に変更できないため、仮名称で登録しない。
5.2 顧客から取得する情報
- Organization ID
- Apple Businessに登録された正式組織名
- 利用国・地域、対象OS、端末所有区分
- MDM製品名、MDM運用担当者、配布方式
- 利用予定台数、共有端末の有無
- SSO、証明書、VPN、社内ネットワークの要件
- 取得データと保存場所、保存期間、削除要件
6. App ID、App Store Connect、Xcodeの操作
6.1 App IDを登録
- Apple Developerへログイン
Certificates, Identifiers & Profilesを開く。 - IdentifiersからApp IDを追加
Explicit App IDとして自社製品のBundle IDを登録する。 - Capabilityを設定
Push Notifications、Associated Domains、Sign in with Apple、App Groups等、実際に使用する機能だけを有効化する。
6.2 App Store Connectにアプリを作成
- Apps → + → New App
iOS、アプリ名、主要言語、Bundle ID、SKU、User Accessを設定する。 - Pricing and Availabilityを開く
App Distribution MethodsでPrivateを選択する。 - 顧客組織を指定
TypeでOrganization IDを選び、顧客ごとのIDと正式組織名を入力する。 - 配布地域を確認
海外拠点が利用する場合は、必要な国・地域で利用可能になるよう設定する。
6.3 Xcodeの署名設定
- Xcode → Settings → Accounts
招待済みの担当者本人のApple Accountを登録する。 - Target → Signing & Capabilities
Teamに自社法人Teamを選択する。 - Bundle Identifierを一致させる
Developer Portal、App Store Connect、Xcodeの3か所で完全一致させる。 - Automatically manage signingを有効化
通常はXcodeに配布用証明書とProvisioning Profileを管理させる。 - VersionとBuildを設定
例:Version1.0.0、Build1。再アップロード時はBuildを増やす。
6.4 Archiveとアップロード
- Generic iOS Deviceまたは実機を選択
Simulatorを選んだ状態ではArchiveできない。 - Product → Archive
Release構成でアーカイブを作成する。 - Organizer → Validate App
署名、Entitlement、アイコン、プライバシー関連設定等のエラーを解消する。 - Distribute App → App Store Connect → Upload
Custom AppでもEnterpriseやAd HocではなくApp Store Connectを選択する。 - アップロード後の処理を待つ
App Store ConnectにBuildが表示されたら申請対象バージョンへ割り当てる。
6.5 審査提出
- 説明、スクリーンショット、サポートURL、プライバシーポリシーURLを登録する。
- App Privacy、年齢区分、暗号化・輸出関連情報等へ正確に回答する。
- 審査用の期限付き一般ユーザーアカウントと匿名化済みサンプルデータを用意する。
- 特殊な機器や操作手順がある場合は、Review Notesで具体的に説明する。
- 本番管理者アカウント、本番顧客データ、恒久的な共通パスワードを審査用に渡さない。
- 社内VPN限定の場合は、安全に分離された審査環境を用意する。製品版に審査用バックドアを残さない。
7. 審査承認後の顧客配布
- 顧客のApple Businessに表示
指定された顧客だけがApps and BooksのCustom Appsから確認できる。 - 顧客が必要数のライセンスを取得
配布するロケーションとライセンス数を選ぶ。 - Apple BusinessとMDMを連携
Apps and BooksのサーバトークンをMDMへ登録・同期する。 - 端末または利用者へ割り当て
会社所有端末ではDevice Assignmentを第一候補とする。 - MDMからインストール
監視対象端末ではサイレント導入できる場合がある。その他の端末では利用者承認が必要になる場合がある。 - アプリ内認証
初回起動後、契約企業・利用者・端末を自社バックエンドで認証する。
| 方式 | 特徴 | 評価 |
|---|---|---|
| Device Assignment | 端末単位。個人Apple Accountなしでも利用可能。ライセンスの回収・再割当が可能。 | 会社所有・共有端末に推奨 |
| User Assignment | 利用者単位。複数端末利用に向くが、アカウント設計が必要。 | 個人別業務利用で検討 |
| 引き換えコード | 簡単だが、一度使用したコードを組織が回収・再割当できない。 | 継続運用では原則非推奨 |
8. 更新・保守運用
更新版も初版と同様にAppleの審査対象となる。緊急修正を含め、審査なしで任意のIPAへ差し替えることはできない。
- Version/Buildを更新
同じBundle ID・App Store Connectレコードを使用する。 - Archive・Upload・審査
変更内容、Privacy回答、審査手順を更新する。 - 段階配布
検証端末、限定部門、全社の順にMDM配布する。 - 更新状態を監視
MDMとサーバ側で最低対応バージョン、障害状況、API互換性を確認する。
- Device Assignmentでは、MDMが更新命令を送らなければ更新されない構成がある。
- 新旧バージョンが一定期間混在する前提で、サーバAPIの後方互換性を確保する。
- 強制アップデートは業務停止につながるため、猶予期間とロールバック相当の運用策を用意する。
- App Store上では旧版へ単純に戻せないため、修正版を再提出する手順を整備する。
- Apple Developer Programの年次更新、最新契約への同意、Apps and Booksトークン更新を運用台帳で管理する。
9. 制限・問題点
| 論点 | 影響 | 対策 |
|---|---|---|
| 毎回Apple審査 | 公開時期と緊急修正時間を完全には制御できない。 | 審査期間を含むリリース計画、事前テスト、サーバ側Feature Flagを用意する。 |
| PrivateからPublicへの変更 | 承認後の配布方式変更には新しいアプリレコードと再提出が必要になる。 | 登録前に製品戦略を確定する。一般公開版が必要なら別Bundle IDも検討する。 |
| 自社アカウント依存 | 自社の会員失効時、新規ダウンロードと更新が停止する。 | 自動更新、複数管理者、期限監視、事業継続手順を整備する。 |
| 顧客IT部門への依存 | Organization ID、MDM、トークン、端末登録の不備で配布できない。 | 顧客向け導入手順書、担当窓口、事前確認票を提供する。 |
| MDM費用・運用 | 小規模顧客では導入負担が相対的に大きい。 | 対応MDM、最低構成、非MDM時の制約を製品要件として定義する。 |
| Apple Business対応地域 | 国・地域や組織状態によって利用条件が異なる。 | 契約前に対象地域と顧客の登録可否を確認する。 |
| アプリ移管 | Bundle IDの移管だけで、ソース、サーバ、鍵、Capabilityがすべて自動移行するわけではない。 | 契約終了時の移管対象、費用、期限、技術手順を契約に明記する。 |
| 顧客別カスタマイズ | 分岐を増やすほどテストと審査説明が複雑になる。 | 単一コードベース、設定駆動、テナント別Feature Flagを採用する。 |
10. プライバシー上の考慮
10.1 データ主体と責任分界
顧客企業が従業員情報を管理し、自社がクラウドサービスを提供する場合、顧客が利用目的・利用者管理を担い、 自社が委託先としてデータを処理する構成が想定される。ただし、実際の法的立場は契約と処理実態で決まるため、個別確認が必要である。
10.2 必須となる整理
- 取得項目、取得元、利用目的、保存場所、保存期間、削除条件
- 顧客管理者、自社運用者、再委託先がアクセスできる範囲
- 分析SDK、クラッシュ解析、Push通知、外部AI等へのデータ送信
- 国外保存・国外移転の有無
- 利用者からの開示、訂正、削除、利用停止への対応窓口
- 契約終了時のエクスポート、返却、論理削除、バックアップ消去
10.3 Appleへの申告
- プライバシーポリシーURLは必須。アプリ内からも容易に参照可能にする。
- 自社だけでなく、組み込んだ第三者SDKによる収集もApp Privacyへ申告する。
- 機能目的の収集であっても、Appleの定義上「収集」に該当すれば申告する。
- 位置、写真、マイク、連絡先等は、用途を明確にしたPurpose Stringと必要時の同意を実装する。
10.4 BYOD
個人所有端末ではUser Enrollmentを検討し、組織データと個人データの分離を優先する。 顧客は、MDM管理者が確認できる情報、削除できる範囲、位置情報取得の有無を利用者へ説明する必要がある。
11. セキュリティー上の考慮
11.1 配布制限だけに依存しない
- 利用者ごとの認証を必須とし、共有IDを原則禁止する。
- SSO、MFA、パスキー等をリスクに応じて採用する。
- サーバ側で契約企業、利用者、ロール、端末、セッションを検証する。
- テナントIDをアプリから送られた値だけで信用せず、認証情報から決定する。
- 退職、紛失、契約終了時に、アプリ再配布を待たずアクセスを失効させる。
11.2 秘密情報
- 管理者APIキー、DB接続情報、顧客共通パスワード、長期秘密鍵をアプリへ埋め込まない。
- アクセストークンは短命化し、Refresh Token等はKeychainへ保存する。
- 端末移行させない秘密にはThisDeviceOnly属性を検討する。
- MDM対応時はManaged App Configuration/ManagedAppによる証明書・設定・秘密情報の配布を検討する。
11.3 通信と端末
- TLSとApp Transport Securityを使用し、独自暗号方式を作らない。
- 高機密用途ではPer-App VPN、相互TLS、証明書配布を検討する。
- App AttestまたはManaged Device Attestationを、不正クライアント検出の一要素として利用する。
- アプリデータのiCloud/Finderバックアップ禁止をMDMで検討する。
- Managed Open Inにより、管理アプリから個人アプリへの文書持ち出しを制限する。
- 紛失時のMDM削除と、サーバ側トークン失効の両方を行う。
11.4 ログと監査
- ログへアクセストークン、パスワード、本文、位置等を安易に出力しない。
- 管理者操作、権限変更、データ出力、ログイン失敗を監査可能にする。
- クラッシュ解析SDKへ送るデータを確認し、個人情報や顧客機密を除外する。
- 脆弱性対応、インシデント通知、証拠保全、顧客連絡の手順を事前に定める。
12. ライセンス契約・運用契約で決める事項
知的財産
ソースコード、共通基盤、顧客設定、追加開発部分の権利と利用許諾範囲を分けて定義する。
利用範囲
利用企業、関連会社、利用者数、端末数、地域、再配布・譲渡禁止を定義する。
Apple関連
自社がアプリ所有者であること、審査・制度変更により提供時期や機能が影響を受け得ることを明記する。
MDM責任
顧客側のApple Business、Organization ID、MDM、端末登録、トークン更新の担当を明記する。
保守・更新
対応OS、更新頻度、緊急修正、審査待ち、サポート期限、旧版停止条件を定義する。
個人情報
利用目的、委託・再委託、保存場所、事故通知、監査、削除、契約終了時処理を定義する。
サービス終了
猶予期間、データ出力、削除証明、アプリ停止、ライセンス回収、移行支援を定義する。
保証の限界
Apple審査、OS変更、通信事業者、MDM等、自社が完全には制御できない要因を整理する。
13. 導入前チェックリスト
自社側
- 法人DeveloperアカウントとAccount Holderが確定している
- 年次更新、2要素認証、復旧手段、複数管理者が整備されている
- Bundle IDと自社製品の権利関係が確定している
- Private Distributionとして登録する方針が承認されている
- 顧客テナント分離、RBAC、認証、監査ログが実装されている
- プライバシーポリシーとApp Privacy回答が実態に一致している
- 審査専用環境・アカウント・匿名化データが用意されている
- Apple審査を含むリリース・緊急修正手順がある
- 脆弱性対応とインシデント対応手順がある
顧客側
- Apple Businessの組織確認が完了している
- Organization IDと正式組織名が確認できている
- MDM製品、運用担当者、配布方式が決まっている
- 会社所有端末とBYODの区分が決まっている
- Device Assignment/User Assignmentの方針が決まっている
- Apps and Booksトークンの年次更新担当者が決まっている
- 退職・紛失・契約終了時の削除とアカウント失効手順がある
- 利用者向けプライバシー・MDM説明が用意されている
14. 主なApple公式資料
最終判断時には、以下の最新版および各ページから参照される規約・ガイドラインを再確認すること。
- Distributing Apps on Apple Business and Apple School Manager
- Set distribution methods
- Distribute Custom Apps to Apple devices
- Distribute content with Apps and Books
- Distribute managed apps to Apple devices
- Add a new app
- Create an archive of your app
- Upload an app to App Store Connect
- Program Renewal
- アプリのプライバシーの管理
- App Review Guidelines
- ManagedApp Framework
- User Enrollment and device management
- Establishing your app’s integrity(App Attest)
Apple、App Store、App Store Connect、Apple Business、iPhone、iPad、Xcode等はApple Inc.の商標またはサービス名称である。
No responses yet