2018年3月25日日曜日

iOSでSpatiaLiteを使いたいだけなんだけど

spatialiteDBKitというのを導入すればいいだけなんだけど、2週間ぐらいかかったかな。
白紙の状態から始めた場合の手順を、以下に記録します。

1. Apple Developer SiteからcomandlineToolをインストール

以下5.のgeosのくだりまでは、
https://github.com/andreacremaschi/SpatialDBKit
のHow to Useの通り。

2. brewがない人は、以下からインストール
https://brew.sh/index_ja

3. automake等をインストール
brew install automake autoconf libtool

4. podがない人は、
Rubyを最新版にしておく。
sudo gem update --system
podをインストール。
sudo gem install -n /usr/local/bin cocoapods

5. 所望のプロジェクト下で、Podfileを作成
pod initでPodfileを作る。
・# use_frameworks!は、コメントアウトのまま。
 frameworkにすると、#importや#includeを10ヶ所ぐらい書き換えないといけなくなる。
・pod 'SpatialDBKit'の前に、pod 'geos', '~> 3.4.2'としておく。
 geosの3.5.0や3.5.1ではうまくいかないため!

6. pod installを実行。

7. 出来上がった .xcworkspaceファイルをXcodeでオープン。

8. ビルドが通らない。
How To Useの通り、spatialite.cの#includeを変更。

9. SpatialDatabase.mがおかしい。
#import <spatialite.h>を加えれば、ビルドは通るが、EXC_BAD_ACCESSエラーに見舞われる。
Podではなぜか最新版のSpatialDatabase.mが取得されないので、手動で入れ替え。

10. ようやく動くようになる。