MySQL Connector/C (libmysql) for iPhone/iPad

iPhone/iPadアプリでMySQLサーバに接続するためにライブラリをビルドしたときのメモです。開発環境はXcode 3.2.3 and iOS SDK 4.0.1を使用しています。とにかくライブラリを使いたいだけという人はここからダウンロードしてください。

●事前準備

CMakeをインストールしておいてください。OSX用のユニバーサルバイナリまたはソースコードから。

●Connector/Cのダウンロード

MySQL :: Download Connector/C (libmysqlclient)のSelect PlatformからSource Codeを選択しDownloadボタンを押します。ログインや登録をしたくなければ、「» No thanks, just take me to the downloads!」をクリックするとミラーの一覧が表示されるので適当な場所からダウンロードしてください。2010/8/3現在のバージョンは6.0.2となっています。

●CMakeによるXcodeプロジェクトの作成

ターミナルを起動し、mysql-connector-c-6.0.2.tar.gzを解凍してできたmysql-connector-c-6.0.2フォルダに移動してください。Finderで開いているフォルダをカレントディレクトリにしてターミナルウィンドウを開けるcdtoをインストールしておくと便利です。以下のコマンドを実行して数分待つとmysql-connector-c-6.0.2フォルダ内にlibmysql.xcodeprojができあがります。

cmake -G Xcode
Xcodeプロジェクトの作成

上で作成されたプロジェクトはOSX用なのでiPhone/iPad用にはそのままではビルドできません。また、かなり設定を変更してみてもエラーが消えなかったので、iPhoneOS用にきれいな設定を作り直し、コンパイルすべきファイルの一覧だけいただく、という方向でいきます。
Xcodeを起動し、新規プロジェクトを作成します。テンプレートはiPhone OSのLibraryから"Cocoa Touch Static Library"を選び、「選択...」ボタンをクリックして"mysqlclient"という名前を付けて適当な場所に保存します。この時できたmysqlclientフォルダ配下にmysql-connector-c-6.0.2フォルダを入れておきます(別にどこにあってもよいのですが、相対パスで指定しておいてまとめて移動可能にするためです)。

Xcodeのプロジェクトメニューから「プロジェクト設定を編集」を選択します。ビルドタブの「ヘッダ検索パス」に

$(SRCROOT)/mysql-connector-c-6.0.2/include

を設定します。また、「ユーザヘッダ検索パス」に

$(SRCROOT)/mysql-connector-c-6.0.2/extlib/yassl/taocrypt/include
$(SRCROOT)/mysql-connector-c-6.0.2/extlib/yassl/taocrypt/mySTL
$(SRCROOT)/mysql-connector-c-6.0.2/extlib/yassl/include

の3フォルダを設定します。

●ヘッダファイルの修正

mysql-connector-c-6.0.2/include/my_config.h
 HAVE_FDATASYNCの行をコメントアウトします。

#define HAVE_FDATASYNC 1

  ↓

//#define HAVE_FDATASYNC 1

mysql-connector-c-6.0.2/include/my_net.h
 ベースSDKが3.2でSimulator用にコンパイルが通らないので以下のように2行コメントアウトします。

#include <netinet/in_systm.h>
#include <netinet/in.h>
#include <netinet/ip.h>

  ↓

//#include <netinet/in_systm.h>
#include <netinet/in.h>
//#include <netinet/ip.h>

mysql-connector-c-6.0.2/include/my_global.h
 以下の行をarmでもコンパイルされるようにします。

#  if defined(__i386__) || defined(__ppc__)

  ↓

#  if defined(__i386__) || defined(__ppc__) || defined(__arm__)
●ソースファイルの登録

自分で作成したmysqlclientプロジェクトは開いたまま、最初にcmakeで作成したmysql-connector-c-6.0.2フォルダ内にあるlibmysql.xcodeprojをXcodeで開き見やすく並べておきます。
libmysqlプロジェクトのグループとファイルペインにあるlibmysqlの下にあるSourcesを展開してmysqlclientというグループを見つけクリックします。右側のファイル一覧ペインに表示されたファイルのどれかをクリックした後、⌘+Aですべてのファイルを選択します。
そしてこのファイル全体をドラッグしてmysqlclientプロジェクトのグループとファイルペインのmysqlclient配下の適当な場所(Other Sourcesあたり)にドロップし、ダイアログの追加ボタンを押せば完了です。

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

構成をReleaseにしてDeviceとSimulatorの両方でビルドした後、mysqlclientプロジェクトフォルダ内でターミナルから以下のコマンドを実行してユニバーサルバイナリを作成します。

lipo -create build/Release-iphone*/libmysqlclient.a -output libmysqlclient.a

ビルドフェーズとしてスクリプトの実行を追加してもよいでしょう。このプロジェクト自体を使用するアプリケーションのプロジェクトに登録して依存関係を設定する場合は、自動的に必要なバイナリがビルド/リンクされるので気にしなくてもかまいません。
このライブラリを使う場合に使用するヘッダは、

mysqlclient/mysql-connector-c-6.0.2/include

にあります。

●プロジェクトのダウンロード

以下の場所に設定済みプロジェクトを置いてあります。
http://www1.axfc.net/uploader/Li/so/73895.zip&key=libmysql