Provisioning Profileの有効期限をアプリ内で取得
Dec 7, 2016 · iosswift3
AdHoc
で作成したiOSアプリ(ipa)にはプロビジョニングプロファイルの有効期限が存在するが、
その有効期限をアプリ内から確認する方法
確認自体はipaを解凍して見れば良いのだけど、エンタープライズの様にアプリ内で出したい場合は、 この方法であらかじめ設定画面とかに仕込むと良いかもしれない
もちろんSettings.bundle
や直接アプリ内にリテラルとして持たすのも方法の一つだが、
それだと更新の度に余分な作業が発生したり更新忘れとかのミスも発生したりしがちなので、
この方法に行き着いた感じ
(プロビジョニングプロファイルはアーカイブ時に確定されるので、 アプリバージョンのようにビルドスクリプトに仕込んでといった技は使えない。 Xcode7以前はdryrunでビルド設定を出力させてそこから特定ということもできたが、 Xcode8からの自動にした場合は使えないっぽい)
方法
ipa作成時のプロビジョニングプロファイルについてまとめると、
- プロビジョニングプロファイルの中身はほぼ
plist
(XML) - 有効期限はプロビジョニングプロファイルの中の
ExpirationDate
にDate
(NSDate)で記載 - プロビジョニングプロファイルはアプリのパッケージの中に
embedded.mobileprovision
という名前で同梱
これを踏まえてコードにすると、以下の感じになる
まずは1行目にあるように、同梱されているプロビジョニングを取得する
デバッグ実行時には正しく取得できないので注意!
次に5〜14行目にあるように、plist
として必要な部分のみに加工。
(不要部分があると変換に失敗するので)
抜き出したらPropertyListSerialization
でDictionary
に変換して有効期限を抜き出す
あとは、画面に表示させる為に文字列に変換してやって完了 (例では余裕を持って1日前の日付にしている)
開発環境
- Xcode 8.1
- iOS 9.3.2 / 10.1.1
- iPhone 6+ / 7+