문제

Mac OS X Finder 플러그인 작성을 위한 가이드나 샘플 코드를 찾고 있나요?몇 가지 간단한 작업을 수행하는 방법을 알고 싶습니다.

  1. 아이콘에 이미지 오버레이 추가
  2. 상황에 맞는 메뉴 항목 추가
  3. 파일 변경 사항 듣기

다음 두 가지 리소스를 찾았습니다.

나는 그 내용을 검토하고 싶은 유혹을 느낀다. 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에 대한 링크도 포함되어 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top