LoginSignup
0
0

More than 5 years have passed since last update.

Dで作ったプログラムをOSXのアプリケーションにする

Last updated at Posted at 2015-12-30

D+GLFW3のプログラムをアプリケーションバンドルにしようとしたらハマったのでメモ。

まずこういう構成でバンドルを作る。

Application.app
 \_Contents
   \_Info.plist
   \_MacOS
     \_実行ファイル
   \_Resources
     \_dylibとか
     \_その他リソース

それで起動すると一瞬で落ちる。どうやらdylibが読み込めてないらしい。これによると通常の方法でアプリケーションを起動するとカレントワーキングディレクトリが/になってしまうらしい。このせいでdylibやリソースなどの読み込みがうまくいっていなかった。そこで、プログラム中でchdirしてやる。

import std.path : dirName;
import std.file : chdir;
void main(string[] args) {
  chdir(args[0].dirName.dirName ~ "/Resources");

  ...
}

これで一応動いたから良しとする。条件コンパイルを使えばマルチプラットフォームでも対応できる。

void main(string[] args) {
  version (OSX) {
    chdir(args[0].dirName.dirName ~ "/Resources");
  }

  ...
}

余談

GLFW3ではOSXのアプリケーションバンドルから起動されている時glfwInit内でカレントワーキングディレクトリをResourcesにするらしい。でもDerelictGLFW3を使うときはdylibの読み込み時にchdirしないといけないので意味がなかった。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0