Aumentar a compatibilidade do Portugol-Studio com o macOS #1097
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:name
nã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
*.por
nã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*.por
e 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
*.por
na 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.scpt
atravé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.app
devido 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.app
final.Caso você não possua um sistema macOS, anexei abaixo o conteúdo descompilado do arquivo
main.applescript
para averiguação.main.applescript.txt
Aprimoramentos ao
executar-studio-mac.command
:O script
executar-studio-mac.command
originalmente 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*.por
através dela. Eu modifiquei o scriptexecutar-studio-mac.command
de forma que o script aceite argumentos e seja possível abrir arquivos*.por
atravé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.por
ele é carregado em uma segunda aba na mesma IDE (antes o Portugol Studio simplesmente não abria o arquivo2.por
enquanto 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.command
eexecutar-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.command
utiliza 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_java
para 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_java
e explicitar a variávelJAVA_HOME
apontando ambas para o diretório do Java 8 do Portugol Studio. Eu também adicionei o parâmetro-Djava.awt.headless=true
a variávelcomando
do shell scriptexecutar-console-mac.command
para 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âmetroCFBundleExecutable
do arquivoInfo.plist
).Também notei que o arquivo
Info.plist
ainda cita a versão2.7.2
do 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
.