Eto: Mac: Mono 6.4 ejecuta todas las aplicaciones, las versiones superiores de Mono no

Creado en 28 mar. 2020  ·  21Comentarios  ·  Fuente: picoe/Eto

Todas las aplicaciones de Mac que he desarrollado hasta ahora han dejado de funcionar después de actualizar Mono a 6.6 (mismo problema con 6.8).

Revertir a una instalación anterior de Mono 6.4 soluciona el problema.

Mis aplicaciones se compilan contra TargetFramework net461 (punto de entrada de Mac) y netstandard2.0 (dll compartida) en caso de que importe.

Como siempre, es probable que el error sea mío.

Gracias por su paciencia.

Todos 21 comentarios

Hola @LaraSQP , gracias por los informes, pero realmente ayudaría si incluyera detalles como la excepción real (verifique Console.app) y lo que ha probado.

Además, una cosa a tener en cuenta es que al compilar para _release_, con mono instalado en su caja de desarrollo, incluirá mono dentro de su aplicación, por lo que no requerirá que se instale mono para _run_ su aplicación. Esto hará que tenga un tiempo de ejecución conocido. Alternativamente, use .NET Core en su lugar y agréguelo en su aplicación (no requiere que se instale mono para hacerlo).

Gracias por la rápida respuesta.

No conocía Console.app e informará la excepción.

Tampoco sabía sobre la instalación de Mono en Windows. Maldita sea. ¿Qué instalador aplica? 64 bits (sin GTK #) o también necesito el GTK #?

GTK # no es necesario, solo usa mkbundle para empaquetar mono, lo que hace usando la propiedad <MacBundleTarget> en su csproj. Su valor predeterminado es mono-6.4.0-osx-10.9-x64 si no se especifica, y puede ser cualquier valor listado en mkbundle -list-targets

Con respecto a Console.app, solo tengo dos errores que son bastante poco informativos (para mí, al menos):

29 de marzo 06:19:01 my-MacBook-Air com.apple.xpc.launchd [1] (com.apple.xpc.launchd.oneshot.0x1000015e.MyApp1 [10705]): Servicio cerrado con código anormal: 78

29 de marzo 06:40:29 my-MacBook-Air com.apple.xpc.launchd [1] (com.example.MyApp1.4212 [11362]): Servicio cerrado con código anormal: 1

Intentando ahora volver a compilar con Mono instalado.

@LaraSQP Echa un vistazo a la sección "Informes de

"Crash Reports" está vacío.

Por cierto, tengo instalado mono 6.8 y no veo el mismo problema.

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

Una cosa a considerar, es que si modificó Info.plist de alguna manera (de uno de sus otros problemas), es que _necesita_ ser solo LF, UTF-8 _sin BOM_, y no CRLF. De lo contrario, asumirá que está dañado.

Info.plist ha sido cambiado por npp.

He instalado Mono en mi máquina de desarrollo, pero la recompilación no agrega Mono al paquete. ¿Qué me estoy perdiendo?

En modo Release lo hace por defecto. De lo contrario, establezca <MacBundleMono> en verdadero en csproj.

Eche un vistazo a BundleMono.targets y Mac.targets para ver las distintas propiedades que puede establecer.

Espero agregar estas opciones a las propiedades del proyecto VS para que sea más fácil descubrirlas en el futuro, pero lamentablemente tan poco tiempo (libre) para hacerlo.

Agregar <MacBundleMono>True</MacBundleMono> a csproj no lo hace.

A menos que lo haga de una manera que no me resulte evidente, claro.

está bien.

Resulta que una carpeta MonoBundle se incluye en la aplicación solo cuando MacBundleMono se establece en False .

Además, el proceso de compilación cambia Info.plist para incluir tanto UTF-8 BOM como CRLF , por lo que deben corregirse manualmente después.

Además, el proceso de compilación cambia Info.plist para incluir tanto UTF-8 BOM como CRLF, por lo que deben corregirse manualmente después.

Este no debería ser el caso ... ¿podría adjuntar su archivo Info.plist que está utilizando (no el compilado).

Resulta que una carpeta MonoBundle se incluye en la aplicación solo cuando MacBundleMono está configurado en False.

Sí, una carpeta MonoBundle no significa que mono esté empaquetado ... curiosamente ... la ausencia de esta carpeta significa que mono está 'empaquetado' y todo está incluido en el ejecutable nativo.

MacBundleMono es un fracaso. Mono no está incluido pase lo que pase.

Y cualquier versión de Mono por encima de 6.4.0.137 continúa bloqueando mis aplicaciones.

Examinaré los objetivos de construcción más tarde.

Gracias por su paciencia.

¿Sigues recibiendo esta advertencia al construir?

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.

Si es así, es posible que deba reiniciar o señalar específicamente dónde se instaló mono usando <MonoPath> .

También podrías enviarme el dmg de tu aplicación (¿asumiendo que estás dispuesto a hacer eso?). Podría intentar diagnosticarlo más.

No recibo una advertencia sobre mkbundle así que intentaré el MonoPath continuación.

Adjunto hay un proyecto simple que he usado para probar esto y aquello. Ni siquiera comienza por encima de Mono 6.4 en Mac y no hay un informe de fallas en Console.app

MacFileTest.zip

Había agregado Mono a environment variables , por lo que mkbundle es accesible sin problema. MonoPath no es el problema aquí.

De hecho, pude ejecutar mkbundle manualmente a través de ...

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

... que pareció tener éxito excepto que no se ejecutará en Mac.

Dado que no hay ninguna referencia a mkbundle en mi proyecto (arriba), es evidente que me estoy perdiendo mucho.

Parece que mi última publicación no apareció, o no puedo encontrarla, o se eliminó de alguna manera.

Primero, usar netcoreapp3.1 solucionó el problema. Muchas gracias.

Desinstalé Mono y ahora todas las aplicaciones se ejecutan en net core . Estoy un poco sorprendido porque el comando dotnet en Terminal eructa:

zsh: comando no encontrado: dotnet

Supongo que una cosa no tiene que ver con la otra (?).

Quedan dos pequeños problemas que quizás desee conocer:

  1. El proceso de construcción siempre incluye un archivo .pdb dentro de la carpeta MacOS del paquete.

  2. El proceso de construcción siempre modifica Info.plist para incluir una clave CFBundleExecutable , duplicando la existente si está presente. Esto da como resultado que se incluyan tanto BOM como CRLF a pesar de no estar presentes en el Info.plist del proyecto.

La solución para ambos problemas es un simple archivo por lotes para eliminar 1 y reemplazar 2, que desafortunadamente debe ejecutarse manualmente ya que no se puede agregar al post-build events porque a pesar de ser post-build , todavía se ejecuta demasiado pronto , Por lo que yo puedo decir.

Gracias de nuevo por tu infinita paciencia.

¿Fue útil esta página
0 / 5 - 0 calificaciones