Skip to main content
This guide covers building Icarus for production on Windows, Linux, and macOS.

Development Builds

For development, use debug builds which compile faster:
fvm flutter build linux --debug
The debug build output locations:
  • Linux: build/linux/x64/debug/bundle/icarus
  • Windows: build/windows/x64/runner/Debug/icarus.exe
  • macOS: build/macos/Build/Products/Debug/icarus.app

Production Builds

Linux

Build a release bundle:
fvm flutter build linux --release
Output: build/linux/x64/release/bundle/ The bundle directory contains:
  • icarus - Executable binary
  • lib/ - Shared libraries
  • data/ - Assets and resources
Distribute the entire bundle directory, not just the executable.

Windows

For Windows, you can build either a standalone executable or an MSIX package.

Standalone Executable

fvm flutter build windows --release
Output: build/windows/x64/runner/Release/

MSIX Package (Microsoft Store)

Icarus uses the msix package for Microsoft Store distribution.
1

Install MSIX tool

dart pub global activate msix
2

Configure pubspec.yaml

The MSIX configuration is in pubspec.yaml:56:
msix_config:
  display_name: "Icarus: Valorant Strategies & Line ups"
  publisher_display_name: Dara A
  identity_name: DaraA.IcarusValorantStrategiesLineups
  publisher: CN=39055448-F6AA-42E9-91F6-9CF8828C444C
  logo_path: E:\Projects\icarus\windows\runner\resources\app_icon.ico
  msix_version: 3.1.0.0
  file_extension: .ica
  store: true
3

Build MSIX

fvm dart run msix:create
Output: build/windows/x64/runner/Release/*.msix

macOS

Build for macOS:
fvm flutter build macos --release
Output: build/macos/Build/Products/Release/icarus.app For distribution, create a DMG:
hdiutil create -volname Icarus -srcfolder build/macos/Build/Products/Release/icarus.app -ov -format UDZO icarus.dmg

Version Management

Icarus includes a PowerShell script for automated version bumping on Windows.

Bump Version Script

File: scripts/bump_version.ps1 The script updates versions across pubspec.yaml and lib/const/settings.dart, then builds the MSIX.
Increment patch version (e.g., 3.1.0 → 3.1.1):
powershell -ExecutionPolicy Bypass -File scripts/bump_version.ps1 -Bump patch
The script:
  1. Reads current version from pubspec.yaml
  2. Increments based on bump type
  3. Updates version field in pubspec.yaml
  4. Updates msix_version field in pubspec.yaml
  5. Updates versionNumber and versionName in lib/const/settings.dart
  6. Runs dart run msix:create
  7. Opens the output folder
The script requires all version fields to be synchronized before running. If there’s a mismatch, it will error and require manual fixes.

Manual Version Updates

If you need to update versions manually:
  1. pubspec.yaml (line 6):
    version: 3.1.0+38  # version number
    
  2. pubspec.yaml (line 62, MSIX only):
    msix_version: 3.1.0.0  # version number
    
  3. lib/const/settings.dart:
    static const int versionNumber = 38;  // build number
    static const String versionName = "3.1.0";  // version string
    

Alternative Build Script

There’s also a Dart-based build script at build_script.dart:1 for cross-platform use:
fvm dart run build_script.dart <version> <build_number>
Example:
fvm dart run build_script.dart 1.7.2 12
This updates version strings but doesn’t build the app.

Code Signing

Windows

For Microsoft Store submissions, the MSIX must be signed with a valid certificate. The publisher certificate is configured in pubspec.yaml:60.

macOS

For App Store or notarized distribution:
codesign --deep --force --verify --verbose --sign "Developer ID Application: Your Name" icarus.app

Build Optimization

Release Flags

For smaller binaries, use:
fvm flutter build <platform> --release --obfuscate --split-debug-info=debug-info/
  • --obfuscate: Obfuscates Dart code
  • --split-debug-info: Splits debug symbols for crash reporting

Tree Shaking

Flutter automatically removes unused code in release builds.

File Associations

Icarus registers the .ica file extension:
  • Windows: Configured in pubspec.yaml:63 for MSIX
  • Linux/macOS: Requires manual MIME type registration

Troubleshooting

MSIX Build Fails

Ensure the logo path in pubspec.yaml:61 points to a valid .ico file:
logo_path: E:\Projects\icarus\windows\runner\resources\app_icon.ico

Linux Missing Libraries

If the app fails to launch, check for missing shared libraries:
ldd build/linux/x64/release/bundle/icarus
Install any missing dependencies.

macOS Gatekeeper

For unsigned builds, users may need to bypass Gatekeeper:
xattr -cr icarus.app

Build docs developers (and LLMs) love