2009-08-18 96 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的链接。