Pythonで、MacやWindowsの実行形式を作成するには、Pyinstallerを利用しています。
作成したアプリをダブルクリックした時、Windowsでは問題なく起動するのに、Macでは、ちっとも起動しないという現象に悩まされていましたが、ようやく原因が分かったので、記載しておきたいと思います。
原因の特定方法
起動しない原因は様々なので、まずは、原因を特定する必要があります。
私の場合、
ダブルクリックで起動しようとすると、一瞬起動して画面下部にアイコンが表示されるけど、すぐに消えてしまう。
ダブルクリックではなく、実体の方をコンソールから起動するとちゃんと起動する。
という現象となっていました。
「実体の方をコンソールから起動すると」というのは、GUIアプリだと、
pyinstaller ./main.py –noconsole
のように、–noconsoleオプションでビルドしますが、すると、main.appとmainというディレクトリが生成されます。
main.appの中身は、Contentsが格納されれいますが、その中のunix実行形式(main)をコンソールで以下のように直接起動すると、起動可能でした。
main.app/Contents/MacOS/main
ただし、その場合、コンソールにデバッグ文などの標準出力が表示されてしまいます。
このような状態であれば、おそらく、私と同じ理由で起動できないと思われます。
起動できない原因と解決方法
この場合、起動できない原因は、ファイル権限がないため(file permission)、かつ、ファイルパスを相対パスで指定しているためでした。
プログラムの中で、ログ出力等で、ファイル出力をしていたのですが、そのファイルハンドルの指定が、相対パスになっていると、権限がないため、メッセージなしで落ちていた感じです。
これを、相対パスではなく、絶対パスを作成して指定することで、起動時に、「書き込みを行っていいですか?」という旨のメッセージが表示されて、起動できるようになりました。
相対パスだと、このメッセージすら表示されずに、そのまま落ちているので、原因不明で起動できないように見えていました。