☠️

社内用 iOS アプリ開発ではプロファイルの有効期限に気をつけよう

2020/10/23に公開

ADEP(Apple Developer Enterprise Program) で社内配信するアプリケーションを作るにあたって注意したいことがありましたので、前提知識とともにまとめました。

もし社内配信している iOS アプリのプロビジョニングプロファイルの有効期限が切れるとどうなる?

プロビジョニングプロファイルの有効期限は作成後1年です。
この有効期限が切れるとどうなるか。

アプリがある日を境に起動しなくなります。

アプリをタップして起動すると瞬時にアプリが落ちるので、致命的な不具合が起きたような状態になります。

MDM(Mobile Device Management) でアプリを配信していた場合は、再配信すれば問題が解決しますが、アプリの配信まで時間がかかるため解消には時間がかかります。

それでは、有効期限を切らさないようにするためのノウハウを前提知識から確認していきましょう。

前提知識

ADEP(Apple Developer Enterprise Program) とは

通常の iOS アプリの開発では、Apple Developer Programを使って App Store でアプリを一般公開します。

一方で、App Store で公開しないアプリを開発する場合は、ADEP(Apple Developer Enterprise Program)が必要になります。これを使うと大きな組織が MDM を経由して iOS アプリを社内配信して内部利用できるようになります。

MDM(Mobile Device Management) とは

MDM とは、スマートフォンやタブレットなどの携帯端末を業務で利用する際に一元的に管理するための仕組みです。MDM を使うと アプリ(ipa ファイル)を管理対象のデバイスに配信できます。

ipa ファイルとは

MDM で配信する ipa ファイルとは、Xcode から出力できるアプリケーションファイルです。

ipa ファイルの中身

ipa ファイルの実態は zip ファイルということもあり、下記の操作で内容を確認できます。

  1. ipaファイル zip にリネーム
  2. zip ファイルを展開
  3. パッケージの内容を表示

プロビジョニングプロファイル(.mobileprovision)とは

ipa ファイルに含まれるものとして、重要になるものとしてプロビジョニングプロファイル .mobileprovision があげられます。

プロビジョニングプロファイルとは、App Store 以外から iOS アプリを配信する際に利用するバイナリファイルです。

  • アプリのメタ情報(アプリID、有効期限)
  • (Distribution)証明書
  • インストール可能な端末
    などの情報が入っています

(参考) プロビジョニングプロファイル

Distribution 証明書とは

ipa ファイルに含まれるものとして、もう1つ重要なものに Distribution 証明書 があげられます。
Distribution 証明書はアプリを配布する際に利用する配布用の証明書です。
前述のプロビジョニングプロファイルにも証明書が紐付いていることがわかると思います。

プロビジョニングプロファイルの有効期限のポイント

このプロビジョニングプロファイルの有効期限が、アプリの有効期限になるわけですが、
この有効期限には癖がありますので、ポイントを書きます。

プロファイルの有効期限は Distribution 証明書の有効期限に左右される

プロビジョニングプロファイルの有効期限は

Distribution 証明書は作成後、3年間有効です。
プロビジョニングプロファイルは作成後、1年間有効です。

プロビジョニングプロファイルの有効期限は、実は Distribution 証明書によっても
左右されます。

Distribution 証明書の有効期限がプロビジョニングプロファイルの有効期限より短い場合、
プロビジョニングプロファイルの有効期限は、Distribution 証明書の有効期限までになります。

プロファイルを作成後は必ず1年間有効ではなく、タイミングによっては1年未満である時期があるので注意です。

Automatically manage signing を使うとプロビジョニングプロファイルの有効期限が伸びない

Automatically manage signing を使うと Xcode が自動的にプロビジョニングプロファイルを管理してくれるので、楽です。

ただし、エンタープライズ向けの場合は注意が必要です。

2020/10時点では、Automatically manage signing を使ってエンタープライズ用にビルドしても、プロビジョニングプロファイルはビルドしてから 1年後 にはなりません。

いつになるのかというと、初回ビルド時(Distribution 証明書を発行後の初回ビルド?)の有効期限になります。

そのため、何回 ipa ファイルを出力しても、ビルドしてから1年後にはなりません。。。(涙)

  • ローカルのプロビジョニングプロファイルを全て消す
  • 別の端末でビルドする

どちらをしても駄目です。

Therefore the answer seems to be that we shouldn't be using automatic signing for in-house/enterprise distibution, but instead only for App Store deployments.
When are profiles renewed when using “Automatically manage signing”/allowProvisioningUpdates?

と書いている人もいるので、エンタープライズ向けの場合は、Automatically manage signing は使わずに、プロビジョニングプロファイルを手動で管理にするというのが現状の答えのようです。

手動でプロファイルを管理していても思ったように有効期限が伸びない・・・・??

Xcode + プロファイルの手動管理 を行った場合でも、アプリの有効期限が伸びない場合があります。

Xcode は一度ローカルにダウンロード(キャッシュ)したプロビジョニングプロファイルを使い続けるという仕様になっているため、 PreferencesAccountsDownload Manual Profiles を何度もクリックしても更新はされません。

その場合は、ローカルにキャッシュされているプロビジョニングプロファイルを一度削除する必要があります。

ローカルにキャッシュされているプロビジョニングプロファイルの削除の仕方

~/Library/MobileDevice/Provisioning Profiles/
に保存されていますので、ターミナルなどで削除すると良いでしょう。

削除してから再度 Xcode を起動してプロファイルをダウンロードすると、最新のプロビジョニングプロファイルがダウンロードされるはずです。

(番外編) 有効期限の切れそうな Distribution 証明書の再作成時に、旧証明書を Revoke しないように注意


(注意) Distribution 証明書をうっかり Revoke すると、該当の証明書を利用して社内配信中の iOS アプリがその瞬間から利用できなくなります。

Distribution 証明書の有効期限が切れそうな場合は、新規にもう一枚証明書を発行して、新しい証明書でアプリをビルドして配布するのが良いと思います。

新しい証明書を発行したからといって、古い証明書を即座に Revoke しないように気をつけましょう。(私は怖くてやったことがありません。。。)

まとめ

  • Automatically manage signing を使わず、手動でプロビジョニングプロファイルを作成する
  • Xcode 上でビルドする際は、プロビジョニングプロファイルを手動で削除して、古いプロビジョニングプロファイルが同梱されないようにする(fastlane match を使えば効率化できそう)
  • 社内配信している ipa ファイルの有効期限を意識して、定期的にプロビジョニングプロファイルの有効期限を延長したアプリを配信する

(もっといい方法をご存知の方は、ぜひ教えてください)

この記事が気に入ったら、下のハートマークをおしてもらえると嬉しいです。

Discussion