Meu objetivo é incluir em um arquivo zip o que equivale a um atalho, em vez de dizer ao (s) cliente (s) para abrir o Terminal e executar um script de shell.
Meu implantável se parece basicamente com isso:
$ unzip Deliverable.zip
$ cd Deliverable; ls
app.jar run.sh
Script em run.sh
:
#!/bin/sh
java -jar app.jar
Há muito mais no diretório; basta dizer que preciso executar o script a partir do diretório Deliverable, pois preciso acessar os caminhos relativos a ele. No entanto, não posso garantir onde um cliente abrirá Deliverable.zip
(pode ser o diretório inicial, o diretório Downloads, etc.)
Descobri isso que descreve como criar um novo fluxo de trabalho no Automator e salvá-lo como um aplicativo para iniciar um script de shell. Eu tentei fazer isso para embrulhar, run.sh
mas ele diz que não pode encontrar run.sh
.
Alguém sugeriu que eu use o AppleScript e também me enviou um link para como usar o AppleScript para alternar para o diretório atual; há uma "ação" do manuscrito no automator; então criei um novo fluxo de trabalho e o salvei como um aplicativo. É assim que se parece:
O código:
on run {input, parameters}
tell application "Finder"
set current_path to container of (path to me) as alias
end tell
do shell script "java -jar app.jar"
return input
end run
E este é o erro que recebo ao executá-lo:
Vamos lá, isso deve ser bem simples. O que estou fazendo de errado aqui?
fonte
Respostas:
Renomeie o arquivo .sh para .command e você pode fazer o cd no diretório em que o arquivo .command está localizado, com o seguinte no início do arquivo:
fonte
Eu posso ver algumas coisas erradas lá.
Primeiro, você abriu um fluxo de trabalho e não um Aplicativo.
Você deve escolher Aplicativo ao fazer sua seleção para o tipo de arquivo do Automator.
E o código que você possui não funcionará conforme o esperado, pois você não alterou o diretório. (CD).
No código que você possui, tudo o que está fazendo é obter o caminho como um alias e armazená-lo na variável current_path e em um formato inadequado para os comandos unix.
Mas você não usa.
Portanto, o diretório atual provavelmente será sua pasta pessoal
Nesta fase, não há como dizer o que está tentando lançar.
Se eu executá-lo como você, eu entendo.
O que faz sentido, pois não tenho o Java instalado. Mas, se o fizesse, não esperaria encontrar o arquivo certo.
O Applescript precisa ter esta aparência.
No meu exemplo
Eu cd para o caminho POSIX do alias na variável current_path
ou seja, do "alias" Macintosh HD: Aplicativos: "" para "/ Aplicativos /"
O
quoted form of
escape do caminho usando aspas.Eu usei o comando / bin / ls e canalize-o para abrir no TextEdit stdin como uma demonstração aqui, para que você possa testar para ver se está chegando à área que espera.
Você usaria algo como;
atualizar:
Uma outra maneira é apenas usar Applescript puro.
fonte
ls | open
código definitivamente abre o diretório que eu quero, o que é ótimo. Mas quando ligo para abrirClient.app
, recebo:LSOpenURLsWithRole() failed with error -10665 for the file <path-to-Client.app>
- algumas pesquisas sobre o que esse erro significa sugeriram um problema de permissão, verifiquei e os+x
sinalizadores foram definidos. Eu também tentei isso , e isso não funcionou (com o mesmo erro).Client.app
do Finder (clique duplo) também resulta no mesmo pop-up de erro do PowerPC.I call open Client.app
Este é o aplicativo Automator. Pelo que eu entendo no automator você tem o código applescript:do shell script "cd " & quoted form of (POSIX path of current_path) & " ;\"java -jar app.jar\""
. Então, onde você está usando oopen
comando? que, pelo que entendi, você não precisa usá-lo. Os clientes estarão usando duplo clique no aplicativo e o aplicativo irá executar o java$ open Client.app
e clicando duas vezes. Sua versão com a invocaçãols | open -fe
funciona, mas quando eu a alterojava -jar app.jar
, está me dando esse erro.do shell script "cd " & quoted form of (POSIX path of current_path) & " ; " & quoted form of "java -jar app.jar"
Caminho para o Script
No AppleScript, você precisa alterar o diretório de trabalho atual (cwd) antes de emitir o comando java. Faça isso com uma linha AppleScript como:
O
&&
é importante. Secd
for bem - sucedido, ojava
comando será iniciado dentro do cwd certo . Secd
falhar, ojava
comando não será executado.Os problemas que você provavelmente encontrará incluem:
cd
; os usuários terão pastas e espaços com nomes estranhos em seus caminhos.cd
pode falhar; envolva seu AppleScript em um bloco try para detectar alguns erros e avisar o usuário.perl
Pessoalmente, eu usaria um script perl curto no lugar de um script bash.
Existem maneiras muito melhores de escrever esse fragmento de perl, mas isso deve funcionar.
Aplicativo Automator
A melhor abordagem é solucionar os problemas da abordagem do Automator. A resposta de @ markhunte discute como corrigir o caminho e criar um aplicativo . Isso deve levá-lo a maior parte do caminho.
Consulte também o caminho AppleScript relativo ao local do script .
appify - crie o aplicativo Mac mais simples possível a partir de um shell script
Como alternativa, você pode usar o script appify de Thomas Aylott para agrupar seu script shell em um aplicativo OS X. O artigo de Mathias Bynen mostra como usar o script, como criar aplicativos simples para Mac a partir de shell scripts .
As melhorias contribuídas pela comunidade para este script estão disponíveis:
Assinatura de código
Depois de criar seu pacote de aplicativos, ele deverá ser assinado por código. Um aplicativo com código assinado será iniciado sem exigir que seus clientes desabilitem o Gatekeeper.
Código assine seu aplicativo usando seu Apple Developer ID e o
codesign
comando:Saiba mais sobre assinatura de código no site Apple Developer.
fonte
Use Platypus : "Platypus é uma ferramenta de desenvolvedor do OS X que cria aplicativos Mac nativos a partir de scripts interpretados ..."
fonte
Você pode mudar
run.sh
pararun.command
o usuário e clicar duas vezes nele?fonte
cd ~
), o que causou uma falha.Aqui está a minha opinião sobre o que eu entendi que você está tentando realizar. O código é muito longo de propósito.
Tudo o que você precisa fazer é copiar o código no Editor de maçãs, fazer as alterações desejadas e salvá-lo como um aplicativo.
Quanto ao diálogo sobre o aplicativo PowerPC não suportado, eu não sei. Você pode executá-lo na linha de comando? Gostaria de verificar se para confirmar se o aplicativo funciona primeiro.
fonte