2009-08-18 98 views
45

我正在尋找用於編寫Mac OS X Finder插件的指南或示例代碼?它想知道如何做一些簡單的動作:如何編寫OS X Finder插件

  1. 添加圖像覆蓋層,以圖標
  2. 添加上下文菜單項
  3. 聽文件的更改

我發現下面的兩個資源:

我很想回顧SCPlugin的代碼,但希望找到一個更容易消化的樣本。

+2

自從這篇文章已經有一段時間了,隨時可以使用10.6。你有沒有達到你想要的?你用Finder插件戰術去了嗎? – epologee 2011-03-22 11:53:58

+1

有關獅子的任何更新? – Tony 2011-12-26 05:42:44

+0

@LesNie下方鏈接到他的[Finder Icon Overlay](https://github.com/lesnie/Finder-Icon-Overlay)項目。鏈接以防其他人難以找到開源OS X Finder插件示例(就像我做的那樣)。 – pkamb 2015-01-12 23:35:37

回答

16

可悲的是,編寫搜索插件實際上仍然需要得到你的手髒與COM。如果您查看SCPlugin項目的SCFinderPlugin子項目,您會發現它遵循與第一個鏈接中概述的技術完全相同的技術,包括爲COM創建一個vtable,編寫AddRef/ReleaseRef函數等等。編寫一個插件,在那裏你同時管理老式的碳內存管理,COM風格的內存管理,和可可/新式碳內存管理,可以是一個令人難以置信的痛苦—,這完全忽略了這一事實,你會在三個或更多完全不同的API中進行交互,具有不同的命名約定和調用語義。把這種情況稱爲歇斯底里的窮人將是一個很大的輕描淡寫。

好的一面是,Mac OS X 10.6 Snow Leopard中的Finder已經在Cocoa中完全重寫了 - 而且它帶來了非常優越的插件接口。如果你足夠幸運能夠處於只能瞄準雪豹的情況,那麼你可能應該獲得ADC總理或更高級別的會員資格,下載預發佈版本,然後編寫代碼。此外,如果沒有Cocoa重寫,你的插件可能無法在10.6上運行,所以無論如何在Snow Leopard發佈之前查看Snow Leopard可能是很有意義的。

+0

感謝您的解釋。我會等待Snow Leopard的公開發布。 – notnoop 2009-08-18 16:17:17

+1

任何想法,我可以找到有關Finder插件接口(OS X Lion)的信息? – jsherk 2012-04-16 01:33:44

+0

這不幸沒有提到。我所知道的插件(例如Dropbox的)通過馬赫呼籲他們自己進入Finder並不完全是我認爲蘋果當時正在進行的方向。 – 2012-04-16 18:21:57

1

採摘苗條;我從來沒有真正清楚Finder插件是否真的被支持。更多的線索,雖然:

  • SampleCMPlugIn-碳當然,因爲這是Finder。請注意,幾乎所有的Finder插件可能會停止使用10.6。
  • Automator可以將東西保存爲「Finder插件」。它是你正在討論的更支持的版本,但當然不太靈活。
2

據我所知,Finder沒有官方的插件架構。您可能可以通過外部應用程序將圖像疊加層添加到圖標,而無需掛接到Finder,儘管它不會動態顯示。我不認爲有一種方法可以添加文件夾操作和Automator以外的上下文菜單項。您還可以考慮編寫外部應用程序來使用FSEvents API來監視文件系統更改。

14

Finder沒有官方或支持的插件系統。從OS X 10開始。6,您需要將代碼注入Finder進程並在Finder進程中覆蓋客觀的C方法。

我已經爲一個專有項目做了這個。我可以告訴你,沒有任何示例或教程的原因是因爲這是一項非常困難和耗時的開發任務。出於這個原因,對於已經完成這項工作的個人或組織來說,有很大的動力來密切關注他們的流程細節。

如果您有任何可以使用服務API來實現您的目標的方法,請執行此操作。編寫一個Finder插件將需要1-2個月的時間進行艱苦的開發,並深入瞭解C和Objective-C內部知識。

如果你仍然相信你想要做到這一點,抓住mach_star。祝你好運。

28

Finder Icon Overlay示例項目代表了一個小而非常基本但實際工作的示例,下面是答案。

https://github.com/lesnie/Finder-Icon-Overlay

我知道這是很老,但有些可能是主題(?)

下面是我這下豹(10.6)完成仍然有興趣。起初需要Finder的頭文件。使用類轉儲工具來獲取它。然後將您的代碼編寫爲SIMBL插件(請參閱文檔如何操作),調整一些方法。例如,要在ListView中的圖標上繪製圖標,必須重寫TIconAndTextCell方法的drawIconWithFrame:方法。

下面是方法混寫代碼:用我的方法方法:

+ (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:)),"[email protected]:{CGRect={CGPoint=dd}{CGSize=dd}}"); 

    old = class_getInstanceMethod(finder_class, @selector(drawIconWithFrame:)); 
    new = class_getInstanceMethod(finder_class, @selector(FT_drawIconWithFrame:)); 
    method_exchangeImplementations(old, new); 

} 

我重寫 「drawIconWithFrame」 「FT_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並...運行。

由於獅子的變化,一些工作必須從頭開始(創建新的「Finder.h」文件,其中包含所有需要的聲明,找到合適的類別和方法來覆蓋),但這種技術仍然有效。

快樂黑客!

+0

使用此代碼後,您無法在蘋果應用商店中銷售您的產品。 – 2012-01-09 05:25:00

+0

是的,我同意@jennifer ..你在做什麼似乎並不合法 – 2012-01-09 05:26:36

+4

是的,可能。不過,這是您可以在Finder中實現此類功能(圖標疊加層)的唯一方法。這可能是Dropbox在AppStore中無效的原因。 – 2012-01-09 06:49:39

2

下面是使用Les Nie所描述的技術爲獅子山和獅子山的Finder圖標徽章和上下文菜單完成的解決方案。

Liferay Nativity提供了一個腳本包,它將調整相關的Finder方法和用於設置圖標和上下文菜單的Java客戶端。它還包括Windows和Linux的等效項目。

該項目是LGPL下的開源項目,所以請隨時提供任何錯誤修復或改進!

21

對於優勝美地(MacOS 10。10 &更新),您可以使用Apple的FinderSync framework,這使得查找擴展:

    在特定的文件夾
  • 表示有興趣層次結構
  • 提供「徽章」,以 表示項目的層級裏面的狀態
  • 提供在搜索上下文菜單動態 菜單項,當所選擇的項目(或 窗口靶)是在這些層次
  • 提供一個工具欄項 ,其顯示一個菜單動態的項目(即使選擇 無關)
+0

大拇指這個信息! – 2017-03-31 22:55:49

0

要添加搜索/文件瀏覽器圖標疊加和上下文菜單,在跨平臺的方式,從Java,看看在Liferay Nativity庫。

我也在another SO post中提到這一點,其中還包含Apple的'Finder Sync'文檔和API的鏈接。