Aumentar a compatibilidade do Portugol-Studio com o macOS#1097
Open
eduardomozart wants to merge 4 commits intoUNIVALI-LITE:masterfrom
Open
Aumentar a compatibilidade do Portugol-Studio com o macOS#1097eduardomozart wants to merge 4 commits intoUNIVALI-LITE:masterfrom
eduardomozart wants to merge 4 commits intoUNIVALI-LITE:masterfrom
Conversation
Não suprimir a saída do comando ao executar o comando "portugol-studio" (executar-studio-mac.command) no Terminal, ao invés disso, suprimi-la no AppleScript (ou seja, suprimir a saída apenas se o usuário executar o aplicativo através de duplo clique no ícone do aplicativo - a saída será suprimida apenas quando o usuário executar o Portugol Studio através da interface gráfica)
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Executei os passos do #1081 (comment) e fui capaz de instalar o Portugol Studio 2.7.5 no macOS. Por algum motivo, o arquivo ''*.dmg'' está falhando ao montar no macOS (aparentemente esse problema começou à partir da versão 2.7.3 do Portugol Studio). O arquivo monta normalmente através do Terminal, portanto, acredito que o problema esteja relacionado a soma de verificação (CHECKSUM) do arquivo de instalação
*.dmg, mas não tenho certeza.Porém, após a instalação, o programa travava ao iniciar no macOS Monterey 12.6.4 (Intel). Aparentemente esse problema está relacionado a versão do Java 8 empacotada com o pacote.
O ideal seria que o pacote do Portugol-Studio fosse reempacotado com uma versão do Java8 compatível com o macOS Monterey.
As correções acima provavelmente corrigem os problemas relatados com os Bug Reports #880 e #990.
Ainda assim, usar um Stub não é a solução mais indicada, já que na Dock é exibido "java" ao invés do "Portugol Studio", e não é possível criar um atalho para a aplicação na Dock dessa forma (já que é exibido o executável "Java" ao invés do ícone do aplicativo do Portugol na Dock e a propriedade
-Xdock:namenão funciona mais em novas versões do macOS, apenas muda o nome do título na janela). O ideal seria criar um bundle de aplicativo macOS usando ferramentas específicas para isso ao invés de um shell script ou Stub para executar o Portugol Studio.Para corrigir o problema dos Bug Reports #239 e #876 (arquivos
*.pornão abrem no macOS):Esse problema ocorre porque quando o usuário abre um arquivo associado a um programa, ele não passa o nome do arquivo como um argumento (como ocorre no mundo Windows), ao invés disso, ele passa como um kAEOpenDocuments (Apple Events). Baseado no https://github.com/RichardBronosky/AppleScript-droplet, eu criei um stub (programa falso) em Apple Script que intercepta esses eventos ("On Open") e repassa eles para o script
executar-studio-mac.command. Essa alternativa também permite que múltiplos arquivos sejam abertos através do Portugol Studio ao mesmo tempo (por exemplo, selecionar múltiplos arquivos*.pore abri-los através do Finder).O problema da abordagem anterior é que o usuário precisa atribuir permissões ao Bash para executar o Portugol Studio, e essa permissão é atribuída a todos os programas (por exemplo, ao abrir um arquivo
*.porna pasta "Downloads", é atribuído permissão ao Bash ao invés do Portugol Studio, e todos os programas em Bash herdam essa mesma permissão, podendo representar um risco a segurança).Com a nova abordagem, o script bash (
/Applications/Portugol\ Studio/Contents/MacOS/Portugol Studio) foi substituído por um stub compilado do Automator que executa o AppleScript compilado emPortugol\ Studio.app/Contents/Resources/Scripts/main.scpt, e ao atribuir permissões de acesso a pasta "Downloads", por exemplo, somente esse Stub (ou seja, o Portugol Studio) recebe permissões de acesso à essa pasta.A desvantagem, porém, é que o AppleScript como stub é uma linguagem compilada e, portanto, para editar o conteúdo do script, deve ser executado o seguinte comando em um sistema macOS:
Também é possível visualizar o código-fonte descompilando o arquivo
main.scptatravés doosadecompile:Ao editar o script dessa forma, somente o conteúdo do arquivo
Contents/Resources/Scripts/main.scpté modificado. Caso você queira gerar um novo Stub (não é necessário se você deseja modificar apenas o conteúdo do arquivomain.scpt), será necessário selecionar o menu Arquivo > Exportar para... e exportá-lo como um aplicativo.O Stub desse commit foi gerado com a caixa "Startup Screen" desmarcada, se não o macOS exibe uma mensagem "Clique em Executar para executar esse script ou clique em Cancelar para cancelar o script". O código foi salvo sem assinatura. Não é possível editar o script diretamente com o aplicativo salvo em
/Applications/Portugol\ Studio.appdevido a problemas de permissão. Também tem que tomar cuidado porque ao exportar como aplicativo todo o conteúdo do diretórioResourcesé excluído, portanto, o arquivo a ser modificado deve ser o arquivo desse repositório e não o arquivoPortugol\ Studio.appfinal.Caso você não possua um sistema macOS, anexei abaixo o conteúdo descompilado do arquivo
main.applescriptpara averiguação.main.applescript.txt
Aprimoramentos ao
executar-studio-mac.command:O script
executar-studio-mac.commandoriginalmente não aceita argumentos. Isso significa que é possível iniciar a interface gráfica do Portugol Studio através do Terminal, porém, não é possível abrir um arquivo*.poratravés dela. Eu modifiquei o scriptexecutar-studio-mac.commandde forma que o script aceite argumentos e seja possível abrir arquivos*.poratravés do Terminal.Eu também adicionei
&ao final desh -c "comando"(última linha do scriptexecutar-studio-mac.command) de forma que seja possível abrir outros arquivos na mesma IDE caso o Portugol Studio já esteja aberto. Por exemplo, se você está com o arquivo "1.por" aberto no Portugol Studio, ao abrir o arquivo2.porele é carregado em uma segunda aba na mesma IDE (antes o Portugol Studio simplesmente não abria o arquivo2.porenquanto o Portugol Studio não fosse fechado, ou seja, não era possível abrir arquivos na mesma IDE).Opcionalmente, se você quiser, você pode associar o Portugol Studio aos comandos "portugol-studio" e "portugol-console" (já que aparentemente essas são as funções originais dos scripts
executar-studio-mac.commandeexecutar-console-mac.command). Aparentemente, o atalho para execução desses comandos através do Terminal não está sendo registrado pelo instalador (testado na versão 2.7.5). Adicionei os respectivos comandos a fórmula do instalador para o macOS.Aparentemente, o script
executar-console-mac.commandutiliza a versão detectada do Java do sistema operacional ao invés de usar a versão empacotada com o Portugol Studio. Mesmo alterando a variávelcaminho_javapara o Java 8 do Portugol Studio, a mensagem de erroClass has been compiled by a more recent version of the Java Environment (class file version 63.0), this version of the Java Runtime only recognizes class file versions up to 52.0.era exibida ao compilar um arquivo*.por. Para forçar a execução do comando com a versão Java 8 empacotada do Portugol Studio, você precisará alterar a variávelcaminho_javae explicitar a variávelJAVA_HOMEapontando ambas para o diretório do Java 8 do Portugol Studio. Eu também adicionei o parâmetro-Djava.awt.headless=truea variávelcomandodo shell scriptexecutar-console-mac.commandpara evitar que ele crie um ícone na Dock, já que a saída é realizada dentro do próprio Terminal.Para facilitar esse processo de modificação do arquivo
executar-console-mac.command, o arquivo com as variáveis substituídas estão em anexo na íntegra. Basta copiar e substituir todo o conteúdo do arquivoexecutar-console-mac.command.Detalhes sobre a execução do Portugol Studio no macOS:
A associação do Portugol Studio com arquivos
*.poré definida através do arquivo/Applications/Portugol Studio.app/Contents/Info.plist. Quando o Portugol Studio é executado através de duplo-clique no ícone do aplicativo, o atalho inicia o script em/Applications/Portugol Studio.app/Contents/MacOS/Portugol\ Studio(nome do programa) (parâmetroCFBundleExecutabledo arquivoInfo.plist).Também notei que o arquivo
Info.plistainda cita a versão2.7.2do Portugol Studio, acredito que os desenvolvedores não estejam atualizando a versão do arquivo, já que o Portugol Studio atualmente encontra-se na versão2.7.5.