Escher-js / SkimmedMilk

0 stars 0 forks source link

build on Mac #18

Closed psmuler closed 1 year ago

psmuler commented 1 year ago

ありがとうございます。これでアプリを一通り完成させることができました。macOSで再販可能なバイナリにビルドする方法を教えてください。

psmuler commented 1 year ago

ElectronアプリケーションをmacOS用の配布可能なバイナリにビルドするには、electron-builderというツールを使用します。まずは、プロジェクトに必要なパッケージをインストールしましょう。

  1. ターミナルを開いて、プロジェクトのルートディレクトリに移動してください。
  2. 以下のコマンドを実行して、electron-builderを開発用依存関係としてインストールします:
npm install --save-dev electron-builder
  1. プロジェクトのルートディレクトリにあるpackage.jsonファイルに、buildセクションを追加して、アプリケーションのビルド設定を定義します。また、scriptsセクションにbuildコマンドを追加します。package.jsonファイルは以下のようになります:
{
  "name": "your-app-name",
  "version": "1.0.0",
  "description": "Your app description",
  "main": "main.js",
  "scripts": {
    "start": "electron .",
    "build": "electron-builder --mac"
  },
  "build": {
    "appId": "com.yourcompany.yourapp",
    "productName": "YourAppName",
    "mac": {
      "category": "public.app-category.developer-tools",
      "target": "dmg"
    },
    "files": [
      "**/*"
    ]
  },
  "dependencies": {
    "electron": "^13.1.7"
  },
  "devDependencies": {
    "electron-builder": "^22.11.7"
  }
}

ここで、appIdproductNameなどのプロパティを、アプリケーションに合わせて適切に置き換えてください。

  1. ターミナルで以下のコマンドを実行して、macOS用の配布可能なバイナリをビルドします:
npm run build

ビルドが成功すると、distディレクトリが作成され、その中に.dmgファイルが生成されます。この.dmgファイルをmacOS上で配布・インストールすることができます。

psmuler commented 1 year ago

• Detected arm64 process, HFS+ is unavailable. Creating dmg with APFS - supports Mac OSX 10.12+ ⨯ Exit code: ENOENT. spawn /usr/bin/python ENOENT failedTask=build stackTrace=Error: Exit code: ENOENT. spawn /usr/bin/python ENOENT at /Users/ti/Documents/code/SkimmedMilk/node_modules/builder-util/src/util.ts:133:18 at exithandler (node:child_process:427:5) at ChildProcess.errorhandler (node:child_process:439:5) at ChildProcess.emit (node:events:513:28) at Process.ChildProcess._handle.onexit (node:internal/child_process:289:12) at onErrorNT (node:internal/child_process:476:16) at processTicksAndRejections (node:internal/process/task_queues:82:21)

psmuler commented 1 year ago

このエラーは、Pythonが見つからないことを示しています。macOS用のバイナリをビルドする際に、electron-builderがPythonを必要とすることがあります。Pythonがインストールされているか確認し、インストールされていない場合はインストールしてください。

macOSでは、Homebrewを使ってPythonを簡単にインストールすることができます。Homebrewがインストールされていない場合は、以下のコマンドを実行してインストールしてください:

/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"

次に、Homebrewを使ってPythonをインストールします:

brew install python

Pythonがインストールされたら、再度npm run buildコマンドを実行してみてください。問題が解決されるはずです。それでも問題が続く場合は、Pythonのパスが正しく設定されているか確認してください。通常、macOSではPythonのパスは/usr/local/bin/pythonになります。

psmuler commented 1 year ago

python3がインストールされています。pythonもインストールしたほうがいいですか

psmuler commented 1 year ago

すみません、それではPython 3がインストールされていることを前提に話を進めます。

electron-builderは、Python 2とPython 3の両方をサポートしていますが、デフォルトではPython 2を探してしまうことがあります。これが問題の原因となっている可能性があります。

以下の手順でPython 3をデフォルトのPythonとして設定し、再度ビルドを試みてみてください。

  1. ターミナルで以下のコマンドを実行し、シンボリックリンクを作成してください:
ln -s /usr/local/bin/python3 /usr/local/bin/python

このコマンドで、pythonと入力した際にPython 3が実行されるようになります。

  1. ターミナルを再起動し、再度npm run buildコマンドを実行してみてください。

これで問題が解決されることを願っています。それでも問題が続く場合は、お知らせください。

psmuler commented 1 year ago

先ほど作成したシンボリックリンクを削除してください

psmuler commented 1 year ago

シンボリックリンクを削除するには、unlinkコマンドを使用します。以下のコマンドをターミナルで実行して、先ほど作成したシンボリックリンクを削除してください:

unlink /usr/local/bin/python

これでシンボリックリンクが削除され、pythonと入力した際にPython 3が実行されなくなります。

psmuler commented 1 year ago

⨯ Exit code: ENOENT. spawn /usr/bin/python ENOENT failedTask=build stackTrace=Error: Exit code: ENOENT. spawn /usr/bin/python ENOENT npm run build をした際に参照する先をこちらで指定できませんか

psmuler commented 1 year ago

環境変数を設定することで、electron-builderがPython 3を使うように指定できます。

macOSの場合、以下のコマンドをターミナルで実行して、Python 3を使うように指定してからビルドを実行してみてください:

export ELECTRON_BUILDER_PYTHON_INTERPRETER=/usr/local/bin/python3
npm run build

これにより、electron-builderがPython 3を使用するようになり、ビルドプロセスが成功することを期待します。

psmuler commented 1 year ago

ELECTRON_BUILDER_PYTHON_INTERPRETERを指定しましたが変わりませんでした ⨯ Exit code: ENOENT. spawn /usr/bin/python ENOENT failedTask=build stackTrace=Error: Exit code: ENOENT. spawn /usr/bin/python ENOENT

psmuler commented 1 year ago

失礼しました。Pythonのパスが正しく設定されていない場合があります。

まず、which python3コマンドを使用して、正しいPython 3のパスを確認しましょう。

which python3

このコマンドは、Python 3の実行可能ファイルのパスを表示します。パスが表示されたら、それを使って環境変数を再設定します。

export ELECTRON_BUILDER_PYTHON_INTERPRETER=PYTHON3_PATH_HERE

上記のPYTHON3_PATH_HEREは、which python3コマンドで表示されたパスに置き換えてください。その後、再度ビルドを実行してみてください。

npm run build

これでビルドプロセスが成功することを期待します。

psmuler commented 1 year ago

ELECTRON_BUILDER_PYTHON_INTERPRETERを指定しましたがelectron-builderのpythonエントリポイントが指定したパスになっていません。 ⨯ Exit code: ENOENT. spawn /usr/bin/python ENOENT failedTask=build stackTrace=Error: Exit code: ENOENT. spawn /usr/bin/python ENOENT

psmuler commented 1 year ago

申し訳ありません。electron-builderELECTRON_BUILDER_PYTHON_INTERPRETER 環境変数ではなく、デフォルトの Python パスを参照し続けているようです。

代わりに、プロジェクトの package.json ファイルに環境変数を追加する方法を試してみてください。package.jsonscripts セクションを次のように編集します。

"scripts": {
  "build": "ELECTRON_BUILDER_PYTHON_INTERPRETER=/usr/local/bin/python3 electron-builder",
  "start": "electron ."
}

これで、npm run build を実行すると、electron-builder/usr/local/bin/python3 を使用するようになります。もしまだ問題がある場合、node_modules ディレクトリを削除してから再インストールし、再度ビルドしてみてください。

rm -rf node_modules
npm install
npm run build
psmuler commented 1 year ago

調べてみたところ、今はelectron forgeを使ってビルドをするようです。ご存じでしたか?

psmuler commented 1 year ago

はい、electron-forgeはElectronアプリケーションを構築、パッケージ化、公開するためのツールです。electron-builderと同様に、electron-forgeはアプリケーションの構築プロセスを簡素化し、プラットフォームごとのパッケージングやインストーラー作成をサポートしています。

electron-forgeを使ってプロジェクトを初期化し、アプリケーションをビルドするには、次の手順に従ってください。

  1. グローバルに electron-forge をインストールします。

    npm install -g electron-forge
  2. 新しいElectronプロジェクトを作成します(既存のプロジェクトには適用されません)。

    electron-forge init my-new-project
    cd my-new-project
  3. アプリケーションを起動します。

    npm start
  4. アプリケーションをビルドします。

    npm run make

これにより、各プラットフォーム用の実行可能ファイルやインストーラーが作成されます。ただし、既存のプロジェクトであれば、electron-forge のドキュメントに従って、手動で設定を追加する必要があります。詳細については、Electron Forge 公式ドキュメントを参照してください。

psmuler commented 1 year ago

じゃあなぜelectron builderでのうまくいかないプロセスを教えたんですか?

psmuler commented 1 year ago

すみません、その点については失礼しました。electron-builderelectron-forgeの両方が広く使われており、どちらもElectronアプリケーションのビルドとパッケージ化に適しています。しかし、今回のように問題が発生した場合は、代替手段を検討することが望ましいです。

electron-forgeが適切な選択肢であることが分かっていた場合、最初からその方法を提案すべきでした。ご不便をおかけし、申し訳ありません。今後は、最適な解決策を提案できるよう努めます。