flet icon indicating copy to clipboard operation
flet copied to clipboard

Broken macOS builds permanently break the project

Open torablien opened this issue 10 months ago • 0 comments

Description

When you make a build on macOS (arm) with flet build that causes a crash (e.g. because of a seemingly unsupported dependency), the app will crash the first time and then ALL future builds in the project will show a blank screen when packaged with flet build. This includes if you completely remove the dependency and completely delete the build directory. This gets reset if you just change the directory name (i.e. just copy the files to a new project with a different name). One guess is something is being cached on Mac after the crash and so changing the project name effectively invalidates that.

Simple reproduction steps

Create a simple Hello World app and build for mac using flet build macos

import flet as ft


def main(page: ft.Page):
    page.add(ft.Text("Hello World!"))


ft.app(main)

Open the app and observe it works as expected.

Add a dependency that doesn't seem to be working with flet build like numpy (note: I've repro'd this with multiple other seemingly unsupported dependencies so it doesn't seem to be numpy-specific and the real concern here is that broken behavior persists to future clean builds).

import flet as ft
import numpy as np

def main(page: ft.Page):
    page.add(ft.Text("Hello World!"))


ft.app(main)

Open the app and observe it crashes. All future attempts to open this app will now show a blank screen with no content (not crash).

Revert the code to remove the dependency and build again using flet build macos

Open the app and observe just a blank screen with no content.

Describe the results you expected:

When the code is reverted and built, the app runs again like before.

Additional information you deem important (e.g. issue happens only occasionally):

Here is the (abridged) log from the crashed thread on first open:

...

Crashed Thread:        22

Exception Type:        EXC_BAD_ACCESS (SIGBUS)
Exception Codes:       KERN_PROTECTION_FAILURE at 0x000000016becfff8
Exception Codes:       0x0000000000000002, 0x000000016becfff8

Termination Reason:    Namespace SIGNAL, Code 10 Bus error: 10
Terminating Process:   exc handler [62572]

VM Region Info: 0x16becfff8 is in 0x16becc000-0x16bed0000;  bytes after start: 16376  bytes before end: 7
      REGION TYPE                    START - END         [ VSIZE] PRT/MAX SHRMOD  REGION DETAIL
      Stack                       16bdc4000-16becc000    [ 1056K] rw-/rwx SM=PRV  thread 21
--->  STACK GUARD                 16becc000-16bed0000    [   16K] ---/rwx SM=NUL  ...for thread 22
      Stack                       16bed0000-16bf58000    [  544K] rw-/rwx SM=PRV  thread 22

...

Thread 22 Crashed:
0   libsystem_pthread.dylib       	       0x18d587e7c ___chkstk_darwin + 60
1   libopenblas64_.0.dylib        	       0x139171ce0 dgetrf_parallel + 52
2   libopenblas64_.0.dylib        	       0x139019b30 dgesv_64_ + 372
3   _umath_linalg.cpython-311-darwin.so	       0x11eb11488 void inv<double>(char**, long const*, long const*, void*) + 616
4   _multiarray_umath.cpython-311-darwin.so	       0x128736438 generic_wrapped_legacy_loop + 40
5   _multiarray_umath.cpython-311-darwin.so	       0x12873db40 ufunc_generic_fastcall + 15976
6   serious_python_darwin         	       0x105be78ec PyObject_Vectorcall + 80
7   serious_python_darwin         	       0x105cd7984 _PyEval_EvalFrameDefault + 34524
8   serious_python_darwin         	       0x105ccf208 _PyEval_Vector + 200
9   serious_python_darwin         	       0x105be78ec PyObject_Vectorcall + 80
10  _multiarray_umath.cpython-311-darwin.so	       0x1286529a8 dispatcher_vectorcall + 628
11  serious_python_darwin         	       0x105be78ec PyObject_Vectorcall + 80
12  serious_python_darwin         	       0x105cd7984 _PyEval_EvalFrameDefault + 34524
13  serious_python_darwin         	       0x105ccf208 _PyEval_Vector + 200
14  serious_python_darwin         	       0x105be78ec PyObject_Vectorcall + 80
15  _multiarray_umath.cpython-311-darwin.so	       0x1286529a8 dispatcher_vectorcall + 628
16  serious_python_darwin         	       0x105be78ec PyObject_Vectorcall + 80
17  serious_python_darwin         	       0x105cd7984 _PyEval_EvalFrameDefault + 34524
18  serious_python_darwin         	       0x105ccf0d8 PyEval_EvalCode + 272
19  serious_python_darwin         	       0x105ccba18 builtin_exec + 916
20  serious_python_darwin         	       0x105c3484c cfunction_vectorcall_FASTCALL_KEYWORDS + 160
21  serious_python_darwin         	       0x105cd95f4 _PyEval_EvalFrameDefault + 41804
22  serious_python_darwin         	       0x105ccf208 _PyEval_Vector + 200
23  serious_python_darwin         	       0x105be8f18 object_vacall + 256
24  serious_python_darwin         	       0x105be8d80 PyObject_CallMethodObjArgs + 92
25  serious_python_darwin         	       0x105d0d0d4 PyImport_ImportModuleLevelObject + 1308
26  serious_python_darwin         	       0x105cd4cdc _PyEval_EvalFrameDefault + 23092
27  serious_python_darwin         	       0x105ccf0d8 PyEval_EvalCode + 272
28  serious_python_darwin         	       0x105ccba18 builtin_exec + 916
29  serious_python_darwin         	       0x105c3484c cfunction_vectorcall_FASTCALL_KEYWORDS + 160
30  serious_python_darwin         	       0x105be78ec PyObject_Vectorcall + 80
31  serious_python_darwin         	       0x105cd7984 _PyEval_EvalFrameDefault + 34524
32  serious_python_darwin         	       0x105ccf0d8 PyEval_EvalCode + 272
33  serious_python_darwin         	       0x105d27bc8 PyRun_StringFlags + 220
34  serious_python_darwin         	       0x105d2941c PyRun_SimpleString + 60
35  serious_python_darwin         	       0x105b9b540 specialized SeriousPythonPlugin.runPythonScript(script:) + 48
36  serious_python_darwin         	       0x105b9ae8c @objc SeriousPythonPlugin.runPythonFile(appPath:) + 64
37  Foundation                    	       0x18e769ff4 __NSThread__start__ + 716
38  libsystem_pthread.dylib       	       0x18d58d034 _pthread_start + 136
39  libsystem_pthread.dylib       	       0x18d587e3c thread_start + 8

...


Thread 22 crashed with ARM Thread State (64-bit):
    x0: 0x000000016bf4f7a8   x1: 0x0000000000000000   x2: 0x0000000000000000   x3: 0x0000000284000000
    x4: 0x0000000284028000   x5: 0x0000000000000000   x6: 0x000000016bf4f920   x7: 0x000000016bf4f940
    x8: 0x000000000000000a   x9: 0x0000000000084610  x10: 0x000000016becb120  x11: 0x000000016bed0000
   x12: 0x0000000000000000  x13: 0x0000000000000000  x14: 0x00000000000007fb  x15: 0x00000000c1422016
   x16: 0x000000018d587e40  x17: 0x00000000c1621815  x18: 0x0000000000000000  x19: 0x000000016bf4f940
   x20: 0x000000016bf4f910  x21: 0x0000000284000000  x22: 0x000000016bf4f908  x23: 0x0000000284000000
   x24: 0x0000000284028000  x25: 0x000060000207cf18  x26: 0x0000000000000048  x27: 0x0000000000000020
   x28: 0x0000000000000003   fp: 0x000000016bf4f790   lr: 0x0000000139171ce0
    sp: 0x000000016bf4f730   pc: 0x000000018d587e7c cpsr: 0x80001000
   far: 0x000000016becfff8  esr: 0x92000007 (Data Abort) byte read Translation fault

Flet version (pip show flet):

% pip show flet
Name: flet
Version: 0.22.0
Summary: Flet for Python - easily build interactive multi-platform apps in Python
Home-page: 
Author: Appveyor Systems Inc.
Author-email: [email protected]
License: Apache-2.0
Location: /Users/admin/Code/flet-testing2/venv/lib/python3.12/site-packages
Requires: cookiecutter, fastapi, flet-runtime, packaging, qrcode, uvicorn, watchdog
Required-by: 

Give your requirements.txt file (don't pip freeze, instead give direct packages):

flet
numpy

Operating system:

M1 Pro Mac - OS X Sonoma 14.1.2

Additional environment details:

Python 3.12.2

torablien avatar Apr 17 '24 20:04 torablien