Pergunta

Estou recebendo relatórios conflitantes de vários lugares. A revisão de Engadget diz que os plug-ins de inputManager sendo completamente ignorados (e causando comportamento estranho se o aplicativo for carregado no modo de 32 bits), mas Este tópico da lista de discussão Diz que eles funcionarão se a compatibilidade de 32/64 bits estiver correta.

Então, eu tenho duas perguntas:

  • Nós usamos o InputManagers em Snow Leopard?
  • Se sim, funcionará da mesma maneira que no leopardo. E se não, o que é uma solução alternativa (porque o 1Password está aparentemente trabalhando em uma correção)?
Foi útil?

Solução

Se você realmente precisa injetar código em aplicativos para realizar o que está tentando fazer, use mach_inject.

E por favor arquivar um bug Solicitando ganchos para que você possa implementar seu software de maneira mais segura no futuro.

Outras dicas

http://developer.apple.com/releasenotes/cocoa/appkit.html#nsinputmanager

O carregamento automático de pacotes localizados nas pastas InputManagers agora não é oficialmente não suportado. As condições para o pacote de gerenciador de entrada válidas são mais apertadas. É provável que essa funcionalidade seja desativada em uma versão futura.

  1. A instalação válida agora está restrita apenas à pasta /biblioteca /inputmanagers. Pacotes em outros locais são silenciosamente ignorados.

  2. Todos os arquivos na pasta Bundle e /biblioteca /inputmanagers devem pertencer ao usuário root e pelo grupo de administração. Nenhum arquivo dentro do pacote pode ter permissões em grupo ou outras de gravação.

  3. Os processos em execução com o privilégio raiz (getUid () == 0 ou getEuid () == 0) não podem carregar nenhum gerente de entrada de pacote.

  4. Os processos em execução com o privilégio do grupo de rodas não podem carregar nenhum gerente de entrada de pacote.

  5. O processo deve estar na sessão ativa da área de trabalho no momento da carga dos pacotes.

  6. O processo não deve ser contaminado pela alteração do ID do usuário ou do grupo (verificado por ISSETUGID ()).

  7. Nenhum processo de 64 bits pode carregar nenhum gerente de entrada de pacote.

Parece que o CHAX (um plug -in InputManager para o ICHAT) mudou agora para ser um lançador de aplicativos para o iChat: você executa o chax.app e ele carrega ichat com hacks extras da interface do usuário.

Olhando rapidamente para as cordas no pequeno lançador binário chax.app/contents/macos/chax, parece que ele está escolhendo uma técnica de interceptação da biblioteca mais fácil do que o já mencionado mach_inject: em vez disso Basta definir o dyld_insert_libraries Variável de ambiente antes de iniciar seu aplicativo de destino (como LD_Preload no Linux).

Obviamente, isso não faz dos meus gerentes de entrada favoritos, multiclutch e à tona, trabalhar novamente no Snow Leopard - eles foram mais úteis porque trabalharam com todos os aplicativos de cacau. Ainda não tenho certeza de qual seria a melhor solução alternativa para esses aplicativos.

Não baixei o 1Password 3 beta para tentar ver o que eles estavam fazendo, porque parecia que você precisa assinar um NDA virtual primeiro.

1Password 3.0 funciona em torno da necessidade de um inputManager por Piggybacking na API de plug-in do navegador do Safari em vez de. O artigo vinculado também fornece uma comparação muito pragmática de várias alternativas de injeção de código aos gerentes de entrada.

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