OS X Finder 플러그인 작성 방법
-
18-09-2019 - |
문제
Mac OS X Finder 플러그인 작성을 위한 가이드나 샘플 코드를 찾고 있나요?몇 가지 간단한 작업을 수행하는 방법을 알고 싶습니다.
- 아이콘에 이미지 오버레이 추가
- 상황에 맞는 메뉴 항목 추가
- 파일 변경 사항 듣기
다음 두 가지 리소스를 찾았습니다.
- OS X용 상황별 메뉴 플러그인 작성:다음을 사용하는 2002년의 오래된 문서
COM
Mac OS X 8/9를 대상으로 하는 API입니다. - SCP플러그인:Finder 플러그인이 포함된 오픈 소스 SVN Mac 애플리케이션입니다.
나는 그 내용을 검토하고 싶은 유혹을 느낀다. SCPlugin
코드를 작성했지만 소화하기 더 쉬운 샘플을 찾고 싶었습니다.
해결책
안타깝게도 실제로 파인더 플러그인을 프로그래밍합니다 하다 Com으로 손을 더럽 히는 것이 여전히 필요합니다. Scplugin 프로젝트의 SCFinderPlugin 하위 프로젝트를 살펴보면 COM 용 VTable 설정, AddRef/Releaseref 함수 등을 포함하여 첫 번째 링크에 요약 된 동일한 기술을 정확히 따를 것입니다. 구식 탄소 메모리 관리, COM 스타일 메모리 관리 및 Cocoa/New 스타일 카본 메모리 관리를 동시에 관리하는 플러그인을 작성하는 것은 놀라운 고통이 될 수 있으며, 당신이 될 것이라는 사실을 완전히 무시할 수 있습니다. 3 개 이상의 근본적으로 상이한 API에서 상호 작용하며, 다른 명명 규칙과 의미론에 부름. 히스테리 적으로 가난한 상황을 부르는 것은 광대 한 과소 평가 일 것입니다.
밝은면에서 Mac OS X 10.6 스노우 레오파드의 파인더는 코코아로 완전히 다시 작성되었으며 그로 인해 매우 우수한 플러그인 인터페이스가 제공됩니다. 실제로 스노우 레오파드만을 타겟팅 할 수있는 상황에 처할만큼 운이 좋으면 ADC 프리미어 또는 더 높은 멤버십을 잡고 프레리네세 빌드를 다운로드하고 이에 대한 코드를 작성해야 할 것입니다. 게다가, 플러그인은 코코아 재 작성없이 어쨌든 10.6에서 작동하지 않을 수 있으므로 스노우 레오파드가 출시되기 전에 스노우 레오파드를 살펴 보는 것이 좋습니다.
다른 팁
그만큼 Finder 아이콘 오버레이 예제 프로젝트는 작고 매우 기본적이지만 실제로 아래 답변의 실제 작동하는 예를 나타냅니다.
https://github.com/lesnie/Finder-Icon-Overlay
너무 오래된 이야기인 것은 알지만, 아직도 이 주제에 관심을 갖고 계신 분들이 계실 수도 있습니다(?)
Leopard(10.6)에서 수행한 작업은 다음과 같습니다.처음에는 적절한 Finder의 헤더가 필요합니다.클래스 덤프 도구를 사용하여 가져오세요.그런 다음 코드를 SIMBL 플러그인으로 작성하고(방법은 문서 참조) 몇 가지 메소드를 섞어보세요.예를 들어 ListView의 아이콘 위에 무언가를 그리려면 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];
}
}
기본적으로 파일 이름이 문자 "A"로 시작하는 파일의 모든 아이콘 위에 "myPrettyIconOverlayImage"를 그립니다.이 논리는 당신에게 달려 있습니다.
다음 줄에 주의하세요. [self FT_drawIconWithFrame:arg1];
이것은 일반 아이콘과 이름 등을 얻기 위해 'super'를 호출하는 방법입니다.루프처럼 이상해 보이지만 실제로는 그렇지 않습니다.그런 다음 SIMBL 플러그인으로 래핑하고 SIMBL을 설치한 후 실행하세요.
Lion의 변경으로 인해 일부 작업은 처음부터 수행해야 하지만(필요한 모든 선언이 포함된 새 "Finder.h" 파일 만들기, 재정의할 적절한 클래스 및 메서드 찾기) 이 기술은 여전히 작동합니다.
즐거운 해킹되세요!
Yosemite (MacOS 10.10 & Newer)의 경우 Apple 's를 사용할 수 있습니다. Findersync 프레임 워크, Finder Extensions가 다음을 수행 할 수 있습니다.
- 특정 폴더 계층에 관심을 표명하십시오
- 해당 계층 내부의 항목 상태를 나타내는 "배지"를 제공합니다.
- 선택한 항목 (또는 윈도우 대상)이 해당 계층에있는 경우 Finder Contextual 메뉴에 동적 메뉴 항목을 제공합니다.
- 동적 항목이있는 메뉴를 표시하는 도구 모음 항목을 제공합니다 (선택이 관련이없는 경우에도)
파인더를위한 공식 또는 지원되는 플러그인 시스템이 없습니다. OS X 10.6부터 시작하여 Finder 프로세스에 코드를 주입하고 Finder 프로세스에서 목표 C 메소드를 무시해야합니다.
독점 프로젝트를 위해이 작업을 수행했습니다. 이에 대한 예제 나 튜토리얼이 없다는 이유는 개발 작업이 상당히 어렵고 시간이 많이 걸리는 개발 작업이기 때문입니다. 이러한 이유로, 프로세스의 세부 사항을 면밀히 보호하기 위해이를 달성 한 개인이나 조직에 대한 인센티브가 많이 있습니다.
서비스 API를 사용하여 목표를 달성 할 수있는 방법이 전혀 없다면 그렇게하십시오. Finder 플러그인을 작성하면 1-2가됩니다 단단한 C 및 Objective-C 내부에 대한 수개월의 힘든 발전과 합리적으로 깊은 지식.
아직도 그렇게하고 싶다고 확신한다면, 잡으세요 mach_star. 행운을 빕니다.
내가 아는 한, 파인더를위한 공식 플러그인 아키텍처는 없습니다. 파인더에 연결하지 않고도 외부 애플리케이션을 통해 아이콘에 이미지 오버레이를 추가 할 수는 있지만 즉석에 없을 수도 있습니다. 폴더 동작 및 자동 자료를 제외하고 상황에 맞는 메뉴 항목을 추가 할 수있는 방법은 없다고 생각합니다. 또한 외부 응용 프로그램을 작성하여 파일 시스템 변경을 사용하여 FSEVENTS API.
다음은 Les Nie가 설명한 기술을 사용하여 Finder Icon Badge 및 Lion 및 Mountain Lion의 맥락 메뉴에 대한 완성 된 솔루션입니다.
Liferay Nativity 관련 파인더 메소드와 아이콘 및 컨텍스트 메뉴를 설정하기위한 Java 클라이언트를 스크립팅하는 스크립팅 번들을 제공합니다. 또한 Windows 및 Linux의 동등한 프로젝트도 포함되어 있습니다.
이 프로젝트는 LGPL에 따라 오픈 소스이므로 버그 수정 또는 개선 사항을 자유롭게 제공하십시오!
피킹은 날씬합니다. Finder 플러그인이 실제로 지원되는지 여부는 결코 명확하지 않았습니다. 그러나 몇 가지 더 리드가 더 있습니다.
- Samplecmplugin - 물론 탄소 기반은 파인더도 마찬가지입니다. 거의 모든 Finder 플러그인은 아마도 10.6에서의 작동을 중단 할 것입니다.
- Automator는 물건을 "Finder Plugin"으로 저장할 수 있습니다. 그것은 당신이 논의하는 것의 더 지원되는 버전이지만 물론 덜 유연합니다.
파인더/파일 브라우저 아이콘 오버레이 및 컨텍스트 메뉴를 교차 플랫폼 방식으로 Java에서 추가하려면 Liferay Nativity 도서관.
나는 또한 이것을 언급한다 또 다른 게시물, Apple의 'Finder Sync'문서 및 API에 대한 링크도 포함되어 있습니다.