OS X Finder プラグインの作成方法
-
18-09-2019 - |
質問
Mac OS X Finder プラグインを作成するためのガイドまたはサンプル コードを探していますか?いくつかの簡単なアクションを実行する方法を知りたいと考えています。
- アイコンに画像オーバーレイヤーを追加する
- コンテキスト メニュー項目の追加
- ファイルの変更を聞く
次の 2 つのリソースを見つけました。
- OS X 用のコンテキスト メニュー プラグインの作成:2002 年に発行された古い文書で、
COM
Mac OS X 8/9 を対象とした API。 - SCPプラグイン:Finder プラグインを含むオープンソースの SVN Mac アプリケーション。
見直してみたくなった SCPlugin
コードはありましたが、理解しやすいサンプルを見つけたいと思っていました。
解決
悲しいことに、実際に Finder プラグインをプログラミングするのは する それでも COM を使用する必要があります。SCPlugin プロジェクトの SCFinderPlugin サブプロジェクトを見ると、COM 用の vtable の設定、AddRef/ReleaseRef 関数の作成など、最初のリンクで概説されているのとまったく同じ手法に従っていることがわかります。昔ながらの Carbon メモリ管理、COM スタイルのメモリ管理、Cocoa/新しいスタイルの Carbon メモリ管理を同時に管理するプラグインを作成することは、信じられないほどの苦痛になる可能性があります。異なる命名規則と呼び出しセマンティクスを持つ 3 つ以上の根本的に異なる API で対話します。状況をヒステリックに貧しいと呼ぶのは、非常に控えめな表現だろう。
明るい面としては、Mac OS X 10.6 Snow Leopard の Finder が Cocoa で完全に書き直されており、それに伴い非常に優れたプラグイン インターフェイスが付属しています。幸運にも、実際に Snow Leopard のみをターゲットにできる状況に陥った場合は、おそらく ADC Premier 以上のメンバーシップを取得し、プレリリース ビルドをダウンロードして、それに対するコードを作成する必要があります。さらに、Cocoa を書き直さない限り、プラグインは 10.6 では動作しない可能性があるため、リリース前に Snow Leopard を検討することは意味があるかもしれません。
他のヒント
Finderのアイコンオーバーレイのサンプルプロジェクトは小さく、非常に基本的なしかし、実際に作業例を表し下記答えます。
のhttps://github.com/lesnie/Finder-Icon-Overlayする
私は、これはとても古いですけど、いくつかのトピックでは、まだ興味がある可能性があり(?)
ここでは、私はヒョウ(10.6)の下でそれを行っているものです。まず、適切なFinderのヘッダが必要とされています。それを得るために、クラスダンプツールを使用してください。その後、いくつかのメソッドをスウィズル、SIMBLプラグイン(それを行うにはどのようにドキュメントを参照してください)のように、あなたのコードを記述します。リストビュー、drawIconWithFrameのアイコンの上に何かを描画するたとえば:TIconAndTextCell方法の方法は、オーバーライドする必要があります。
。ここでは、メソッドスウィズリングのためのコードは次のとおりです。
+ (void) Plugin_load
{
Method old, new;
Class self_class = [self class];
Class finder_class = [objc_getClass("TIconAndTextCell") class];
class_addMethod(finder_class, @selector(FT_drawIconWithFrame:),
class_getMethodImplementation(self_class, @selector(FT_drawIconWithFrame:)),"v@:{CGRect={CGPoint=dd}{CGSize=dd}}");
old = class_getInstanceMethod(finder_class, @selector(drawIconWithFrame:));
new = class_getInstanceMethod(finder_class, @selector(FT_drawIconWithFrame:));
method_exchangeImplementations(old, new);
}
私のメソッドを持つメソッド "FT_drawIconWithFrame:":私は "drawIconWithFrame" をオーバーライドしています。以下は、このメソッドのサンプル実装です。
- (void) FT_drawIconWithFrame:(struct CGRect)arg1
{
[self FT_drawIconWithFrame:arg1];
if ([self respondsToSelector:@selector(node)]) {
if ([[[[NSClassFromString(@"FINode") nodeWithFENode:[(TNodeIconAndNameCell *)self node]] fullPath] lastPathComponent] hasPrefix:@"A"])
[myPrettyIconOverlayImage drawInRect:NSMakeRect(arg1.origin.x, arg1.origin.y, arg1.size.height, arg1.size.height) fromRect:NSZeroRect operation:NSCompositeSourceOver fraction:1.0];
}
}
基本的には、ファイル名とファイルのすべてのアイコンの上に「myPrettyIconOverlayImageは」文字「A」で始まる描画します。このロジックは、あなた次第です。
この行に注意してください:私が知っている、これは通常のアイコンと名前などを取得するために、「スーパー」を呼び出す方法です[self FT_drawIconWithFrame:arg1];
、ループのような、奇妙に見えますが、実際はそうではありません。ファイル名を指定して実行を、SIMBLプラグインにでラップSIMBLをインストールして...。
によりライオンの変化にいくつかの作業は、(適切なclassessおよび無効にする方法を見つけ、それに必要なすべての宣言で新しい「Finder.h」ファイルを作成する)最初から行う必要がありますが、この技術はまだ動作します。
ハッピーハッキング!
Yosemite (MacOS 10.10 以降) の場合は、Apple の FinderSync フレームワーク, これにより、Finder 拡張機能で次のことが可能になります。
- 特定のフォルダー階層への関心を表明する
- それらの階層内のアイテムのステータスを示す「バッジ」を提供する
- 選択したアイテム(またはウィンドウターゲット)がそれらの階層にあるときに、ファインダーコンテキストメニューで動的メニュー項目を提供します
- 動的アイテムを使用してメニューを表示するツールバーアイテムを提供します(選択が無関係であっても)
Finder には公式またはサポートされているプラグイン システムはありません。OS X 10.6 以降では、Finder プロセスにコードを挿入し、Finder プロセス内の目的の C メソッドをオーバーライドする必要があります。
私は独自のプロジェクトのためにこれを行いました。これに関するサンプルやチュートリアルがないのは、これが非常に難しく時間のかかる開発作業であるためです。このため、これを達成した個人や組織には、プロセスの詳細を厳密に守る動機がたくさんあります。
Services API を使用して目標を達成できる方法がある場合は、それを実行してください。Finder プラグインを作成するには 1 ~ 2 時間かかります 固体 数か月にわたる骨の折れる開発と、C および Objective-C の内部構造に関するかなり深い知識。
まだこれをやりたいと確信している場合は、 マッハスター. 。幸運を。
私の知る限りでは、Finderのための公式プラグインアーキテクチャはありません。あなたはそれがその場でできないだろうが、ファインダーにフックすることなく、外部アプリケーションを介してアイコンにイメージオーバーレイを追加することができるかもしれません。私は、フォルダアクションとAutomatorのは別にコンテキストメニュー項目を追加する方法があるとは思いません。また、<のhref =「http://developer.apple.com/documentation/Darwin/Conceptual/FSEvents_ProgGuide/Introduction/Introduction.html」のrel = "nofollowをnoreferrerを使用して変更するファイルシステムを監視するために外部アプリケーションを書くに見ることができます「>は、API をFSEventsます。
ここでFinderアイコンバッジとレニエによって記載された技術を用いてライオンとマウンテンライオンでのコンテキストメニューの完了ソリューションです。
Liferayのキリスト降誕rel="nofollow">アイコンやコンテキストメニューを設定します。また、WindowsおよびLinux用の同等のプロジェクトが含まれます。
プロジェクトはLGPLの下でオープンソースですので、任意のバグ修正や改善に貢献して自由に感じる!
ピックはスリムです。Finder プラグインが実際にサポートされているかどうかは、私にはよくわかりませんでした。ただし、さらにいくつかの手がかりがあります:
- サンプルCMプラグイン - Finder も同様なので、もちろんカーボンベースです。ほぼすべての Finder プラグインは、おそらく 10.6 では動作しなくなると思われることに注意してください。
- Automatorは、「Finderプラグイン」として物事を保存できます。それはあなたが議論していることのよりサポートされているバージョンですが、もちろん柔軟性が低くなります。
<のhref =「https://github.com/liferay/liferay-nativity」のrelを見て、ジャワから、クロスプラットフォームの方法では、Finder /ファイルブラウザのアイコンオーバーレイとコンテキストメニューを追加するには= "nofollowをnoreferrer"> Liferayの降誕のライブラリます。
私も、<のhref = "https://stackoverflow.com/questions/3923149/how-do-i-add-items-to-the-finder-context-menu-in-macにこのの言及を作ります-os-X-使用-javaの/ 35496519#35496519" >別のSOまた、Appleの 'Finderの同期' ドキュメントやAPIへのリンクが含まれている、を投稿します。