Ocideck/docs/BUILD.md
Brenno de Winter 2d8be6f0dd
Some checks failed
CI / Format · Analyze · Test (push) Has been cancelled
CI / Format · Analyze · Test (pull_request) Has been cancelled
Add project docs, EUPL licence, and open-source licence check
Documentation & licensing:
- Add the EUPL-1.2 licence (LICENSE.md) and set the project licence; refresh
  the README (name origin wink, updated feature list, documentation index).
- Add CONTRIBUTING, SECURITY, CODE_OF_CONDUCT, CHANGELOG, AUTHORS, and
  THIRD_PARTY_NOTICES, plus docs/ (ARCHITECTURE, BUILD, USER_GUIDE, SHORTCUTS,
  LICENSE_COMPLIANCE) and .github/ (CI workflow, issue/PR templates).
- Bring docs/FILE_FORMAT.md in line with current behaviour (code & chart
  slides, per-slide TLP comment, annotation .ink.json sidecar, chart data/ CSVs).

Open-source compliance:
- Add tool/check_licenses.dart and a `make licenses` target (wired into
  check-full and CI) that verifies every resolved dependency uses a recognised
  open-source licence. A scan of all 151 packages and bundled assets found only
  OSI-approved licences.

Charts (Fase 1.1):
- Replace the chart CSV textarea with an in-app editable data grid (editable
  series/labels/values, add/remove row & column, read-only when linked).
- Centralize the linked-CSV directory name (`data/`) in a shared constant.

Also normalize formatting repo-wide with `dart format` and fix one
curly-braces lint, so `make check` and CI are green.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-07 12:19:56 +02:00

2.8 KiB

OciDeck — Build & Release

How to build OciDeck from source and produce distributable apps.

Prerequisites

  • Flutter 3.44+ (stable), Dart 3.12+. Check with flutter --version.
  • A desktop toolchain for your target:
    • macOS: Xcode + CocoaPods.
    • Windows: Visual Studio with the "Desktop development with C++" workload.
    • Linux: see Flutter's Linux desktop prerequisites (GTK, clang, ninja, etc.).
  • Enable the desktop target once if needed, e.g. flutter config --enable-macos-desktop.

Get dependencies

make setup        # flutter pub get

OciDeck uses two vendored plugin forks under third_party/, wired through pubspec.yaml (a path dependency for desktop_multi_window) and dependency_overrides (screen_retriever_macos, and a pin of video_player_avfoundation). flutter pub get resolves these automatically — no extra steps. See ARCHITECTURE.md.

Run

flutter run -d macos     # or -d windows / -d linux

Quality gate

make check        # format-check + flutter analyze + full test suite

Building release apps

flutter build macos --release
flutter build windows --release
flutter build linux --release

Artifacts land under build/<platform>/.

macOS notes

  • Swift Package Manager is disabled for this project (flutter:config: enable-swift-package-manager: false in pubspec.yaml); CocoaPods is used instead. The "plugin does not support Swift Package Manager" message during a build is therefore expected and harmless.

  • video_player_avfoundation is pinned (see dependency_overrides) because a newer release ships a Swift module whose private Objective-C dependency isn't packaged correctly by CocoaPods on recent Xcode.

  • CocoaPods + Ruby locale: on some setups pod install (run by flutter build macos) fails with Encoding::CompatibilityError / "Unicode Normalization not appropriate for ASCII-8BIT". This is a Ruby/CocoaPods locale issue, not a project problem. Fix it by forcing a UTF-8 locale:

    export LANG=en_US.UTF-8 LC_ALL=en_US.UTF-8
    flutter build macos --release
    
  • Distribution: code-sign and notarize the .app for distribution outside the App Store (Developer ID + notarytool). This is environment-specific and not automated here.

Windows / Linux notes

  • Windows: distribute the contents of build/windows/x64/runner/Release/ (or package with MSIX/an installer).
  • Linux: distribute build/linux/x64/release/bundle/ (or package as a Flatpak/AppImage/Snap as you prefer).

CI

.github/workflows/ci.yml runs make check on Ubuntu for every push and pull request. It does not build native binaries; it validates formatting, static analysis, and the test suite (which are platform-independent).