Pergunta

Eu estou procurando por um guia ou código de exemplo para a escrita de Mac OS X Finder plugins?Gostaria de saber como fazer algumas simples ações:

  1. adicionando imagem overlayers para ícones
  2. adicionar itens de menu de contexto
  3. ouvir alterações de arquivo

Eu achei os dois seguintes recursos:

Sou tentado a revisão do SCPlugin código, mas estava esperando encontrar um modo mais fácil de exemplo para digerir.

Foi útil?

Solução

Infelizmente, programando um plugin de localizador na verdade faz Ainda exige sujar as mãos com o com. Se você observar o subprojeto Scfinderplugin do projeto Scplugin, descobrirá que ele segue exatamente as mesmas técnicas descritas no seu primeiro link, incluindo a configuração de um VTable para com, escrevendo funções addref/releaseRef e assim por diante. Escrever um plug-in, onde você está gerenciando simultaneamente o gerenciamento de memória de carbono da velha escola, o gerenciamento de memória do estilo e o gerenciamento de memória de carbono de cacau/novo estilo, pode ser uma dor incrível-e isso ignora totalmente o fato de que você será Interagindo em três ou mais APIs radicalmente diferentes, com diferentes convenções de nomeação e chamando a semântica. Chamar a situação histericamente pobre seria um vasto eufemismo.

Pelo lado positivo, o Finder no Mac OS X 10.6 Snow Leopard foi totalmente reescrito em cacau-e com isso vêm interfaces de plug-in muito superiores. Se você tiver a sorte de estar em uma situação em que só pode segmentar o Snow Leopard, provavelmente deve pegar um Premier ADC ou uma associação superior, baixar as construções de pré -lançamento e codificar contra isso. Além disso, seu plug -in pode não funcionar em 10.6 de qualquer maneira sem uma reescrita de cacau, por isso pode fazer sentido dar uma olhada no Snow Leopard antes de ser liberado, independentemente.

Outras dicas

O Localizador De Sobreposição De Ícone exemplo de projeto representa uma pequena e muito simples, mas, na verdade, trabalhando exemplo de resposta abaixo.

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

Eu sei que isto é tão velho, mas alguns podem ser ainda interessado no tópico (?)

Aqui está o que eu tiver feito com o Leopard (10.6).Em primeiro lugar adequado Localizador de cabeçalhos são necessários.Use a classe-ferramenta de despejo para obtê-lo.Em seguida, escreva o código como um SIMBL plugin (consulte a documentação de como fazê-lo), swizzling alguns métodos.Por exemplo, para desenhar algo sobre o ícone no ListView, drawIconWithFrame:método de TIconAndTextCell método deve ser substituído.

Aqui está o código para o método swizzling:

+ (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);

}

Eu estou substituindo "drawIconWithFrame:" o método com o meu método "FT_drawIconWithFrame:".Veja abaixo um exemplo de implementação para este método.

- (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];
    }
}

Essencialmente, ele desenha "myPrettyIconOverlayImage" sobre cada ícone para o arquivo com o nome começa com a letra "A".Essa lógica é até você.

Preste atenção para esta linha: [self FT_drawIconWithFrame:arg1]; isso é como chamar de 'super', a fim de obter ícone normal e o nome etc.Eu sei, parece estranho, como loop, mas de facto não o é.Em seguida, enrole em SIMBL plugin, instalar o SIMBL e ...correr.

Devido a mudanças no Leão algum trabalho tem que ser feito do zero (fazer de novo "Finder.h" do arquivo com todas as declarações necessárias no mesmo, encontrar adequada classess e métodos para substituir), mas esta técnica ainda funciona.

Happy hacking!

Para Yosemite (MacOS 10.10 e mais recente), você pode usar a Apple's Findersync Framework, que permite extensões de localizador para:

  • Expresse interesse em hierarquias específicas de pastas
  • Forneça "crachás" para indicar o status dos itens dentro dessas hierarquias
  • Forneça itens de menu dinâmicos nos menus contextuais do Finder, quando os itens selecionados (ou o alvo da janela) estão nessas hierarquias
  • Forneça um item da barra de ferramentas que exibe um menu com itens dinâmicos (mesmo que a seleção não esteja relacionada)

Não existe um sistema de plug -in oficial ou suportado para o localizador. Começando com o OS X 10.6, você precisará injetar código no processo do localizador e substituir os métodos C Objetivos no processo do localizador.

Eu fiz isso para um projeto proprietário. Posso dizer -lhe que a razão pela qual não há exemplos ou tutoriais para isso é porque é uma tarefa de desenvolvimento significativamente difícil e demorada. Por esse motivo, há muito incentivo para indivíduos ou organizações que conseguiram isso para proteger de perto as especificidades de seu processo.

Se houver alguma maneira de atingir seu objetivo usando a API de serviços, faça -o. Escrever um plugin do Finder vai levar você 1-2 sólido Meses de desenvolvimento minucioso e conhecimento razoavelmente profundo dos internos de C e Objective-C.

Se você ainda está convencido de que deseja fazer isso, pegue mach_star. Boa sorte.

Até onde eu sei, não existe uma arquitetura oficial de plug -in para o localizador. Você pode adicionar sobreposições de imagem aos ícones através de um aplicativo externo sem precisar conectar -se ao localizador, embora não esteja em tempo real. Eu não acho que exista uma maneira de adicionar itens de menu contextual, além das ações da pasta e do Automator. Você também pode procurar escrever um aplicativo externo para monitorar alterações no sistema de arquivos usando o FSEVENTS API.

Aqui está uma solução completa para emblemas de ícones do localizador e menus contextuais em leão e leão da montanha usando as técnicas descritas por Les Nie.

Natividade de Liferay Fornece um pacote de script que irá gastar os métodos do localizador relevante e um cliente Java para definir os ícones e os menus de contexto. Ele também inclui projetos equivalentes para Windows e Linux.

O projeto é de código aberto no LGPL, portanto, fique à vontade para contribuir com correções ou melhorias de bugs!

As escolhas são pequenas; Nunca foi muito claro para mim se os plugins do Finder são realmente suportados. Mais algumas pistas, no entanto:

  • SampleCmplugin - É claro que baseado em carbono, já que é o Finder. Observe que quase qualquer plug -in do Finders provavelmente parará de trabalhar com 10.6.
  • O Automator pode salvar as coisas como um "plug -in do localizador". É uma versão mais suportada do que você está discutindo, mas é claro que menos flexível.

Para adicionar sobreposições de ícones do navegador Finder/Arquivo e menus de contexto, de maneira cruzada, de Java, dê uma olhada no Natividade de Liferay biblioteca.

Eu também faço mencionar isso em Outra postagem, que também contém links para os documentos e API do Finder Sync 'da Apple.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top