es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Aplicación de Flutter para escritorio en MacOS que utiliza binarios adicionales se bloquea al exportar.

Quiero distribuir una aplicación de escritorio de Flutter fuera de la App Store. La aplicación incluye algunos binarios adicionales utilizando la clave “assets” en el archivo pubspec.yaml. Los binarios terminan en este directorio dentro de la aplicación:

flutter_sample.app/Contents/Frameworks/App.framework/Versions/A/Resources/flutter_assets/bin

Así es como lo uso con “Process.run (…)” y funciona localmente. Sin embargo, si intento notarizar la aplicación en Xcode y exportarla, la aplicación se bloqueará inmediatamente al intentar ejecutar un binario incluido. Abrí la Consola y encontré la siguiente entrada en el archivo launchd.log correspondiente al momento en que la aplicación se bloqueó:

> 2022-01-07 08:28:04.875197 (gui/501/application.com.example.flutterSample.1772919.1772925) <notice>: removing job: caller = runningboardd
> 2022-01-07 08:28:04.875204 (gui/501 [100020]) <notice>: removing service: application.com.example.flutterSample.1772919.1772925
> 2022-01-07 08:28:04.875309 (gui/501/application.com.example.flutterSample.1772919.1772925) <notice>: internal event: PETRIFIED, code = 0
> 2022-01-07 08:28:04.875311 (gui/501/application.com.example.flutterSample.1772919.1772925) <notice>: job state = removed

No pude encontrar ninguna otra información sobre el error. Si encierro el código utilizando “Process.run” en un bloque try-catch, no cambia nada, la aplicación se bloquea de todos modos. Lo mismo ocurre si uso una zona o un controlador onError como se describe en la página “handling errors” en la documentación de Flutter.

Detalles adicionales:

  • He desactivado “com.apple.security.app-sandbox” en los archivos “*.entitlements”, ya que los procesos no funcionaban ni siquiera localmente.
  • He activado la “hardened runtime” en Xcode, era necesario para notarizar la aplicación.
  • La aplicación también se bloquea si, en lugar de exportar desde Xcode, simplemente archivo el directorio de compilación (con “tar”) y lo envío por internet (o establezco “com.apple.quarantine” con “xattr”). No se bloqueará si solo lo comprimo y descomprimo sin marcarlo como en cuarentena. Tiene sentido, pero esperaba que notarizar la aplicación lo solucionara.

Entonces, ¿qué puedo hacer para evitar estos bloqueos o al menos obtener más detalles cuando ocurren para poder investigar más a fondo?

Tags:  ,

Answer

  1. Avatar for davy.ai

    Parece que el fallo ocurre al intentar ejecutar un binario que está incluido en la aplicación usando la clave assets en pubspec.yaml. El fallo ocurre al intentar notarizar la aplicación en Xcode y exportarla. El mensaje de error en el archivo launchd.log no proporciona mucha información sobre el fallo.

    Aquí hay algunas sugerencias para prevenir los fallos o obtener más detalles sobre ellos:

    1. Verifique si los binarios son compatibles con el sistema operativo y la arquitectura utilizados. Es posible que los binarios estén compilados para una plataforma diferente, lo que causa los fallos. Asegúrese de que los binarios estén compilados para el mismo sistema operativo y arquitectura utilizados al construir la aplicación.
    2. Verifique si hay problemas de firma de código. Los problemas de firma de código pueden causar fallos al ejecutar binarios. Asegúrese de que los binarios estén debidamente firmados y de que la aplicación esté debidamente firmada con un certificado válido.

    3. Asegúrese de que ningún permiso del sistema de archivos esté bloqueando la ejecución de los binarios incluidos. Asegúrese de que los directorios y archivos sean accesibles para la aplicación.

    4. Utilice NSLog u otros mecanismos de registro para proporcionar más información sobre el fallo. Esto puede ayudar a identificar la causa exacta del fallo.

    5. Utilice el depurador integrado de Xcode para capturar el informe de fallos. El depurador puede ayudar a capturar la traza de la pila y otra información relevante sobre el fallo.

    6. Verifique los registros del sistema para obtener información adicional sobre el fallo. Los registros del sistema pueden contener información adicional sobre el fallo que puede ayudar a identificar la causa.

    En general, es importante asegurarse de que los binarios incluidos sean compatibles con el sistema operativo y la arquitectura utilizados, estén debidamente firmados y sean accesibles para la aplicación para evitar fallos. Además, el registro y la depuración pueden proporcionar información valiosa para investigar e identificar la causa de los fallos.

Comments are closed.