Skip to content

Instantly share code, notes, and snippets.

@TakashiSasaki
Created March 3, 2025 09:13
Show Gist options
  • Save TakashiSasaki/46522f57eccfbd42d19992f47c2ea17a to your computer and use it in GitHub Desktop.
Save TakashiSasaki/46522f57eccfbd42d19992f47c2ea17a to your computer and use it in GitHub Desktop.

Apple のプラットフォーム(macOS / iOS)では、コンポーネントの識別に Windows の COM のような GUID(Globally Unique Identifier)は一般的に使用されません。
代わりに、Bundle Identifier, Uniform Type Identifier (UTI), CFUUID などの識別子が使われます。


1. Apple のコンポーネント識別方法

Apple のエコシステムでは、アプリケーション、フレームワーク、サービス、プロセス、ファイル形式などを識別するために異なる方式が採用されています

識別方法 用途
Bundle Identifier アプリやフレームワークの識別 com.apple.Safari
Uniform Type Identifier (UTI) ファイルフォーマットやデータ型の識別 public.jpeg
CFUUID(Core Foundation UUID) ユニークなオブジェクト識別 550e8400-e29b-41d4-a716-446655440000
Process Identifier (PID) 実行中のプロセスの識別 12345
Mach Port Name / XPC Name プロセス間通信(IPC) com.apple.security

2. Bundle Identifier(バンドル識別子)

概要

  • macOS/iOS では、アプリケーションやフレームワークはバンドル(.app, .framework など)として管理される
  • 各バンドルには一意の Bundle Identifier(バンドル識別子) が割り当てられる。
  • Windows の CLSID(COM クラス識別子)に近い役割を果たす

<key>CFBundleIdentifier</key>
<string>com.apple.Safari</string>
  • com.apple.SafariSafari の一意な識別子
  • com.mycompany.myapp のように、逆ドメイン名形式を使用。

用途

macOS / iOS のアプリやフレームワークの識別
アプリ間通信(AppleScript, URL Scheme, XPC など)で利用
macOS の launchd や iOS の App Extensions で使用

📌 結論:
Apple では COM の CLSID のように、アプリやフレームワークは Bundle Identifier で識別される。


3. Uniform Type Identifier (UTI)

概要

  • ファイルフォーマット、データ型、コンテンツの種類を識別するための仕組み
  • Windows の MIME Type + COM のファイル拡張子管理に相当
  • 例: public.jpeg(JPEG 画像)、com.adobe.pdf(PDF)

<key>UTExportedTypeDeclarations</key>
<array>
    <dict>
        <key>UTTypeIdentifier</key>
        <string>com.mycompany.mycustomtype</string>
        <key>UTTypeConformsTo</key>
        <array>
            <string>public.data</string>
        </array>
    </dict>
</array>

用途

ファイル拡張子(.jpg, .png, .docx など)の識別
ドキュメントハンドリング(macOS の Finder, iOS の Open In...)
アプリ間でのデータ共有(Copy & Paste, Drag & Drop)

📌 結論:
Windows の COM ではファイル拡張子をレジストリで管理するが、Apple では UTI(Uniform Type Identifier)を使ってファイルタイプを管理する。


4. CFUUID(Core Foundation UUID)

概要

  • Apple の Core Foundation フレームワークには CFUUID(UUID を扱う API)が用意されている
  • Windows の GUID に最も近い
  • ただし、主に一時的な識別子として使われるため、アプリ間での統一的なコンポーネント識別には使われない

例(CFUUID の生成)

import Foundation

let uuid = UUID()
print(uuid.uuidString) // "550e8400-e29b-41d4-a716-446655440000"

用途

ユニークなオブジェクト識別(デバイス ID、セッション ID)
ネットワーク通信(Bonjour サービスなど)
一部の macOS/iOS API での一意な識別子の生成

📌 結論:
Apple にも UUID(CFUUID)があるが、Windows の GUID のように COM コンポーネントの識別には使われず、主に一時的な識別に使用される。


5. Mach Port Name / XPC Name

概要

  • プロセス間通信(IPC)のための識別子
  • macOS では Mach カーネルが提供する Mach Port を利用してプロセスを識別
  • XPC(Cross-Process Communication)では、サービスごとに一意な名前(XPC Name)がある

let connection = NSXPCConnection(serviceName: "com.apple.security")
  • com.apple.securityXPC サービスの識別子

用途

プロセス間通信(macOS/iOS のシステムサービス)
サンドボックス環境でのセキュアな IPC

📌 結論:
Windows の DCOM では CLSID や APPID を使うが、macOS では XPC Name や Mach Port Name でプロセスを識別する。


6. まとめ

識別方法 用途 Windows の対応する概念
Bundle Identifier アプリやフレームワークの識別 CLSID
Uniform Type Identifier (UTI) ファイルフォーマットの識別 MIME Type / COM のファイル拡張子
CFUUID (UUID) 一時的な識別子(セッション ID など) GUID
Mach Port Name / XPC Name IPC(プロセス間通信) DCOM の APPID

7. Apple の識別子の設計思想と COM との違い

(a) COM の GUID は OS レベルの統一管理

  • Windows の COM は、レジストリで GUID を一元管理し、システム全体でコンポーネントを識別
  • アプリケーションごとに異なる COM コンポーネントを使えるが、統一的に管理される

(b) Apple は用途ごとに異なる識別子を採用

  • Bundle Identifier はアプリやフレームワークの識別
  • UTI はデータ型の識別
  • CFUUID は一時的な識別
  • XPC Name や Mach Port Name は IPC の識別

📌 結論:
Windows は「COM の GUID で全てを一元管理」、Apple は「用途ごとに異なる識別方法を採用」している。
Apple では GUID のような統一的なコンポーネント管理は行わず、各システムごとに適切な識別方式を提供する。
Apple の識別方式は、COM よりもシンプルで直感的だが、統一的な管理が難しいという側面もある。

💡 最終結論:
Apple は COM のような統一的な GUID ベースのコンポーネント識別を採用せず、用途ごとに異なる識別方式を提供することで、より分かりやすく直感的なシステム設計を採用している。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment