Pergunta

Eu gostaria de associar o Última instalação Versão do meu aplicativo Mac OS X com um certo tipo de arquivo. Uma pequena experimentação mostra que o info.plist O arquivo parece ser lido e interpretado pelo sistema operacional ao iniciar o aplicativo, não ao arrastar o pacote de aplicativos para o disco. Documentação da Apple sobre a configuração do tempo de execução não diz muito sobre esse tópico.

Existe alguma maneira, usando um simples .dmg Imagem como meio de instalação, para garantir que o sistema associe esse tipo de arquivo específico ao meu aplicativo recém -instalado sem ter que lançá -lo primeiro?

Devo esclarecer que quero que isso seja feito automaticamente durante a instalação (não quero que meus usuários tenham que fazer isso sozinhos).

Foi útil?

Solução

Quando um usuário arrasta um aplicativo para a pasta Aplicativos, o sistema deve registrá -lo nos serviços de lançamento automaticamente. Ver Registro de aplicativos no guia de serviços de lançamento.

Outras dicas

Você pode fazer isso digitando a Apple-I no arquivo com o qual deseja associar o aplicativo, use a caixa chamada "Abrir com ..." e selecione seu aplicativo. Você pode verificar a caixa abaixo "Alterar tudo ..." para fazer a alteração para todos os arquivos semelhantes.

Embora as informações de Tony estejam corretas - também explicadas aqui - (que arrastando o MyApp.app para Applications será registrado nos serviços de lançamento automaticamente usando informações de Info.plist FILO XML e Configurar associações de arquivos), ele não responde completamente à pergunta sobre a associação de arquivos.

Se as pessoas seguirem estas instruções, elas terão seu aplicativo aberto, mas nenhum arquivo específico foi aberto.

...] Verifique se o sistema associa que tipo de arquivo específico com meu aplicativo recém -instalado

A associação de arquivos é um pouco diferente no Mac, quando comparado a outras plataformas. A maioria das plataformas, quando *.foo está registrado com myapp, quando MyFile.foo é clicado duas vezes, ele despacha algo parecido com:

/path/to/myapp MyFile.foo

E embora você esteja livre para usar esta técnica na linha de comando em um Mac com sucesso, simplesmente Não vai funcionar através do Finder e também não funcionará com o clique duas vezes no arquivo associado na área de trabalho.

Perguntado e respondido aqui:

https://stackoverflow.com/a/19702342/3196753

Alguma afirmação é que essa abordagem é vantajosa em relação ao manuseio conservador de documentos em aberto em main() porque "abre apenas uma instância do aplicativo". Independentemente do raciocínio por trás dessa decisão, ela complica ainda mais as questões de uma perspectiva de C ++.

  • O pdf de 108 páginas disponível aqui (Aviso, isso é marcado como "legado", pode ocorrer Linkrot).
  • Documentação relevante do portal de desenvolvedores da Apple disponível aqui.
  • A abordagem do QT está documentada aqui.

De qt.io:

Quando um usuário clica duas vezes em um arquivo no Finder, o Finder envia um evento da Apple para o aplicativo associado ao arquivo e pede para abrir o arquivo. Se o aplicativo não estiver em execução, ele será iniciado e a solicitação será feita. A vantagem dessa abordagem é que existe apenas uma instância do aplicativo em execução.

No Windows, isso geralmente é feito lançando o aplicativo e passando o nome do arquivo como um argumento da linha de comando. Olhar para muitos arquivos resulta no lançamento de muitas instâncias do mesmo aplicativo. (O componente QTSingleApplication, disponível como uma solução QT, aborda esse problema.)

O QT 3 não fornece uma abstração para lidar com eventos da Apple, mas é simples adicionar suporte a eles em seu aplicativo usando a API de carbono do Mac. Vamos supor que tenhamos um aplicativo chamado XPMViewer que exibe arquivos XPM (um formato de imagem X11). A declaração da classe da janela principal segue -se: [Removido de snippet de código

(BOOL)application:(NSApplication *)theApplication
       openFile:(NSString *)filename

Manipulando o Evento de Abrir Arquivo Mac OS X antes que C ++ Main () seja executado AeInstalleventhandler Handler não está sendo chamado na startup

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