2012年12月29日土曜日

Postgresql Library for iPhone

iPhoneアプリでpostgresqlにアクセスしたときのメモ。

開発環境 Xcode4.5.2 IOS6.0

ここPostgreSQL Client Library (libpq) for iPhone/iPadを参考にして作成(まんまパクr)。

libpqのダウンロード

libpqが含まれるpostgresqlのソースコードをダウンロード
PostgreSQLソースコードから好きなバージョンをダウンロード
私は2012/12/27現在最新のpostgresql-9.2.2.tar.bz2をダウンロードしました

libpqのビルド

ターミナルを起動し、ダウンロードしてきたpostgresql-9.2.2に移動し、以下のコマンドを起動

./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
chklocale.o
inet_net_ntop.o
noblock.o
pgstrcasecmp.o
thread.o
ip.o
md5.o
encnames.o
wchar.o

Xcodeプロジェクト作成

Xcode起動➡新規プロジェクト➡iOSのFramework & LibraryのCocoa Touch Static Libraryを選択➡ProductNameは適当に"psqlv9"にチェックには何も入れず、作成。(このときできたpsqlv9フォルダにpostgresql-9.2.2フォルダを入れておく、後のユーザヘッダ検索パスでの参照を楽にするため)

以下のファイルをプロジェクトに追加
postgresql-9.2.2/src/interfaces/libpq
fe-auth.c
fe-connect.c
fe-exec.c
fe-lobj.c
fe-misc.c
fe-print.c
fe-protocol2.c
fe-protocol3.c
fe-secure.c
libpq-events.c
pqexpbuffer.c
pqsignal.c
postgresql-9.2.2/src/backend/libpq
md5.c
ip.c
postgresql-9.2.2/src/backend/utils/mb
wchar.c
encnames.c
postgresql-9.2.2/src/port
chklocale.c
inet_net_ntop.c
noblock.c
pgstrcasecmp.c
thread.c
Project➡TARGETS➡Build Setting➡Search Paths➡User Header Search Pathsに以下のパスを追加
$(SRCROOT)/postgresql-9.2.2/src/
non-recursiveをrecursineにして再帰的にする。User Header Search Pathsのところをクリックしてたら出てくるよ。

pq_Prefix.pchに以下の1行を追加します。

#define FRONTEND 1

ユニバーサルバイナリの作成

上のツールバーのProduct➡Edit Schemeで構成をReleaseにしてDeviceとSimulatorの両方でビルド(Run)

psqlv9プロジェクトフォルダ内でターミナルから以下のコマンドを実行してユニバーサルバイナリを作成
lipo -create /Users/自分のユーザ名/Library/Developer/Xcode/DerivedData/作成したプロダクト名(psqlv9)-長い英文字列/Build/Products/Release-iphoneos/libpsqlv9.a /Users/自分のユーザ名/Library/Developer/Xcode/DerivedData/作成したプロダクト名(psqlv9)-長い英文字列/Build/Products/Release-iphonesimulator/libpsqlv9.a  -output libpsql.a

自分は特に他の設定はいじってないのでデフォルトの状態です。Productの.aファイルを確認したらどこに作成されているかは分かると思います。おそらく作成場所も指定もできるはずなので分かる人は好き勝手にやってください。

これでライブラリ作成は終了!

では使ってみよう! 適当に新しいプロジェクト作って先ほど作成したlibpsql.aを追加しFrameworksフォルダに入れておく、 ProjectのTARGETSのBuild Phasesタブを選択、Link Binary With Librariesにlibpsql.aがあるか確認

postgresql-9.2.2/src/interfaces/libpq/libpq-fe.h
postgresql-9.2.2/src/include/postgres_ext.h
を追加し、この二つのヘッダーファイルを忘れずimportする。

0 件のコメント:

コメントを投稿