wxWidgetsでMac OSアプリを開発する

 普段Mac OSデスクトップアプリの開発をしていない人だと、swift言語を学習するだけでも一苦労です。今回はCocoa API単独で開発するのではなく、wxWidgetsという、フレームワークライブラリを使ってMacOSアプリケーションを開発してみました。フレームワークで著名なものにQtがありますが、wxWidgetsのほうがライセンスが緩やかです。また、プログラムの構造がMFCに近く、独自のルールが多いQtよりも全体像を把握しやすいメリットもあります。

 このwxWidgetsをmac上のXCodeで使えるようにするための手順を覚え書きとして書き留めておくことにします。

1:wxMacアーカイブを解凍する
 こちらの公式サイトよりwxWidgetsのmac osバージョンであるwxMacをダウンロードして、アーカイブユーティリティを使って展開します。

2:ソースをコンパイルする
 srcフォルダ内に「wxWindows.xcodeproj」があるので、このファイルをXCodeで起動して、コンパイルを行うこともできますが、Universal Binary形式をビルドするのであれば、コマンドラインより行う必要があります。

 ターミナルを起動し、cdコマンドでwxMacがあるフォルダにたどり着いたら、「./configure --enable-universal_binary --disable-shared」+Enterで、コンパイルの下準備を行わせます。準備が完了し再度コマンドが入力できる状態になったら、「make」+Enterでコンパイルを実行。コンパイルが正常に終われば、libフォルダに拡張子.aの静的ライブラリが生成されているはずです。

 この状態で「./wx-config --cppflags」「./wx-config --libs」を入力して表示される文字列をそれぞれコピーしてテキストエディタなどで保存します。これらは後で解説するビルドオプションで使用します。

3:プロジェクトを作成する
 ではいよいよwxWidgetsを用いたmacアプリケーションを作ってみたいと思う。XCodeの新規プロジェクトで「Carbon C++ Application」を選択し、プロジェクトファイルを作成します。プロジェクトファイルにはwxWidgetsアプリケーションにおいて不要なファイル(xcconfig、xib、stringsファイルなど)が多々含まれているので、必要に応じてこれらを削除してください。

 「ターゲット」以下にある「*.app」と表示されているアイコンを右クリックして「情報を見る」をクリックするとビルドオプションウィンドウが開くので、この変更を行います。まずはウィンドウ左上の「構成」「表示」をともに「すべて」を選択します。

 もし、プリコンパイルヘッダファイルを消去しているのであれば、「GCC - Language→Prefix Header」の項目を削除。「パッケージング→プロダクト名」に生成するプログラム名を入力。もしリンクに「ZERO_LINK」の項目があるようならばそれをオフにします(最新のXCodeでは標準でオフ)。

 「GCC - Language→Other C Flags」に「./wx-config --cppflags」で取得した文字列を入力。「リンク→その他のリンカフラグ」に「./wx-config --libs」で取得した文字列から「-arch ppc -arch i386」を取り除いた文字列を入力(こうしないとリンク時に_mainが参照できないというエラーが生じます)。

 main.cppに以下のサンプルプログラムを入力して実行し、ウィンドウが画面に表示されていれば、導入は完了です。wxWidgetsにはサンプルプログラムが数多く用意されているので、あとはこれらのコードとにらめっこしながら学習していきましょう。
main.cpp
#include "wx/wx.h"
 
class MyApp: public wxApp
{
	virtual bool OnInit();

	wxFrame *frame;
};

IMPLEMENT_APP(MyApp)

bool MyApp::OnInit()
{
	wxBoxSizer* sizer = new wxBoxSizer(wxHORIZONTAL);
	frame = new wxFrame(NULL, -1,  wxT("Hello wxWidgets"), wxPoint(50,50), wxSize(800,600));

	frame->Show();
	return true;
}
 wxWidgetsはマルチプラットフォームに対応しているので、上記と全く同じコードでWindowsやLinuxでも同じ結果を返すプログラムが作成できます。開発はパワーのあるWindowsマシンで行い、最終的な動作確認はmac osで行うのもいいかもしれません。
2009/04/07