Skip to content

fix: Intel Mac でバックエンドが起動できず「処理が予期せず終了しました」「起動に失敗しました」が連続表示される #46

@KimMaru10

Description

@KimMaru10

事象

Intel Mac で Backnote.app を起動すると、以下の順でアラートが表示される:

  1. 「処理が予期せず終了しました。アプリを再起動してください。」 → OK
  2. 「起動に失敗しました。アプリを再起動してください。」 → OK
  3. その後ウィンドウは表示されるが、バックエンドは死んだままで API はすべて ERR_CONNECTION_REFUSED 状態

原因

scripts/build-backend.sh の darwin/amd64 (Intel Mac 向け) ビルドが CGO_ENABLED=0 でビルド されており、mattn/go-sqlite3 が動作しない。

実際に backend/dist/darwin/x64/backnote-backend を直接実行すると以下のエラーで即終了する:

```
database init: database open:
Binary was compiled with 'CGO_ENABLED=0', go-sqlite3 requires cgo to work. This is a stub
```

otool -L でも libSystem.B.dylib の current version が 0.0.0 (= CGO 無効ビルドの典型) になっており、arm64 バイナリ (current version 1351.0.0) と挙動が異なる。

なぜ CGO=0 になっているか

Go はクロスコンパイル時 (Apple Silicon → Intel Mac は GOARCH 切り替えでクロス扱い) にデフォルトで CGO_ENABLED=0 になるため。scripts/build-backend.sh で明示指定していないことが原因。

2 つのアラートが順番に出る理由

src/main/backend.ts の `exit` イベント (code != 0) で 1 つ目のアラートが出て、ユーザーが OK した後も `waitForHealth` のリトライ (30 回 × 500ms) が継続し、15 秒後タイムアウトで reject → `src/main/index.ts` の catch で 2 つ目のアラートが出る。

修正方針

scripts/build-backend.sh の darwin/amd64 ビルドで明示的に CGO を有効化し、Apple Silicon マシンからでも x86_64 ターゲットの CGO ビルドができるように CC / CXX を指定する:

```bash
CGO_ENABLED=1 GOOS=darwin GOARCH=amd64
CC="clang -arch x86_64" CXX="clang++ -arch x86_64"
go build -o dist/darwin/x64/backnote-backend ./cmd/main.go
```

arm64 はネイティブビルドのため既に CGO=1 で動いている。

影響範囲

  • Intel Mac 利用者全員 (起動毎にアラート 2 回、かつ DB アクセス不可で実質機能しない)
  • v1.1.1 の Intel Mac dmg は再配布が必要

関連

  • src/main/backend.ts:80-91 (exit ハンドラのアラート)
  • src/main/index.ts:81-90 (startBackend catch のアラート)
  • scripts/build-backend.sh:14-15 (darwin/amd64 ビルド)

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions