Inital commit

This commit is contained in:
eric
2026-03-12 18:58:43 +01:00
commit 8555b02752
36 changed files with 3312 additions and 0 deletions

139
wails/tools/launch_app.go Normal file
View File

@@ -0,0 +1,139 @@
package main
import (
"flag"
"io"
"os"
"os/exec"
"path/filepath"
"runtime"
"strings"
)
func main() {
var binaryPath string
var buildAssetsPath string
var frontendURL string
var iconPath string
var mode string
flag.StringVar(&binaryPath, "binary", "", "")
flag.StringVar(&buildAssetsPath, "build-assets", "", "")
flag.StringVar(&frontendURL, "frontend-url", "http://127.0.0.1:9245", "")
flag.StringVar(&iconPath, "icon", "", "")
flag.StringVar(&mode, "mode", "run", "")
flag.Parse()
require(binaryPath != "", "missing --binary")
require(buildAssetsPath != "", "missing --build-assets")
environment := os.Environ()
if mode == "dev" && os.Getenv("FRONTEND_DEVSERVER_URL") == "" {
environment = append(environment, "FRONTEND_DEVSERVER_URL="+frontendURL)
}
if runtime.GOOS == "darwin" {
os.Exit(runDarwin(binaryPath, buildAssetsPath, iconPath, mode, environment))
}
command := exec.Command(binaryPath)
command.Stdout = os.Stdout
command.Stderr = os.Stderr
command.Stdin = os.Stdin
command.Env = environment
if err := command.Run(); err != nil {
if exitError, ok := err.(*exec.ExitError); ok {
os.Exit(exitError.ExitCode())
}
panic(err)
}
}
func runDarwin(binaryPath string, buildAssetsPath string, iconPath string, mode string, environment []string) int {
appName := strings.TrimSuffix(filepath.Base(binaryPath), filepath.Ext(binaryPath))
if appName == "" {
appName = "wails-app"
}
appDir := filepath.Join(os.TempDir(), appName+"-bazel-"+mode)
defer os.RemoveAll(appDir)
appContents := filepath.Join(appDir, "Contents")
appMacOS := filepath.Join(appContents, "MacOS")
appResources := filepath.Join(appContents, "Resources")
appBinary := filepath.Join(appMacOS, appName)
must(os.MkdirAll(appMacOS, 0o755))
must(os.MkdirAll(appResources, 0o755))
must(copyFile(binaryPath, appBinary, 0o755))
for _, candidate := range []string{
filepath.Join(buildAssetsPath, "darwin", "Info.dev.plist"),
filepath.Join(buildAssetsPath, "darwin", "Info.plist"),
} {
if mode != "dev" && strings.HasSuffix(candidate, "Info.dev.plist") {
continue
}
if _, err := os.Stat(candidate); err == nil {
must(copyFile(candidate, filepath.Join(appContents, "Info.plist"), 0o644))
break
}
}
if iconPath != "" {
if _, err := os.Stat(iconPath); err == nil {
must(copyFile(iconPath, filepath.Join(appResources, filepath.Base(iconPath)), 0o644))
}
}
if _, err := os.Stat("/usr/bin/codesign"); err == nil {
codesign := exec.Command("/usr/bin/codesign", "--force", "--deep", "--sign", "-", appDir)
_ = codesign.Run()
}
command := exec.Command(appBinary)
command.Stdout = os.Stdout
command.Stderr = os.Stderr
command.Stdin = os.Stdin
command.Env = environment
if err := command.Run(); err != nil {
if exitError, ok := err.(*exec.ExitError); ok {
return exitError.ExitCode()
}
panic(err)
}
return 0
}
func copyFile(sourcePath string, destinationPath string, mode os.FileMode) error {
sourceFile, err := os.Open(sourcePath)
if err != nil {
return err
}
defer sourceFile.Close()
destinationFile, err := os.Create(destinationPath)
if err != nil {
return err
}
defer destinationFile.Close()
if _, err := io.Copy(destinationFile, sourceFile); err != nil {
return err
}
return destinationFile.Chmod(mode)
}
func must(err error) {
if err != nil {
panic(err)
}
}
func require(condition bool, message string) {
if !condition {
panic(message)
}
}