Files
zyt/app/packaging
2026-08-11 17:39:41 +08:00
..
2026-08-10 17:29:05 +08:00
2026-08-10 17:29:05 +08:00
2026-08-11 17:39:41 +08:00
2026-08-11 09:12:51 +08:00
2026-08-11 09:12:51 +08:00

Video-enabled desktop packaging

The spec creates an onedir build and embeds video_companion/dist as video_companion_dist. Explicit QtWebEngine imports activate PyInstaller's maintained PySide6 hooks; the build scripts then fail if the resulting artifact does not contain QtWebEngineProcess or Chromium .pak resources.

PySide6.QtMultimedia and PySide6.QtMultimediaWidgets are also explicit hidden imports. Their maintained PyInstaller hooks collect the Python extension modules, Qt6Multimedia/Qt6MultimediaWidgets DLLs, dylibs or frameworks, plugins/multimedia, and the platform media backends. The build scripts assert those frozen files before accepting an artifact.

Both build scripts launch the frozen executable twice. --media-smoke-test is handled by a PyInstaller runtime hook before the normal application entry point: it imports both multimedia modules, constructs QMediaPlayer, QAudioOutput, and QVideoWidget, checks that a decoder backend exposes formats, runs one offscreen event-loop turn, and returns non-zero on any failure. The existing --smoke-test then validates the packaged application bootstrap. Each process uses a temporary user/config directory, loopback-only proxy settings, and a 30-second deadline; a non-zero exit or an unhandled exception in its logs fails the build.

Run the build on the target operating system. PyInstaller cannot cross-build Windows and macOS artifacts.

Windows

.\scripts\build_windows.ps1

The default interpreter is .venv-build\Scripts\python.exe; override it with -Python C:\path\to\python.exe.

For the one-click release ZIP and SHA-256 manifest, run Build_DoctorWorkstation.bat. It prepares locked dependencies, invokes the build/file/smoke gates, and archives only after all gates pass.

macOS

bash ./scripts/build_macos.sh

The default interpreter is .venv-build/bin/python. For release signing, export MACOS_CODESIGN_IDENTITY before building. The generated app includes camera/microphone usage descriptions and the main-process entitlements in macos/entitlements.plist.

For the one-click release ZIP and SHA-256 file, use package_macos.command (or 一键打包.command). All root .command files and operational scripts/*.sh files must be tracked with mode 100755; scripts/check_macos_entrypoints.sh verifies both filesystem executability and Git index mode before packaging.

Before notarization, verify the nested QtWebEngineProcess.app signature and preserve its Qt-provided helper entitlements. Sign nested code before the outer app, then notarize and staple the final distribution artifact.

.env.example is a source/deployment template and is intentionally not included in the release archives. Production endpoints and non-secret policy values should be injected into the process environment by the managed launcher/MDM. Never place passwords, tokens, UserSig, TRTC SecretKey, or other long-lived credentials in a release archive.