2016.11.28

iOSアプリの署名とDeveloper Programの関係

iOSには安全性を担保する為に、各アプリが誰によって作られどのように配布されているのかを検証する仕組みが備わっています。その為、全てのiOSアプリにはデジタルの名札のようなものが紐付けられるようになっていて、それを署名(CodeSign)と言います。

micss-blog_20161128_signature
(Thanks! The photo on flickr by Sebastien Wiertz CC BY 2.0)

Developer Program は署名の為に必要

通常、署名はアプリ開発環境であるXcodeで行われます。

アプリがインストールされる時起動される時、iOSは各アプリの署名を見て、

  • 誰がこのアプリを作ったのか
  • まだ起動が許される期間かどうか
  • この端末で起動させても良いアプリかどうか

などの確認を行います。アプリに開発者名と制約条件が書かれた名札のようなものが紐付いているとイメージすると良いでしょう。

micss-blog_20161126_codesign

この署名に必要なのが、証明書や秘密鍵、プロビジョニングプロファイルと呼ばれるもの。実態は拡張子が .p12 や .mobileprovision のファイルですが、これを先の例えでいうところの名札としてアプリに紐付けるのが、署名という行為です。

Apple社との開発者契約(Developer Program)は、これらアプリの署名に欠かせないファイル群を継続的に入手する為に必要となるものです。契約は毎年の更新が必要です。

Developer Program の契約をしなければ、署名に必要な証明書やプロビジョニングプロファイルを入手できません。署名ができないということは、Xcodeでアプリを開発してもiOSデバイスにインストールできないということです。「別にシミュレータ上だけで充分」という場合には Developer Program の契約は不要です。

Developer Program には以下のように3種類あります。

Developer Program の種類 対象
Apple Developer Program
(旧 iOS Developer Program)
AppStore向けのアプリ開発に
Apple Developer Enterprise Program
(旧 iOS Developer Enterprise Program)
in-houseアプリの開発に
iOS Developer University Program 大学での教育用途に

これらDeveloper Programの種類とアプリの署名は密接に関連しています。

必要な署名の種類で契約が異なる

iOSは、アプリの署名を検証する際、「誰が作ったのか」に加えて「どのような範囲で配布されるのか」を見ます。この「配布の範囲」の数だけ署名にも種類があります。配布とはインストールさせる(して貰う)ということですが、一口に配布といっても範囲は色々。

  1. 開発途中のアプリを開発者本人が自分のiPhoneにインストールする
  2. 開発中のアプリを身近な関係者に少し見てもらう為にインストールさせる
  3. AppStoreから世界の不特定多数の人に配布する
  4. 企業が自社専用のアプリを従業員に提供する

誰が作ったアプリかというのは一緒でも、どのような範囲で配布するのかでこれだけの種類があります。全部で4種類で、Developer Program の種類によって署名できるものが違ってきます。

配布形態 (a) development (b) AdHoc (c) AppStore (d) InHouse
配布範囲 開発担当者 プロジェクト関係者 全世界(または指定国) 特定企業内
誰の端末 開発者 非開発者で関係者 不特定の一般ユーザ 特定企業内のユーザ
いつ 開発中 開発中・評価中 リリース リリース
どうやって USB USB/OTA AppStore USB/OTA

Apple Developer Program で対応可能な配布形態

development, AdHoc, AppStoreの3種類の署名ができるのが Apple Developer Program です。つまり、開発者が自身のデバイスにインストールし、身内関係者や限られた顧客の為にも配布ができ、最終的にはAppStoreで公開もできる契約です。

配布形態 development AdHoc AppStore in-house
配布範囲 開発担当者 プロジェクト関係者 全世界(または指定国) 特定企業内
誰の端末 開発者 非開発者で関係者 不特定の一般ユーザ 特定企業内のユーザ
いつ 開発中 開発中・評価中 リリース リリース
どうやって USB USB/OTA AppStore USB/OTA

Apple Developer Enterprise Program で対応可能な配布形態

development, AdHoc, InHouse の3種類の署名ができるのが Apple Developer Enterprise Program です。前述の Apple Developer Program との違いは、AppStoreが選択できない代わりにInHouseの配布形態を選べることです。

配布形態 development AdHoc AppStore in-house
配布範囲 開発担当者 プロジェクト関係者 全世界(または指定国) 特定企業内
誰の端末 開発者 非開発者で関係者 不特定の一般ユーザ 特定企業内のユーザ
いつ 開発中 開発中・評価中 リリース リリース
どうやって USB USB/OTA AppStore USB/OTA

iOS Developer University Program で対応可能な配布形態

これは多くの人には馴染みがない契約ですが、大学等でiOSアプリ開発を教育目的で行う場合に必要です。development, AdHocの署名しかできません。そもそも学内教育目的であれば公開という概念が存在しませんから理にかなっていると言えます。

配布形態 development AdHoc AppStore in-house
配布範囲 開発担当者 プロジェクト関係者 全世界(または指定国) 特定企業内
誰の端末 開発者 非開発者で関係者 不特定の一般ユーザ 特定企業内のユーザ
いつ 開発中 開発中・評価中 リリース リリース
どうやって USB USB/OTA AppStore USB/OTA

このように、iOSアプリは署名によって、誰がどんな対象に配布しようとしているアプリなのか定義されるようになっています。Appleは各配布形式に対応した署名用ファイルの取得のできる/できないを契約毎に変えることによって、アプリの配布をコントロールしているのです。

micss-blog_20161128_springboard
(Thanks! The photo on flickr by Jason Farrell CC BY 2.0)

業務用iOSアプリでは、配布形態を意識する

企業でiOSアプリを開発/活用する場合、そのアプリをどう提供するのか正しく意識しておく必要があります。

一口に企業が使う業務アプリと言っても、企業内はInHouseだからADEPだ…とはなりません。場合によってはAppStoreの配布が適当である場合もあります。VPPやCustomB2Bと呼ばれる手法を組み合わせるべき時もあります。

下手な運用をすると厳しいADEPの制限に抵触してしまい、InHouseの形態で配布した業務アプリがある日突如として起動しなくなる、といった最悪の事態に陥る可能性もあるのです。(実際に面識のない企業様から緊急の相談連絡を頂いたこともあります)

企業のiOSデバイス活用では、アプリをどう配布するのか常に意識しておきたいものです。できれば、業務用アプリの開発を委託する場合には、開発会社がこれら配布形態の違いを説明できるかどうかは確認されることをお勧めします。