<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Provisioning Profile &#8211; MICSS</title>
	<atom:link href="https://www.micss.biz/category/provisioning-profile/feed/" rel="self" type="application/rss+xml" />
	<link>https://www.micss.biz</link>
	<description>“低コスト”で“スピーディ”なモバイル導入をご支援</description>
	<lastBuildDate>Tue, 07 Apr 2026 05:55:27 +0000</lastBuildDate>
	<language>ja</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>https://wordpress.org/?v=4.7.33</generator>
	<item>
		<title>Provisioning Profile を読み解くために使いこなしたいコマンド security と plutil</title>
		<link>https://www.micss.biz/2024/09/30/7358/</link>
		<pubDate>Sun, 29 Sep 2024 22:00:19 +0000</pubDate>
		<dc:creator><![CDATA[OishiYuichi]]></dc:creator>
				<category><![CDATA[Provisioning Profile]]></category>

		<guid isPermaLink="false">https://www.micss.biz/?p=7358</guid>
		<description><![CDATA[これまで Provisioning Profile について何度か投稿してきました。iOSアプリ開発現場を何かと悩ませる最たるものですね Provisioning Profile は開発環境Macのどこに格納されているの [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>これまで Provisioning Profile について何度か投稿してきました。iOSアプリ開発現場を何かと悩ませる最たるものですね</p>
<ul>
<li><a href="/2023/10/16/6324/" rel="noopener">Provisioning Profile は開発環境Macのどこに格納されているのか</a></li>
<li><a href="/2023/08/21/6218/" rel="noopener">プロビジョニングプロファイル(Provisioning Profile)の中身を確認する方法 全4種</a></li>
</ul>
<p>Provisioning Profile を制するものは iOS アプリ開発の運用フローを制すると言っても過言ではありません。Provisioning Profile が理解できるとiOSアプリ開発を見通す解像度がグッと上がります。</p>
<p>本稿では、その Provisioning Profile を読み解くのに便利なツール、security コマンドと plutil コマンドを紹介します。いずれも macOS のターミナルから使うコマンドラインツールです。</p>
<p>開発者でない方は「よく分からない」「自分には関係ない」と思われるも知れませんが、業務用iOSアプリに関係する立場なら必ず役立つ知識ですので、流し読み程度でokですので雰囲気だけでも掴んで下さい。順に見ていきましょう。</p>
<ul>
<li><a href="#1">Provisioning Profile の形式</a></li>
<li><a href="#2">security</a></li>
<li><a href="#3">plutil</a></li>
</ul>
<p id="1">&nbsp;</p>
<h3>Provisioning Profile の形式</h3>
<p>iOSアプリ毎に必須である(そして常に我々を悩ませる) Provisioning Profile は、拡張子が .mobileprovision というファイルです。</p>
<p>中身は、<a href="https://tex2e.github.io/rfc-translater/html/rfc5652.html" rel="noopener" target="_blank">CMS(Cryptographic Message Syntax)</a>という標準規格により署名/暗号化されており、そのテキストはXMLで記述された plist となっています。</p>
<p>plist は Property List の略称で、その名の通り設定値の一覧を記述することに特化した形式です。具体的な例をあげると、</p>
<pre style="margin-bottom:25px">
&lt;key&gt;ExpirationDate&lt;/key&gt;
&lt;date&gt;2024-11-30T07:22:27Z&lt;/date&gt;
&lt;key&gt;TeamName&lt;/key&gt;
&lt;string&gt;feedtailor Inc.&lt;/string&gt;
&lt;key&gt;Entitlements&lt;/key&gt;
&lt;dict&gt;
    &lt;key&gt;application-identifier&lt;/key&gt;
		&lt;string>123456ABCD.jp.feedtailor.sample.b2bios&lt;/string&gt;
&lt;/dict&gt;
...(略)...
</pre>
<p>こんな具合に設定値がXMLで並びます。上記の例だと、</p>
<ul>
<li>Provisioning Profile の期限は2024/11/30であること</li>
<li>チーム名は feedtailor Inc. であること</li>
<li>AppIDがプレフィックス含めて 123456ABCD.jp.feedtailor.sample.b2bios であること</li>
</ul>
<p>などが分かります。このようにアプリに関する様々な情報について、その名称(key)と値(value)の組み合せがXML記法でひたすら並んで plist を構成します。この plist を CMS というフォーマットで署名/暗号化して、拡張子を .mobileprovision にしたものが Provisioning Profile です。</p>
<p><img src="https://www.micss.biz/wp-content/uploads/2024/09/20240930_provisioningprofile_cms.png" alt="" width="500" class="alignnone" /></p>
<p>ということは…。まずは署名を検証し暗号化を解かなければならないことが分かります。次に復号された結果の plist を解釈しなければなりません。</p>
<p>今回紹介するのはそれぞれに有用なツールで、前者が security コマンド、後者は plutil コマンドです。いずれもmacOSには標準でインストールされていて、ターミナルで各コマンドを入力して使います。</p>
<p>デベロッパーの方はぜひ手元のターミナルを使い、以下解説を参考に Provisioning Profile の中身をのぞいてみて下さい。</p>
<p id="2">&nbsp;</p>
<h3>security</h3>
<p>まず .mobileprovision をデコードしてみましょう。security コマンドを使います。色んなことができますが、Provisioning Profile 解読の文脈では以下のパラメタ指定だけ知っていれば十分です。</p>
<pre style="margin-bottom:25px">
security cms -D -i [Provisioning Profile へのパス]
</pre>
<p>cms は文字通り署名/暗号化の形式であるCMS(Cryptographic Message Syntax)のことです。-D はデコードを意味し、-i に続く文字列で対象となる Provisioning Profile ファイル名(パス)を指定します。</p>
<p>その他のオプションに興味ある方は、</p>
<pre style="margin-bottom:25px">
security cms
</pre>
<p>とだけ入力してエンターして下さい。詳細が表示されます。</p>
<p>正しくコマンドが入力できていると、以下のように Provisioning Profile の中身が表示されます。これが plist 形式で記述されたアプリに関する情報郡となります。</p>
<p><img src="https://www.micss.biz/wp-content/uploads/2024/09/20240930_security_cms.jpg" alt="" width="600" class="alignnone" /><br /><span class="caption">(Base64エンコードされた特殊な文字列も含まれるのでかなり長い)</span></p>
<p>かなり長い出力になりますので</p>
<pre style="margin-bottom:25px">
security cms -D -i sampleapp_appstore.mobileprovision | less
</pre>
<p>のようにパイプを繋げて less コマンドに渡したり、</p>
<pre style="margin-bottom:25px">
security cms -D -i sampleapp_appstore.mobileprovision > sampleapp_appstore_plist.xml
</pre>
<p>のようにファイル出力してから、テキストエディタで開いても良いでしょう。syntax highlight 機能を備えたエディタで開くと随分と見易くなります。</p>
<p id="3">&nbsp;</p>
<h3>plutil</h3>
<p>前述の security コマンドで、Provisioning Profile の中身である plist を見ることができました。</p>
<p>抜き出せたのだからもうこれで十分…とも言えますが、もう一つ知っておくと便利なのが plutil コマンドです。plutil は plist utility の略で、plist の一部分の表示や変換、書き換えや削除ができたりします。このコマンドを使って plist をもっと自由自在に扱えるようになっておくとよいです。</p>
<h4>独自形式で全貌を見易く表示する</h4>
<p>XMLは人間にはちょっと読みにくく冗長です。plutil にはこれをかなりスッキリ読み易く表示するオプション <strong>-p</strong> があります。plist をXMLファイルとして出力している場合は以下のように使います。</p>
<pre style="margin-bottom:25px">
plutil -p [plistのファイルパス]
</pre>
<p>出力は以下のようになります。</p>
<p><img src="https://www.micss.biz/wp-content/uploads/2024/09/20240930_plutil.jpg" alt="" width="600" class="alignnone" /></p>
<p>生のXMLを眺めるよりはるかに見易いですね。また、plutil コマンドは標準入力を食わせることもできますので、security コマンドとパイプで繋いで使うほうが楽でしょう。</p>
<pre style="margin-bottom:25px">
security cms -D -i [Provisioning Profile へのパス] | plutil -p -
</pre>
<p>plutil の末尾の &#8211; は標準入力をパースするという意味です。</p>
<h4>特定のkeyの値を出力する</h4>
<p>Provisioning Profile の期限日時だけを知りたいとか、どのアプリ(BundleID)用の Provisioning Profile だったかを確認したい…ってなピンポイントで情報を見たい時に使えるテクニックです。<strong>&#8211;extract</strong> オプションを以下のように使います。</p>
<pre style="margin-bottom:25px">
plutil -extract "ExpirationDate" raw [plistのファイルパス] -o - 
</pre>
<p>plist をファイル出力したものに対して実行すると、こんな結果になります。</p>
<pre style="margin-bottom:25px">
plutil -extract "ExpirationDate" raw b2biossample-2.xml -o - 
2024-11-30T07:22:27Z
</pre>
<p>Provisioning Profile の期限を表す ExpirationDate の値だけを抜き出せました。オプションでは raw形式 (そのまま) で標準出力に出すという指定をしています。-o オプションは出力の指定で、-o の後の &#8211; は標準出力を意味しています。</p>
<p>特定の key を抜き出す場合も、実は security cms からパイプで繋いだほうが楽です。</p>
<pre style="margin-bottom:25px">
security cms -D -i [Provisioning Profile へのパス] | plutil -extract [抜き出したいkey] raw - -o -
</pre>
<p>こんな感じで指定した Provisioning Profile の特定の値を抽出することができます。また Entitlement のように plist がXMLの階層構造を持っている箇所を抜き出したい場合は . で繋いで表現します。</p>
<pre style="margin-bottom:25px">
security cms -D -i b2biossample-2.mobileprovision | plutil -extract "Entitlements.application-identifier" raw - -o -
123456ABCD.jp.feedtailor.sample.b2bios
</pre>
<p>これはアプリの BundleID を抜き出している様子ですね。結構使えそうだと思いませんか？</p>
<p>以前の<a href="/2023/10/16/6324/" rel="noopener">Provisioning Profile は開発環境Macのどこに格納されているのか</a>という投稿で、あるアプリ用のProvisioning Profile を洗い出すため、以下のように書けると紹介しました。</p>
<pre style="margin-bottom:25px">
% find ~/Library/MobileDevice/Provisioning\ Profiles \
-type f
-name "*.mobileprovision" -newermt "2023-10-01" \
-exec sh -c ' \
  security cms -D -i "$1" | \
  plutil -extract "Entitlements.application-identifier" raw - -o - | \
  grep -q "XXXXX" && \
  echo "${1##*/}" \
' _ {} \;
</pre>
<p>まさにこの5,6行目が、今回紹介した内容そのままとなっています。</p>
<p>特定フォルダ配下にある .mobileprovision ファイル全てについて BundleID を抽出して、アプリを表す文字列(例ではXXXXXと表現)が含まれる場合のみ、Provisioning Profile のファイル名を出力する…というワンライナーになっています。</p>
<p>このように、特定要素を抜き出す方法を知っていると Provisioning Profile を調べる効率が上がって便利です。ぜひ活用してみて下さい。</p>
<p>&nbsp;</p>
<p>以上、Provisioning Profile を読み解くにあたって役立つコマンドを2つ紹介しました。1つ目に紹介した security は特に使いこなせるようになって頂きたいコマンドです。</p>
]]></content:encoded>
			</item>
		<item>
		<title>Provisioning Profile は開発環境Macのどこに格納されているのか</title>
		<link>https://www.micss.biz/2023/10/16/6324/</link>
		<pubDate>Sun, 15 Oct 2023 22:00:11 +0000</pubDate>
		<dc:creator><![CDATA[OishiYuichi]]></dc:creator>
				<category><![CDATA[Provisioning Profile]]></category>

		<guid isPermaLink="false">https://www.micss.biz/?p=6324</guid>
		<description><![CDATA[(最終更新日 : 2025/9/19) 以前の投稿で Provisioning Profile の確認方法について書きました。 (Provisioning Profile のファイルを Quick Look で見ている様 [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>(最終更新日 : 2025/9/19)</p>
<p>以前の投稿で <a href="https://www.micss.biz/2023/08/21/6218/" rel="noopener" target="_blank">Provisioning Profile の確認方法</a>について書きました。</p>
<p><img src="https://www.micss.biz/wp-content/uploads/2023/10/20231016_quicklook_provisioningprofile.jpg" alt="" width="600" class="alignnone" /><br /><span class="caption">(Provisioning Profile のファイルを Quick Look で見ている様子)</span></p>
<p>Provisioning Profile を理解するとiOSアプリ開発の全容を理解し易くなります。そして署名関係で問題がある時の原因特定もやり易くなります。とはいえ、Xcode の進化と共に署名関係の自動化がかなり進んだため、今では Provisioning Profile 単体をファイルとして認知することも随分少なくなりました。</p>
<p>本稿では、いざ何か調べようとした時に困らないよう、開発環境での Provisioning Profile の在りかと、コマンドラインを使った調査テクニックを紹介します。以下目次です。</p>
<ul>
<li><a href="#1">Xcodeの機能強化で隠蔽化が進む</a></li>
<li><a href="#2">Provisioning Proffile の在り処</a></li>
<li><a href="#3">Provisioning Profile の調査テクニック</a></li>
</ul>
<p>場所だけ知りたいのだという方は、<a href="#2">Provisioning Proffile の在り処</a> までジャンプして下さい。</p>
<p id="1">&nbsp;</p>
<h3>Xcodeの機能強化で隠蔽化が進む</h3>
<p>iOSが日本に上陸した2008年当初、Xcode も Apple Developer サイトも、今ほどには洗練されておらず、当時の開発関係者なら誰しもが一度は秘密鍵や証明書、Provisioning Profile に悩まされたことがあると思います。(今も悩まされているぞ<img src="https://s.w.org/images/core/emoji/2.2.1/72x72/1f624.png" alt="😤" class="wp-smiley" style="height: 1em; max-height: 1em;" />という声も聞こえてきそうですが…)</p>
<p>ですが Apple は、Xcode8以降で署名関係の大きな機能強化を行ってきました。最も大きな強化ポイントが、Xcode と Apple Developer サイトの連携、そして Provisioning Profile のダウンロード機能の提供です。</p>
<p><img src="https://www.micss.biz/wp-content/uploads/2023/10/20231016_xcode_settings_accounts.jpg" alt="" width="600" class="alignnone" /><br /><span class="caption">(自分が所属するTeam の Provisioning Profile をダウンロードしている様子)</span></p>
<p>さらにプロジェクト設定で新たに Automatically managed signing の設定が追加され(そしてそれが推奨され)、Provisioning Profile や証明書の指定に悩まされることはほぼほぼなくなりました。</p>
<p><img src="https://www.micss.biz/wp-content/uploads/2023/10/20231016_xcode_target_setting.jpg" alt="" width="600" class="alignnone" /></p>
<p>2021年には Xcode Organizer から ipa ファイル生成時の自動署名が可能となり、デバッグ用途のみならず配布用の再署名にも悩まなくてよくなっています。</p>
<p><img src="https://www.micss.biz/wp-content/uploads/2023/10/20231016_cloudsigning.jpg" alt="" width="600" class="alignnone" /><br /><span class="caption">(<a href="https://developer.apple.com/videos/play/wwdc2021/10204/" rel="noopener" target="_blank">WWDC2021の動画</a>より。署名をクラウドで行えるようになったが、使われていない案件がまだ多い印象)</span></p>
<p>またXcode9(2017年)からは Personal Team という概念が生まれ、ADP(Apple Developer Program)を未締結な個人開発者でも実機テストが可能になりました。実機転送にあたり Development 用の Provisioning Profile が必要ですが、これも開発者が意識する必要はなく Xcode が自動生成することになっています。</p>
<p><img src="https://www.micss.biz/wp-content/uploads/2023/10/20231016_capable_features_on_personalteam.jpg" alt="" width="600" class="alignnone" /><br /><span class="caption">(ADP/ADEPの契約がなくても一定の制限付きながら実機での開発が可能になった)</span></p>
<p>以上のように Xcode は年々進化しており、署名がスムーズに進んでいる場合においては Provisioning Profile そのものをファイルとして目にすることは減ってきています。</p>
<p>Xcodeの進化の歴史を詳しく知りたい方は以下リンクが参考になるでしょう。</p>
<ul>
<li><a href="https://developer.apple.com/library/archive/releasenotes/DeveloperTools/RN-Xcode/Chapters/Introduction.html" rel="noopener" target="_blank">[公式] Xcode Release Notes (Xcode9以前)</a></li>
<li><a href="https://developer.apple.com/documentation/xcode-release-notes" rel="noopener" target="_blank">[公式] Xcode Release Notes (Xcode10以降)</a></li>
</ul>
<p id="2">&nbsp;</p>
<h3>Provisioning Proffile の在り処</h3>
<p>前置きが長くなりましたが、ここでようやく本稿の結論です。何か問題がある場合は Provisioning Profile を直接調べることが有効ですが、その Provisioning Profile は開発環境 Mac 内の</p>
<pre style="margin-bottom:25px">
<del>~/Library/MobileDevice/Provisioning Profiles/</del>
~/Library/Developer/Xcode/UserData/Provisioning Profiles/
</pre>
<p>に全て格納されています。(2025年以降 Provisioning Profile の箇所が変更になっています。後の記述も読み替えてください)</p>
<p><img src="https://www.micss.biz/wp-content/uploads/2023/10/20231016_provisioningprofiles_in_finder.jpg" alt="" width="600" class="alignnone" /><br /><span class="caption">(当該のフォルダをFinderでひらいた様子)</span></p>
<p>Provisioning Profile には自身を一意に識別できるようUUIDが割り当てられています。そのUUIDをファイル名とした命名規則で一式保存されているというわけですね。</p>
<p>Xcodeの設定画面から [Download Manual Profiles] をクリックした時や、Personal Team でビルドを行った瞬間等に、このフォルダ配下に然るべき Provisioning Profile が格納されます。</p>
<p>長年、色んなアプリ開発をしてきたMacOS端末であれば、以下のコマンドで相当数の Provisioning Profile の存在を確認できる筈です。是非見てみて下さい。</p>
<pre style="margin-bottom:25px">
% find ~/Library/MobileDevice/Provisioning\ Profiles -type f -name "*.mobileprovision"
/Users/user/Library/MobileDevice/Provisioning Profiles/d687b238-c65f-4a32-8647-080ca488946c.mobileprovision
/Users/user/Library/MobileDevice/Provisioning Profiles/b3224ef2-1476-40a9-a141-4fae1c8da443.mobileprovision
...(略)...
</pre>
<p>1行目の find がコマンド。2行目以降は出力です。署名関係で何か問題があって、Provisioning Profile を確認したいと思ったらこのフォルダを眺めてみましょう。ただ、UUID で探すというのもなかなかヘビーです。UUIDではなく、アプリや署名の種類等に応じて Provisioning Profile を特定する必要がありますよね。</p>
<p id="3">&nbsp;</p>
<h3>Provisioning Profile の調査テクニック</h3>
<p>署名関係の問題が発生したら Provisioning Profile の中身を見るのが一番&#8230;と言ってもまずは特定が必要になります。どのように特定すれば良いでしょうか。</p>
<p>そんな時は、簡単なスクリプトを書くかターミナルでコマンドラインを駆使すると良いでしょう。問題のあるアプリの BundleID が XXXXX だとして、該当する Provisioning Profile を洗い出す場合、以下のようなワンライナーとなります。</p>
<pre style="margin-bottom:25px">
% find ~/Library/MobileDevice/Provisioning\ Profiles \
-type f
-name "*.mobileprovision" -newermt "2023-10-01" \
-exec sh -c ' \
  security cms -D -i "$1" | \
  plutil -extract "Entitlements.application-identifier" raw - -o - | \
  grep -q "XXXXX" && \
  echo "${1##*/}" \
' _ {} \;
63133a1e-2971-4512-94f5-02cd4526487e.mobileprovision
680d33a6-adbe-4b46-a428-4b160983b9a3.mobileprovision
...(略)...
</pre>
<p>BudnleID が XXXXX のアプリの Provisioning Profile を調べている様子です。下2行と以下略の部分が出力内容ですね。Provisioning Profile のあるフォルダ配下を、newermtオプションを使って更新日付で絞り込み(2023/10/1より新しい)、対象ファイルの中身を抽出して(security cms)、BundleID文字列を抜き出し(plutil)て絞り込んでいます。</p>
<p>Team名称(キー名:TeamName) や TeamID(キー名:TeamIdentifier)、Xcode による自動生成(キー名:IsXcodeManaged) 等をキーにして絞り込むこともできるでしょう。</p>
<p>もし Provisioning Profile が多すぎて混乱する場合は、一度当該フォルダ配下を別ディスクに退避してから調査を進めるのも有用な手段です。</p>
<pre>
% mkdir -p ~/provisions && mv ~/Library/MobileDevice/Provisioning\ Profiles/*.mobileprovision ~/provisions
</pre>
<p><span class="caption">(ADP/ADEPにDeveloper以上の役割と適切な権限が付与されていれば、通常は削除しても再取得可能で困らない)</span></p>
<p>特定ができれば、security cms コマンドで Provisioning Profile の中身のみを標準出力して閲覧します。less コマンドにパイプして中身を眺めたり、</p>
<pre style="margin-bottom:25px">
% security cms -D -i 63133a1e-2971-4512-94f5-02cd4526487e.mobileprovision | less
</pre>
<p>テキストファイルにリダイレクトして、</p>
<pre style="margin-bottom:25px">
% security cms -D -i 63133a1e-2971-4512-94f5-02cd4526487e.mobileprovision > ~/provisions/63133a1e-2971-4512-94f5-02cd4526487e.plist
</pre>
<p>使い慣れたエディタで検索しながら見るのもお勧めです。</p>
<p>&nbsp;</p>
<p>以上、Provisioning Profile の在り処と調査テクニック、Xcodeによる自動生成について紹介しました。いざ Provisioning Profile を確認しなければならなくなった時の参考として頂ければと思います。</p>
]]></content:encoded>
			</item>
		<item>
		<title>プロビジョニングプロファイル(Provisioning Profile)の中身を確認する方法 全4種</title>
		<link>https://www.micss.biz/2023/08/21/6218/</link>
		<pubDate>Sun, 20 Aug 2023 22:00:36 +0000</pubDate>
		<dc:creator><![CDATA[OishiYuichi]]></dc:creator>
				<category><![CDATA[Provisioning Profile]]></category>

		<guid isPermaLink="false">https://www.micss.biz/?p=6218</guid>
		<description><![CDATA[iOSアプリ開発に欠かせないものの1つが Provisioning Profile です。 アプリごと、そしてまた配布方式ごとに作られるファイルで、アプリを識別するBundleIDや、使用するiOSの機能、起動できる端末 [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>iOSアプリ開発に欠かせないものの1つが Provisioning Profile です。</p>
<p>アプリごと、そしてまた配布方式ごとに作られるファイルで、アプリを識別するBundleIDや、使用するiOSの機能、起動できる端末に関する情報、紐づいている証明書など、様々なデータが記録されています。</p>
<p><img src="https://www.micss.biz/wp-content/uploads/2023/08/20230821_provisioningprofile.jpg" alt="" width="500" class="alignnone" /><br /><span class="caption">(<a href="/consultation/">研修</a>資料から)</span></p>
<p>Provisioning Profile の中身を知ることは、iOSがアプリをどのように扱っているかを正しく理解することに繋がります。また、iOSアプリ開発の難しさの象徴とされる、証明書・秘密鍵・CSR・キーチェーン等々の関係性を理解する助けにもなります。</p>
<p>業務用iOSアプリ開発体制確立の成否は、Provisioning Profile 理解の有無にかかっていると言っても過言ではありません。Provisioning Profile の中身を見る方法を知り、Provisioning Profile の中身に目を向けましょう。ということで、本稿では Provisioning Profile の中身を見る方法について4つ紹介します。</p>
<ul>
<li><a href="#1">QuickLook (Mac)</a></li>
<li><a href="#2">テキストエディタ (Mac/Windows)</a></li>
<li><a href="#3">security コマンド (Mac)</a></li>
<li><a href="#4">openssl コマンド (Mac/Windows)</a></li>
</ul>
<p>以下、順に見ていきましょう。</p>
<p id="1">&nbsp;</a></p>
<h3>QuickLook (Mac)</h3>
<p>macOSには、ファイルの中身をプレビューできる <a href="https://support.apple.com/ja-jp/guide/mac-help/mh14119/mac" target="_blank">QuickLook</a> という機能があります。Finder上でファイルを選択してスペースバーを押すだけで、画像やPDFやOfficeファイルを手軽にプレビューできるのでとても便利です。</p>
<p><img src="https://www.micss.biz/wp-content/uploads/2023/08/20230821_quicklook_pdf.jpg" alt="" width="600" class="alignnone" /><br /><span class="caption">(ADEPの規約PDFをQuickLookで見ているところ)</span></p>
<p>標準では一般的なファイルでしか使えませんが、Xcodeをインストールしている環境であれば特殊な  Provisioning Profile ファイルも確認可能となります。以下がその様子。</p>
<p><img src="https://www.micss.biz/wp-content/uploads/2023/08/20230821_quicklook.jpg" alt="" width="600" class="alignnone" /><br /><span class="caption">(上図はAppStore用の Provisioning Profile の例。紐づく証明書の情報も確認できる)</span></p>
<p>こんなふうに Provisioning Profile の中身を確認することができます。Xcodeをインストールしていなくても、<a href="https://github.com/ealeksandrov/ProvisionQL" rel="noopener" target="_blank">ProvisionQL</a>というオープンソースの QuickLook プラグインをインストールすれば、同様に閲覧できるようになります。情報量は余り変わりません。</p>
<p>QuickLook はGUIを使って Provisioning Profile を手軽に確認したい人には向いている方法です。</p>
<p id="2">&nbsp;</a></p>
<h3>テキストエディタ (Mac/Windows)</h3>
<p>Provisioning Profile は、普通には閲覧できないバイトコードの中にXML(plist)形式が埋め込まれている特殊な構造をしています。フォーマットは CMS(Cryptographic Message Syntax) で、メール暗号化方式の S/MIME をはじめ様々な用途で使われている形式です。</p>
<p>ですが、Provisioning Profile ファイルを無理矢理テキストエディタで開くことで実体部分であるXMLを表示させることができます。</p>
<p><img src="https://www.micss.biz/wp-content/uploads/2023/08/20230821_vscode.jpg" alt="" width="600" class="alignnone" /><br /><span class="caption">(Visual Studio Code で無理やり開いた例。XMLよりも前にある文字化けした部分がバイトコード)</span></p>
<p>開くソフトはテキストエディタであれば何でもよく、Windows標準のメモ帳や、macOS標準のテキストエディットでも構いません。開ける以上は普通にテキスト検索することもできます。</p>
<p><img src="https://www.micss.biz/wp-content/uploads/2023/08/20230821_notepad.jpg" alt="" width="600" class="alignnone" /><br /><span class="caption">(Windowsのメモ帳で見る場合は、UTF-8形式を明示的に指定して開く必要があることに注意)</span></p>
<p>XML部分はキー名とその値の組み合わせを並べただけのシンプルな構成になっていますので、どのような値が入っているのかを容易に確認することができます。</p>
<p>例えば、Provisioning Profile を作成した日は CreationDate というキーで以下のように記述されています。</p>
<pre style="margin-bottom:25px">
&lt;key&gt;CreationDate&lt;/key&gt;
&lt;date&gt;2023-08-17T09:01:24Z&lt;/date&gt;
</pre>
<p>また、Provisioning Profile の有効期限日は ExpirationDate というキーで記述されています。</p>
<pre style="margin-bottom:25px">
&lt;key&gt;ExpirationDate&lt;/key&gt;
&lt;date&gt;2024-06-12T03:16:26Z&lt;/date&gt;
</pre>
<p>このように Provisioning Profile は簡単に中身を確認できます。テキストエディタを使って確認するこの方法は、ターミナル操作が苦手だけど Provisioning Profile の中身を検索したい&#8230;といった方に向いています。</p>
<p id="3">&nbsp;</a></p>
<h3>security コマンド (Mac)</h3>
<p>Macでのターミナル操作に慣れている場合、標準でインストールされている security コマンドを使うのがお勧めです。以下のようにして使います。</p>
<pre style="margin-bottom:25px">
security cms -D -i [Provisioning Profile ファイルのパス]
</pre>
<p>cms とは Provisioning Profile のデータ構造である Cryptographic Message Syntax を意味しています。-D はデコード、-i はファイルのパス指定のオプションです。これらの指定で Provisioning Profile の実体であるXMLだけを標準出力に出すことができます。</p>
<p><img src="https://www.micss.biz/wp-content/uploads/2023/08/20230821_terminal_security.jpg" alt="" width="600" class="alignnone" /></p>
<p>もちろん、出力結果をパイプで繋いで加工する事もできます。例えば、</p>
<pre style="margin-bottom:25px">
security cms -D -i [Provisioning Profile ファイルのパス] | grep "ExpirationDate" -A 1
</pre>
<p>とすれば期限情報の部分のみを抜き出すことができます。ただ Provisioning Profile のXMLはplist形式ですので、plutil コマンドを使って特定キーの要素を抜き出すほうが良いでしょう。plutil の使い方は本稿の主旨にそれますのでまた機会をみて投稿したいと思います。</p>
<p>Macのターミナル上で他のコマンドも組み合わせて色々解析ができますので、security コマンドを使った方法は Provisioning Profile をより深く理解したい方にお勧めです。</p>
<p id="4">&nbsp;</a></p>
<h3>openssl コマンド (Mac/Windows)</h3>
<p>残念ながらWindows環境にはMacの security コマンドのようなものはありません。Windows上のコマンドプロンプトで Provisioning Profile の中身を確認したい場合は、<a href="https://slproweb.com/products/Win32OpenSSL.html" rel="noopener" target="_blank">Windows用の openssl</a> をインストールした環境で以下のようなコマンドを使います。</p>
<pre style="margin-bottom:25px">
openssl smime -inform der -verify -noverify -in [Provisioning Profile ファイルのパス]
</pre>
<p>-verify オプションはCMSフォーマットのファイル検証とデコードを意味し、-noverify はCMSに内包する証明書を検証しないことを意味しています。コマンドプロンプトで実際に入力してみている様子が以下です。</p>
<p><img src="https://www.micss.biz/wp-content/uploads/2023/08/20230821_cmdprompt.jpg" alt="" width="600" class="alignnone" /></p>
<p>openssl を使った方法は、Windows 上で Provisioning Profile の中身の情報を基点としたバッチ処理を実装するような場合に向いています。が、余りそんなことはしないでしょう。</p>
<p>なお Mac には openssl が標準でインストールされていますので上記コマンドも使えますが、前項で解説した security コマンドを使うのが一般的です。タイプ数が無駄に増えることも考えると、Provisioning Profile の中身を確認する為にわざわざ openssl コマンドを使う必要はありません。</p>
<p>&nbsp;</p>
<p>以上、Provisioning Profile の中身を確認する方法について紹介しました。Provisioning Profile の中身は本当に興味深いです。業務用iOSアプリの開発や管理の本質的理解に繋がりますので、別投稿で追って詳しく解説していきたいと思います。</p>
]]></content:encoded>
			</item>
	</channel>
</rss>
