[macOS][iOS]アプリケーション識別子

<p>アプリケーションを識別するIDとは何か？それは、世界でユニークなIDなのか？開発者（Developer Program）でユニークなIDなのか？
ストアでユニークなIDなのか？著名なアプリのIDを自分のアプリにつけれるのか？アプリ内課金の不正対策で、レシートが他のアプリのものかどうかを何で確認すればいいのか？一般的なファイルフォーマット（例えばテキストやPNG）のファイルをダブルクリックすると、それを作成したアプリが起動するのは何故か？</p>

<p>ちょっと気になるが知らないと困ることがあるアプリケーション識別子ついて、懐かしい情報から最近の情報まで調査した。</p>

# ファイルタイプとクリエータ
<p>Macintosh Systemでは4文字の数値（'PTNG'や'APPL'など）で種類を表していた。ファイルの種類はファイルタイプ、アプリケーションの識別はクリエータと呼ばれ、重複を防ぐため、APDA（Apple Programmer's and Developer's Association）への登録制度を設けていた。</p>

<table border="1">
	<thead>
		<tr>
			<th></th><th>種類</th><th>説明</th>
		</tr>
	</thead>
	<tbody>
		<tr>
			<td rowspan="3">ファイルタイプ</td>
			<td>'PTNG'</td><td>MacPaint書類（PaiNTinG）</td>
		</tr>
		<tr>
			<td>'APPL'</td><td>アプリケーション</td>
		</tr>
		<tr>
			<td>'TEXT'</td><td>テキスト・ファイル</td>
		</tr>
		<tr>
			<td rowspan="2">クリエータ</td>
			<td>'8BIM'</td><td>Photoshop</td>
		</tr>
		<tr>
			<td>'WILD'</td><td>HyperCard</td>
		</tr>
	</tbody>
</table>

![JeditΩ.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/12540/3d33ed2a-4607-ef73-b20d-067f6d7226eb.png)

<p>上図の設定を選択するとクリエータが保存されるようになり、プレーンテキスト・ファイルのダブルクリックでJedit Ωが立ち上がる。</p>

# Uniform Type Identifier (UTI)
<p>データを識別する方法は以下のように複数個の種類が存在するが、UTIはシステム内で扱うデータを識別するための一本化された方法。</p>

<ul>
<li>Macintosh Systemのファイルタイプ (OSType)</li>
<li>MS-DOSからの拡張子</li>
<li>MIMEタイプ</li>
</uL>

# App ID
<p>形式は、seed_id.id。seed_idは10文字の「バンドルシードID（Bundle Seed ID）」で、Member CenterのアカウントIDに基づいて決定される。idはバンドルID。</p>

<table border="1">
	<thead>
		<tr>
			<th>タイプ</th><th>App ID</th><th>バンドルID</th>
		</tr>
	</thead>
	<tbody>
		<tr>
			<td>明示的</td><td>123456789A.com.example.Demo</td><td>com.example.Demo</td>
		</tr>
		<tr>
			<td rowspan="2">ワイルドカード</td><td>123456789A.*</td><td>com.example.Demo</td>
		</tr>
		<tr>
			<td>123456789A.com.example.*</td><td>com.example.Demo</td>
		</tr>
	</tbody>
</table>

# Apple DeveloperサイトのApp ID
<p>「証明書、ID、プロファイル」のIdentifiersで登録できるバンドルIDは、ストアでの重複を許さない仕様となっている。</p>

Universal links の associated domains
<p>以下は設定ファイルの例。</p>

<pre><code>{
  "applinks": {
      "details": [
           {
             "appIDs": [ "ABCDE12345.com.example.app", "ABCDE12345.com.example.app2" ],
             "components": [
               ...
             ]
           }
       ]
   },
   "webcredentials": {
      "apps": [ "ABCDE12345.com.example.app" ]
   },
    "appclips": {
        "apps": ["ABCED12345.com.example.MyApp.Clip"]
    }
}
</code></pre>

<p>appIDsの書式は以下のとおり。</p>

<pre><code><Application Identifier Prefix>.<Bundle Identifier></code></pre>

<p>App IDだ。</p>

# StoreKitのレシート
<p>レシートにはApp IDでなくバンドルIDが。
でも、開発者サイトで登録するバンドルIDはユニークなので重複しない。</p>

![StoreKitレシート.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/12540/0a9fb834-7730-1823-14c6-12a44b07ea6b.png)

# 【関連情報】
<a href="https://www.oreilly.co.jp/books/9784873115610/">iOSプログラミング ビルド＆リリース</a>
<a href="https://www.google.com/url?sa=t&rct=j&q=&esrc=s&source=web&cd=&ved=2ahUKEwi_gdClnav9AhWSsFYBHfRvABIQFnoECBIQAQ&url=https://developer.apple.com/library/archive/documentation/mac/pdf/ResEditReference.pdf&usg=AOvVaw03Vg3HtdqdJ4n56F6cb8Aa">ResEdit Reference</a>
<a href="https://developer.apple.com/library/archive/documentation/FileManagement/Conceptual/understanding_utis/understand_utis_intro/understand_utis_intro.html">Uniform Type Identifiers Overview</a>
<a href="https://developer.apple.com/library/archive/documentation/General/Conceptual/DevPedia-CocoaCore/AppID.html#//apple_ref/doc/uid/TP40008195-CH64-SW1">Cocoa Core Competencies</a>
<a href="https://developer.apple.com/library/archive/documentation/ToolsLanguages/Conceptual/DevPortalGuide/CreatingandConfiguringAppIDs/CreatingandConfiguringAppIDs.html">iOS Team Administration Guide</a>
<a href="https://developer.apple.com/documentation/xcode/configuring-an-associated-domain/">Configuring an associated domain</a>
<a href="https://developer.apple.com/documentation/xcode/supporting-associated-domains">Supporting associated domains</a>
<a href="https://developer.apple.com/jp/help/account/manage-identifiers/register-an-app-id/">App IDを登録する</a>
<a href="https://cocoa-kanto.connpass.com/">Cocoa.swift</a>
<a href="https://www.facebook.com/groups/cocoa.kanto/">Cocoa勉強会 関東</a>
<a href="http://www.bitz.co.jp/weblog/">Cocoa練習帳</a>