PostgreSQL Client Library (libpq) for iPhone/iPad
iPhone/iPadアプリでPostgreSQLサーバに接続するためにライブラリをビルドしたときのメモです。開発環境はXcode 3.2.3 and iOS SDK 4.0.1を使用しています。とにかくライブラリを使いたいだけという人はここからダウンロードしてください。
●libpqソースコードのダウンロード
libpqはPostgreSQL本体のソースコードに含まれていて、2010/8/6現在のバージョンは8.4.4です。postgresql-8.4.4.tar.bz2からダウンロードして解凍しておきます。
●libpqのビルド
libpqは以下のようにconfigureからダイレクトにarm用にmakeすることも可能ですが、ここではXcodeのプロジェクトを作成してビルドすることにします。
#!/bin/bash DEVROOT=/Developer/Platforms/iPhoneOS.platform/Developer SDKROOT=$DEVROOT/SDKs/iPhoneOS3.2.sdk PATH=$DEVROOT/usr/bin:/Developer/usr/bin:/usr/bin:/bin:/usr/sbin:/sbin DARWIN=arm-apple-darwin10 ARCH="-arch armv6 -arch armv7" ./configure --host=arm-apple-darwin --without-readline --disable-ipv6 CC=$DEVROOT/usr/bin/gcc-4.2 \ CPPFLAGS="-I$SDKROOT/usr/lib/gcc/$DARWIN/4.2.1/include/ -I$SDKROOT/usr/include/" \ CFLAGS="$CPPFLAGS $ARCH -pipe -no-cpp-precomp -isysroot $SDKROOT" CPP="$DEVROOT/usr/bin/cpp $CPPFLAGS" \ LD=$DEVROOT/usr/bin/ld && make -C src/interfaces/libpq
ライブラリに必要なファイルの一覧を得るためにosx用にビルドします。ターミナルを起動し、postgresql-8.4.4フォルダに移動して以下のコマンドを実行します。
./configure make -C src/interfaces/libpq ar -t src/interfaces/libpq/libpq.a
この結果、必要なファイルは以下のものであることがわかります。
fe-auth.o fe-connect.o fe-exec.o fe-misc.o fe-print.o fe-lobj.o fe-protocol2.o fe-protocol3.o pqexpbuffer.o pqsignal.o fe-secure.o libpq-events.o md5.o ip.o wchar.o encnames.o noblock.o pgstrcasecmp.o thread.o
●Xcodeプロジェクトの作成
Xcodeを起動し、新規プロジェクトを作成します。テンプレートはiPhone OSのLibraryから"Cocoa Touch Static Library"を選び、「選択...」ボタンをクリックして"pq"という名前を付けて適当な場所に保存します。この時できたpqフォルダ配下にpostgresql-8.4.4フォルダを入れておきます(別にどこにあってもよいのですが、相対パスで指定しておいてまとめて移動可能にするためです)。
以下はフォルダ名とその中にあるファイルのリストです。すべてプロジェクトに追加してください。
・postgresql-8.4.4/src/interfaces/libpq fe-auth.c fe-connect.c fe-exec.c fe-misc.c fe-print.c fe-lobj.c fe-protocol2.c fe-protocol3.c pqexpbuffer.c pqsignal.c fe-secure.c libpq-events.c
・postgresql-8.4.4/src/backend/libpq md5.c ip.c
・postgresql-8.4.4/src/backend/utils/mb wchar.c encnames.c
・postgresql-8.4.4/src/port noblock.c pgstrcasecmp.c thread.c
プロジェクトメニューから「プロジェクト設定を編集」を選び、ビルドタブで「ユーザヘッダ検索パス」に以下のパスを追加し、「再帰的」にチェックを入れておきます。
$(SRCROOT)/postgresql-8.4.4/src/
pq_Prefix.pchに以下の1行を追加します。
#define FRONTEND 1
もちろんプロジェクト設定の「その他のCフラグ(OTHER_CFLAGS)」に"-DFRONTEND=1"を指定してもかまいません。ここまででライブラリがビルド可能になっているはずです。
●ユニバーサルバイナリの作成
構成をReleaseにしてDeviceとSimulatorの両方でビルドした後、pqプロジェクトフォルダ内でターミナルから以下のコマンドを実行してユニバーサルバイナリを作成します。
lipo -create build/Release-iphone*/libpq.a -output libpq.a
ビルドフェーズとしてスクリプトの実行を追加してもよいでしょう。このプロジェクト自体を使用するアプリケーションのプロジェクトに登録して依存関係を設定する場合は、自動的に必要なバイナリがビルド/リンクされるので気にしなくてもかまいません。
このライブラリを使う場合に使用するヘッダは以下の2つです。
postgresql-8.4.4/src/interfaces/libpq/libpq-fe.h postgresql-8.4.4/src/include/postgres_ext.h
●プロジェクトのダウンロード
以下の場所に設定済みプロジェクトを置いてあります。
http://www1.axfc.net/uploader/Si/so/81229.zip&key=libpq