CLIバリバリの環境で開発していてiOSのプロビジョニングプロファイル(.mobileprovision)の内容や有効期限を確認したくなる事態がままあるのでその方法のメモ
##.mobileprovisionの内容を表示する
プロビジョニングプロファイル(.mobileprovision)の内容をプレインテキストとして表示するには複数の方法がありますが、macOS上でなら以下の方法が簡単でしょう。
$ security cms -D -i [プロビジョニングプロファイル]
Linuxなど、他の環境だとsecurityコマンドが使えないので、opensslコマンドを使い、以下の様にすれば同じ様な効果が得られます。
$ openssl smime -inform der -verify -noverify -in [プロビジョニングプロファイル] 2> /dev/null
※Linuxなどの環境ではRoot CA証明書などの関係でプロビジョニングプロファイルの検証がエラーになるので、それを無視するのに-noverifyオプションを使っています。
##プロビジョニングプロファイルの署名に使われているデベロッパー証明書の内容を表示する
macOSなら、先ほどの**.mobileprovisionの内容を表示する**方法を応用してPlistBuddyなどを組み合わせることでプロビジョニングプロファイル(.mobileprovision)のDeveloperCertificatesを取り出してopensslでプレインテキストとして表示します。
$ /usr/libexec/PlistBuddy -c "Print DeveloperCertificates:0" /dev/stdin <<< $(security cms -D -i [プロビジョニングプロファイル]) | openssl x509 -inform der -text -noout
Linuxの場合はplistを扱うためのPlistBuddyがないので少々厄介ですが、grepやsedを組み合わせてDeveloperCertificatesの値をうまく取り出せればなんとかなります。
/usr/bin/openssl smime -inform der -verify -noverify -in \
[プロビジョニングプロファイル] 2> /dev/null | \
grep -o "<data[^>]*>[^<]*</data>" | sed -e "s/<data>\(.*\)<\/data>/\1/" | \
base64 -d | openssl x509 -inform der -text -noout
※この方法はプロビジョニングプロファイルの中に〜のタグが1つしか存在しないという想定で書かれた乱暴なほうほうなので少々危なっかしいですが…