DocBit Notes チュートリアル

Mac の「パッケージの内容を表示」で Binance クライアントの構造を見る

Mac の .app ファイルはダブルクリックするだけでアプリが起動しますが、macOS は実際にはこれをフォルダとして扱っています。Finder の「パッケージの内容を表示」機能を使うと、アプリの内部に何が入っているかを見ることができます。本記事では、この機能を使って Binance Mac クライアントの構造を覗いてみます。クライアントのダウンロードはまず Binance 公式サイト または Binance 公式アプリ から行ってください;iPhone のインストールは iOS インストールチュートリアル をご覧ください。

.app ファイルの本質

macOS における .app 拡張子の「ファイル」は単一のバイナリではなく、特別なフォルダ(バンドルと呼ばれます)であり、Apple の仕様に従って複数のサブディレクトリとファイルが格納されています。Finder はこれを 1 つのアイコンとして表示し、ダブルクリック時にその中の実行可能ファイルを呼び出します。

この設計の利点:

  • すべてのアプリリソースが 1 つにまとめられており、配布が容易
  • ユーザーは 1 つのファイルをドラッグするだけでインストール完了
  • Windows のようにあちこちに DLL が散らばらない

「パッケージの内容を表示」の入り口

.app の内部を見る手順:

  1. Finder で Binance.app を見つける(通常は /Applications にあります)
  2. 右クリック(または Control + クリック)
  3. ポップアップメニューから「パッケージの内容を表示」を選択
  4. Finder が .app 内部のディレクトリに入ります

中には通常 Contents フォルダがあり、さらにその下に複数のサブディレクトリがあります。

標準的な .app ディレクトリ構造

Apple が規定するバンドル構造:

パス 内容
Contents/Info.plist アプリのメタ情報
Contents/MacOS/ メインの実行可能バイナリ
Contents/Resources/ 画像、フォント、ローカライズされた文字列
Contents/Frameworks/ サードパーティ製フレームワーク
Contents/PlugIns/ プラグイン(多くのアプリにはありません)
Contents/_CodeSignature/ 署名情報
Contents/embedded.provisionprofile プロビジョニングプロファイル

Binance クライアントには、基本的に Info.plist、MacOS、Resources、Frameworks、_CodeSignature の 5 つのコアディレクトリがあります。

Info.plist には何があるか

Info.plist は Apple 規定のメタ情報リストで、以下のような情報が記録されています:

  • CFBundleIdentifier:アプリの一意識別子。Binance の場合は通常 com.binance.desktop
  • CFBundleVersion:ビルドバージョン番号
  • CFBundleShortVersionString:ユーザー向けのバージョン番号
  • LSMinimumSystemVersion:要求される最低システムバージョン
  • NSCameraUsageDescription:カメラ権限の説明(KYC 用)
  • NSAppTransportSecurity:ネットワークセキュリティポリシー

一般ユーザーはちらっと見るだけで十分ですが、開発者は権限関連のフィールドを注視します。

Frameworks ディレクトリ

Frameworks には通常、Binance クライアントが依存するサードパーティコンポーネントが含まれています:

  • Electron フレームワーク(Electron ベースの場合)
  • Qt フレームワーク(Qt ベースの場合)
  • 各種システム補助ライブラリ

Binance Mac クライアントは長年の間に Electron とネイティブの間で切り替えが行われてきましたが、現在のバージョンは比較的軽量な Web 技術スタックに基づいています。具体的なフレームワークについてはここでは割愛します。

Resources ディレクトリの見るべきポイント

Resources には以下のものが含まれます:

  • 画像リソース(.icns アイコン、PNG 画像)
  • ローカライズされた文字列(言語ごとの .lproj サブディレクトリ)
  • フォント(アプリにフォントが同梱されている場合)
  • 設定ファイル(JSON、plist)

Binance クライアントがいくつの言語をサポートしているかを確認できます:Resources に入ると、zh-Hans.lproj、en.lproj、ja.lproj、ko.lproj のようなサブディレクトリがあり、それぞれが 1 つの言語に対応しています。

なぜ内部を見るのか

一般ユーザーがアプリの内部を見ることに実用的な意味はあまりありませんが、いくつかの特殊な場面で役立ちます:

  • アプリの真偽確認:Resources 内のアイコンと公式サイトのアイコンを比較する
  • 手動での言語変更:ごく稀に、特定のローカライズを強制的に使用できる場合があります
  • アイコンの抽出:.icns ファイルを自分のアプリにコピーする
  • 依存関係の確認:開発者がアプリがどのフレームワークを使用しているか検証する

パッケージ内ファイルを変更するリスク

理論上は「パッケージの内容を表示」した後に中のファイルを変更できますが:

  • ファイルを少しでも変更すると、アプリの署名が無効になります
  • macOS はアプリ起動時に署名の不一致を検出し、実行を拒否します
  • 署名チェックを回避できたとしても、アプリの動作は予測不能になります
  • 自動アップデートが失敗する可能性があります

したがって、「パッケージの内容を表示」は閲覧のみに使用し、変更しないでください

Windows / Linux との比較

OS ごとのアプリの保存方式:

OS 形式 ファイルの配置
macOS .app バンドル 1 つのフォルダにパッケージ化
Windows .exe + DLL Program Files やシステムディレクトリに散在
Linux バイナリ + 共有ライブラリ /usr/bin、/usr/lib など
iOS .app バンドル(不可視) ユーザーは直接アクセス不可

macOS のバンドル設計が最もクリーンです。

コマンドラインでの確認

ターミナルに慣れているユーザーは、cd.app/Contents パスに入り、直接 ls で内容を確認することもできます。これは Finder の「パッケージの内容を表示」と同じ結果ですが、コマンドラインからの視点になります。

セキュリティチェックの小技

パッケージの内容を表示した後、簡単なセキュリティチェックを行うことができます:

  • Info.plist の CFBundleIdentifier が com.binance.desktop(または類似の公式識別子)であること
  • _CodeSignature ディレクトリが存在し、空ではないこと
  • 不審な名前の実行可能バイナリ(update.exe や helper.so など)がないこと
  • Resources 内のアイコンが公式サイトと一致していること

これら 4 つがすべて揃っていれば、本物の公式版です。

FAQ

Q:アプリの内部を見るとウイルス警告が出ますか? A:出ません。これは macOS の組み込み機能であり、安全です。

Q:アプリをそのまま他の Mac にコピーして使えますか? A:可能です。.app は自己完結しています。

Q:アプリの容量がダウンロードした DMG より大きいのは正常ですか? A:正常です。DMG は圧縮形式であり、展開すると容量が大きくなります。

Q:アプリのアイコンを抽出するには? A:.icns ファイルを「プレビュー」アプリにドラッグして開き、PNG として書き出します。

関連記事