Eto: Mac - Mono 6.4 executa todos os aplicativos, versões superiores de Mono não

Criado em 28 mar. 2020  ·  21Comentários  ·  Fonte: picoe/Eto

Todos os aplicativos Mac que desenvolvi até agora pararam de funcionar depois de atualizar o Mono para 6.6 (mesmo problema com 6.8).

Reverter para uma instalação anterior do Mono 6.4 corrige o problema.

Meus aplicativos são compilados em TargetFramework net461 (ponto de entrada do Mac) e netstandard2.0 (dll compartilhada) caso seja importante.

Como sempre, é provável que o erro seja meu.

Obrigado pela sua paciência.

Todos 21 comentários

Olá @LaraSQP , obrigado pelos relatórios, mas ajudaria muito se você incluísse detalhes como a exceção real (verifique Console.app) e o que você tentou.

Além disso, uma coisa a notar é que ao compilar para _release_, com mono instalado em sua caixa de dev, ele irá agrupar mono em seu aplicativo para que não exija que mono seja instalado em _run_ seu aplicativo. Isso fará com que você tenha um tempo de execução conhecido. Como alternativa, use o .NET Core em vez e empacote-o em seu aplicativo (não requer mono para ser instalado para fazer isso).

Obrigado pela resposta rápida.

Não sabia sobre o Console.app e relatará a exceção.

Também não sabia sobre a instalação do Mono no Windows. Que coisa maldita. Qual instalador se aplica? 64 bits (sem GTK #) ou também preciso do GTK #?

GTK # não é necessário, ele só usa mkbundle para empacotar mono, o que ele faz usando a propriedade <MacBundleTarget> em seu csproj. O padrão é mono-6.4.0-osx-10.9-x64 se não for especificado e pode ser qualquer valor listado em mkbundle -list-targets

Com relação ao Console.app, só tenho dois erros que são pouco informativos (para mim, pelo menos):

29 de março 06:19:01 my-MacBook-Air com.apple.xpc.launchd [1] (com.apple.xpc.launchd.oneshot.0x1000015e.MyApp1 [10705]): Serviço encerrado com código anormal: 78

29 de março 06:40:29 my-MacBook-Air com.apple.xpc.launchd [1] (com.example.MyApp1.4212 [11362]): Serviço encerrado com código anormal: 1

Tentando recompilar agora com o Mono instalado.

@LaraSQP Dê uma olhada na seção "Relatórios de

"Relatórios de falhas" está vazio.

BTW, tenho o mono 6.8 instalado e não estou vendo o mesmo problema ..

Screen Shot 2020-03-28 at 3 30 34 PM

Uma coisa a considerar é que se você modificou Info.plist de alguma forma (a partir de um de seus outros problemas), é que ele _precisa_ ser apenas LF, UTF-8 _sem BOM_ e não CRLF. Ele assumirá que, de outra forma, está corrompido.

Info.plist foi alterado pelo npp.

Instalei o Mono na minha máquina de desenvolvimento, mas a recompilação não adiciona o Mono ao pacote. o que estou perdendo?

No modo Release, ele faz isso por padrão. Caso contrário, defina <MacBundleMono> como verdadeiro em csproj.

Dê uma olhada em BundleMono.targets e Mac.targets para as várias propriedades que você pode definir.

Espero adicionar essas opções às propriedades do projeto VS para tornar mais fácil descobri-las no futuro, mas, infelizmente, tão pouco tempo (livre) para fazê-lo.

Adicionar <MacBundleMono>True</MacBundleMono> ao csproj não adianta.

A menos que o faça de uma forma que não seja aparente para mim, claro.

OK.

Acontece que uma pasta MonoBundle é incluída no aplicativo apenas quando MacBundleMono está definido como False .

Além disso, Info.plist é alterado pelo processo de compilação para incluir UTF-8 BOM e CRLF , portanto, eles devem ser corrigidos manualmente depois.

Além disso, Info.plist é alterado pelo processo de construção para incluir BOM UTF-8 e CRLF, portanto, eles devem ser corrigidos manualmente depois.

Este não deveria ser o caso ... você poderia anexar o arquivo Info.plist que está usando (não o compilado).

Acontece que uma pasta MonoBundle é incluída no aplicativo apenas quando MacBundleMono está definido como False.

Sim, uma pasta MonoBundle não significa que mono está agrupado .. estranhamente .. a ausência desta pasta significa que mono está 'agrupado' e tudo está incluído no executável nativo.

MacBundleMono é um fracasso. Mono não está incluído, não importa o quê.

E qualquer versão do Mono acima de 6.4.0.137 continua travando meus aplicativos.

Vou olhar para os destinos de construção mais tarde.

Obrigado pela sua paciência.

Você ainda está recebendo este aviso durante a construção?

Couldn't find mkbundle, so app bundle will require mono to be installed! Install mono from https://mono-project.com to bundle it with your app or set MonoPath to where it is installed.

Nesse caso, você pode precisar reiniciar ou apontar especificamente para onde o mono foi instalado usando <MonoPath> .

Você também poderia me enviar o dmg do seu aplicativo (assumindo que você está disposto a fazer isso?). Eu poderia tentar diagnosticar melhor.

Não estou recebendo um aviso sobre mkbundle então tentarei MonoPath seguir.

Em anexo está um projeto simples que usei para testar isso e aquilo. Ele nem inicia acima do Mono 6.4 no Mac e não há relatório de falha no Console.app

MacFileTest.zip

Eu adicionei Mono a environment variables , então mkbundle está acessível sem problemas. MonoPath não é o problema aqui.

Na verdade, consegui executar mkbundle manualmente por meio de ...

mkbundle --simple --cross mono-6.4.0-osx-10.9-x64 MacFileTest.exe -o MacFileTest

... que pareceu funcionar, exceto que não funciona no Mac.

Como não há referência a mkbundle em meu projeto (acima), é evidente que estou perdendo muito.

Parece que minha última postagem não apareceu, ou não consigo encontrá-la, ou ela foi excluída de alguma forma.

Primeiro, usar netcoreapp3.1 realmente resolveu o problema. Muito obrigado.

Desinstalei Mono e todos os aplicativos agora rodam em net core . Estou um pouco surpreso, pois o comando dotnet nos arrotos Terminal :

zsh: comando não encontrado: dotnet

Acho que uma coisa não tem a ver com a outra (?).

Restam dois pequenos problemas que você pode querer saber:

  1. O processo de construção sempre inclui um arquivo .pdb dentro da pasta MacOS do pacote.

  2. O processo de construção sempre modifica Info.plist para incluir uma chave CFBundleExecutable , duplicando a chave existente, se houver. Isso resulta em BOM e CRLF a serem incluídos, apesar de não estarem presentes no Info.plist no projeto.

A solução alternativa para esses problemas é um arquivo em lote simples para excluir 1 e substituir 2, que infelizmente deve ser executado manualmente, pois não pode ser adicionado a post-build events pois apesar de ser post-build ele ainda é executado muito cedo , tanto quanto eu posso dizer.

Obrigado novamente por sua infinita paciência.

Esta página foi útil?
0 / 5 - 0 avaliações