2023.8.21
プロビジョニングプロファイル(Provisioning Profile)の中身を確認する方法 全4種
iOSアプリ開発に欠かせないものの1つが Provisioning Profile です。
アプリごと、そしてまた配布方式ごとに作られるファイルで、アプリを識別するBundleIDや、使用するiOSの機能、起動できる端末に関する情報、紐づいている証明書など、様々なデータが記録されています。
Provisioning Profile の中身を知ることは、iOSがアプリをどのように扱っているかを正しく理解することに繋がります。また、iOSアプリ開発の難しさの象徴とされる、証明書・秘密鍵・CSR・キーチェーン等々の関係性を理解する助けにもなります。
業務用iOSアプリ開発体制確立の成否は、Provisioning Profile 理解の有無にかかっていると言っても過言ではありません。Provisioning Profile の中身を見る方法を知り、Provisioning Profile の中身に目を向けましょう。ということで、本稿では Provisioning Profile の中身を見る方法について4つ紹介します。
以下、順に見ていきましょう。
QuickLook (Mac)
macOSには、ファイルの中身をプレビューできる QuickLook という機能があります。Finder上でファイルを選択してスペースバーを押すだけで、画像やPDFやOfficeファイルを手軽にプレビューできるのでとても便利です。
標準では一般的なファイルでしか使えませんが、Xcodeをインストールしている環境であれば特殊な Provisioning Profile ファイルも確認可能となります。以下がその様子。
こんなふうに Provisioning Profile の中身を確認することができます。Xcodeをインストールしていなくても、ProvisionQLというオープンソースの QuickLook プラグインをインストールすれば、同様に閲覧できるようになります。情報量は余り変わりません。
QuickLook はGUIを使って Provisioning Profile を手軽に確認したい人には向いている方法です。
テキストエディタ (Mac/Windows)
Provisioning Profile は、普通には閲覧できないバイトコードの中にXML(plist)形式が埋め込まれている特殊な構造をしています。フォーマットは CMS(Cryptographic Message Syntax) で、メール暗号化方式の S/MIME をはじめ様々な用途で使われている形式です。
ですが、Provisioning Profile ファイルを無理矢理テキストエディタで開くことで実体部分であるXMLを表示させることができます。
開くソフトはテキストエディタであれば何でもよく、Windows標準のメモ帳や、macOS標準のテキストエディットでも構いません。開ける以上は普通にテキスト検索することもできます。
XML部分はキー名とその値の組み合わせを並べただけのシンプルな構成になっていますので、どのような値が入っているのかを容易に確認することができます。
例えば、Provisioning Profile を作成した日は CreationDate というキーで以下のように記述されています。
<key>CreationDate</key> <date>2023-08-17T09:01:24Z</date>
また、Provisioning Profile の有効期限日は ExpirationDate というキーで記述されています。
<key>ExpirationDate</key> <date>2024-06-12T03:16:26Z</date>
このように Provisioning Profile は簡単に中身を確認できます。テキストエディタを使って確認するこの方法は、ターミナル操作が苦手だけど Provisioning Profile の中身を検索したい…といった方に向いています。
security コマンド (Mac)
Macでのターミナル操作に慣れている場合、標準でインストールされている security コマンドを使うのがお勧めです。以下のようにして使います。
security cms -D -i [Provisioning Profile ファイルのパス]
cms とは Provisioning Profile のデータ構造である Cryptographic Message Syntax を意味しています。-D はデコード、-i はファイルのパス指定のオプションです。これらの指定で Provisioning Profile の実体であるXMLだけを標準出力に出すことができます。
もちろん、出力結果をパイプで繋いで加工する事もできます。例えば、
security cms -D -i [Provisioning Profile ファイルのパス] | grep "ExpirationDate" -A 1
とすれば期限情報の部分のみを抜き出すことができます。ただ Provisioning Profile のXMLはplist形式ですので、plutil コマンドを使って特定キーの要素を抜き出すほうが良いでしょう。plutil の使い方は本稿の主旨にそれますのでまた機会をみて投稿したいと思います。
Macのターミナル上で他のコマンドも組み合わせて色々解析ができますので、security コマンドを使った方法は Provisioning Profile をより深く理解したい方にお勧めです。
openssl コマンド (Mac/Windows)
残念ながらWindows環境にはMacの security コマンドのようなものはありません。Windows上のコマンドプロンプトで Provisioning Profile の中身を確認したい場合は、Windows用の openssl をインストールした環境で以下のようなコマンドを使います。
openssl smime -inform der -verify -noverify -in [Provisioning Profile ファイルのパス]
-verify オプションはCMSフォーマットのファイル検証とデコードを意味し、-noverify はCMSに内包する証明書を検証しないことを意味しています。コマンドプロンプトで実際に入力してみている様子が以下です。
openssl を使った方法は、Windows 上で Provisioning Profile の中身の情報を基点としたバッチ処理を実装するような場合に向いています。が、余りそんなことはしないでしょう。
なお Mac には openssl が標準でインストールされていますので上記コマンドも使えますが、前項で解説した security コマンドを使うのが一般的です。タイプ数が無駄に増えることも考えると、Provisioning Profile の中身を確認する為にわざわざ openssl コマンドを使う必要はありません。
以上、Provisioning Profile の中身を確認する方法について紹介しました。Provisioning Profile の中身は本当に興味深いです。業務用iOSアプリの開発や管理の本質的理解に繋がりますので、別投稿で追って詳しく解説していきたいと思います。