ファイルとFinder


Mac OS Xにおいて、Finderは、ほとんどのユーザがファイルとやり取りするための手段です。開発者にとって、これらのやり取りを理解し、彼らのソフトウェアが確実に、予想外のやりかたで振舞わないようにすることが最善です。

Mac OS Xは、いくつかの異なる種類のファイルシステムを、Finderにおいてネイティブに対応しています。最も一般的なフォーマットは、HFS+(Mac OS 拡張)、HFS(Mac OS 標準)、そしてUFSです。その他のファイルフォーマットには、DVDディスクのためのUniversal Disk Format(UDF)や、CD-ROMボリュームのために使用されるISO 9660 フォーマットが含まれます。これらのファイルシステムの各々は、微妙に異なる方法でファイルの記録領域を実装していますが、Finderは継ぎ目のないユーザ体験を提供するために、これらの差異を覆い隠します。

コピーと移動操作

送り元、送り先が同じボリュームフォーマットを用いている場合のコピー、移動の操作は、ファイル情報が送り先に現れることで、あなたが予想する通りの結果をもたらします。

ファイルが異なるボリュームフォーマットに対応したボリューム間で、コピーもしくは移動されたときの結果は、興味を引くものとなります。

ユーザがHFS+ボリュームからUFSボリュームへファイルをコピーしたとき、何が起こるのでしょうか?

HFS+ボリューム上のファイルは、ファイルタイプやクリエータコードといった、付加情報を含んでいます。また、UFSファイルでは対応されていない概念である、リソースフォークも含んでいます。

このような操作が発生したとき、Finderはファイルのデータフォークに配置されていない、あらゆる情報を分離し、それを送り先のボリューム上の不可視ファイルに書き込みます。このファイルの名前は、「ドット-アンダースコア」接頭辞が付くことを除いて、元のファイルと同一です。たとえば、もしあなたがMyMug.jpgという名前のHFS+ファイルを、UFSボリュームにコピーすると、MyMug.jpgに加えて、同じ場所に._MyMug.jpgという名前のファイルができます。

UFSボリュームからHFSまたはHFS+ボリュームへファイルをコピーしたとき、Finderは対応する「ドット-アンダースコア」ファイルを探します。

もし存在すれば、Finderは、リソースフォークとFinder属性を作り直すために、ドット-アンダースコア ファイルの情報を用いてHFS+(またはHFS)ファイルを作成します。

もし不可視ファイルが存在しなければ、これらの属性は作り直されません。

Finderは、これらの処理を、CarbonAPIを通じて実現している点に注意してください。【on which it is based ?】

注:あなたは、いかなる悪影響も伴わずに、BSDのcpやmvコマンドをアプリケーションパッケージ(もしくは、その他のバンドル)に使用することができます。けれども、もし、あなたがこれらのコマンドを、単一ファイルのCFMアプリケーションに使用すると、コピーされた(もしくは移動された)アプリケーションは、役に立たなくなります。CFMアプリケーションのために、アップルは/Developer/Toolsディレクトリに、CpMacコマンドラインユーティリティを搭載しています。
【CpMac=リソースフォークに対応したコピーコマンド】

エイリアスとシンボリックリンクの管理

HFS(Mac OS 標準)およびHFS+(Mac OS 拡張)ファイルシステムは、エイリアスとして知られている、ファイルシステムエンティティを搭載しています。エイリアスは、UFSファイルシステムのシンボリックリンクといくつかの類似点が見られますが、その違いは重大です。これらの違いについての記述は、「エイリアスとシンボリックリンク」(57ページ)を参照してください。

エイリアスとシンボリックリンクの両方が同時に存在する場合に、Finderがどのようにファイルシステム世界を管理しているのかは、単純です。

Finderは、シンボリックリンクを認識しますが、(適切なメニューコマンドが与えられたときに)エイリアスだけを作成します。ファイルシステムでシンボリックリンクに出会ったときであっても、Finderはそれをエイリアスとして表示します―つまり、この二つの間に、外見の違いはありません。

Mac OS Xにおいてシンボリックリンクを作るための唯一の手段は、ターミナルウインドウかシェルスクリプトからBSDコマンドの ls -s を使用することです。

ファイルとフォルダの表示

Finderがファイルやフォルダを表示するときには、表示される内容が、確実に、ユーザが目にすることを想定している通りのものであるかについて、細心の注意が払われています。ユーザは、与えられた書類の種類を扱う能力のある、いくつかのアプリケーションをシステム上に持っていることがあります。また、ユーザはファイル名を個別に操作したり、もしくは全体的な言語環境設定として操作したり、またはファイル名拡張子の非表示設定を操作することができます。これらすべての選択肢は、Finderによって自動的に扱われます。

アイコンを選択する

Finderは、ファイルやフォルダに対して適切なアイコンを決定するために、いくつかの情報の断片を用いています。ファイルのバンドルビット、タイプコード、クリエータコード、ファイル名拡張子のいずれも、アイコンを決定する指針となります。ユーザ設定もまた役割を果たします。以下の手順は、ファイルとディレクトリのためのアイコンを選択するために用いられる工程を説明しています…

  1. Finderは項目がファイルまたはディレクトリであるかを確認します。もし失敗したら、Launch Servicesに適切なアイコンを問い合わせて、アイコンを表示します。
  2. ディレクトリに対して、Finderはそれがバンドルであるかどうか確認します。

    バンドルビット、またはファイル拡張子は、ディレクトリがバンドルであることと、不透過な実体【opaque entity 中身を表示させないということ?】として表示する必要があることを示すことができます。バンドルのほとんどは不透過な実体として表示されますが、フレームワークを含んでいるものは、されません。

  3. バンドル化されたディレクトリが、ファイル名に .app の拡張子を持っていたら、Finderはその拡張子を隠します。
  4. バンドル化されたディレクトリに対し、FinderはLaunch Servicesデータベースにあるタイプコード、クリエータコード、ファイル名拡張子を探し、適切なカスタムアイコンを特定するためにその情報を使用します。
  5. ファイルやディレクトリのどちらにも利用できるカスタムアイコンがなければ、Finderは与えられた項目の種類に対して適切なデフォルトアイコンを表示します。

    デフォルトアイコンは、項目が書類であるか、バンドル化されていないディレクトリであるか、アプリケーション、プラグイン、汎用のバンドル、その他のどれであるかを元にして、変化させることができます。

表示名を得る

Finderがユーザにファイルを見せるやり方に影響を及ぼす、二つの付加的な機能として、ファイル名拡張子の非表示と、ファイル名の各国語化があります。

これらの機能は、ファイルシステムの実際のファイル名を変更せずに、表示されるファイル名を変化させる、アクア インタフェースへの外見上の付加機能です。Finderは各ファイルやフォルダのための、表示名【display name】を取得するために、Launch Servicesによって提供されるルーチンを使用します。表示名は、ユーザの指定した選択肢を評価して、ユーザインタフェースから表示するために適切な、読み取り専用の名前を返します。

もしあなたのアプリケーションがファイルやフォルダの名前を表示するのであれば、あなたも表示名を意識して、あなたがファイルやフォルダの名前を表示するときには、常にこれらを用いる必要があります。CocoaとLaunch Servicesは共に、表示名を取得するインタフェースを提供しています。詳細は、「表示名」(43ページ)を参照してください。

Launch ServicesとFinder

Finderは、アプリケーションの起動と、アプリケーションと書類の間の結びつきの管理を、Launch Servicesに依存しています。もしあなたが、未知の種類の書類を開くことや、書類の中のURLをたどること、ヘルパー アプリケーションの起動、埋め込まれた書類の構成要素を開くこと、等を伴う処理を行う必要があれば、あなたはLaunch Services APIを調査すべきでしょう。Launch Servicesによって扱われる作業のなかには、以下のものがあります…

  • 別のアプリケーションの起動
  • 別のアプリケーションで書類やURLを開く
  • 書類やURLを開くために、ふさわしいアプリケーションを見分ける
  • あるアプリケーションが開く能力のある、ファイルやURLの種類についての情報を登録する
  • アイコン、表示名、ファイルやURLの文字列の種類【kind string of a file or URL ?】を取得する
  • 「最近の項目」メニューの内容の保持と更新

あなたのアプリケーションでどうすれば使えるのかを含む、Launch Servicesについての詳細は、Launch Services Concepts and Tasksを参照してください。