以前、AndroidでのGoogleカレンダーとの連携方法を書いた。

[Android] Googleカレンダーと連携する(1) カレンダーの参照
[Android] Googleカレンダーと連携する(2) カレンダーの追加
[Android] Googleカレンダーと連携する(3) イベントの操作

今回はiOSでのGoogleカレンダーと連携してみる。

基本的にはGoogleのページである

iOS Quickstart | Google Calendar API | Google Developers

に沿って進めていけばいいのだが、途中でわかりにくいところもあるので、若干のアレンジを加える。
なお、Step 1のGoogle Developers Consoleでの作業についてはここでは割愛する。

Step 2. ライブラリをダウンロードしよう。
Macならsvnがデフォルトで入っているはずなので、公式にあるコマンドをターミナルへコピペして実行すれば問題なくダウンロード出来るはずだ。

それではサンプルの作成を始めよう。

Step 3-1. まずは新規プロジェクトでSingle View Applicationを選択する。
google_calendar_ios1_1
ここではGoogleCalendarSampleという名前で作成する。

Step 3-2. ここで少し、元ページにアレンジを加える。
ダウンロードしたソース一式はどこに置いておいても良いことになっているが、他のMac等で実行することを考慮して、Sourceというディレクトリを今回作成したプロジェクトのディレクトリ直下に丸々コピーして、GoogleClientLibraryという名前にリネームしよう。
google_calendar_ios1_2
次にそのディレクトリの中にあるGTL.xcodeprojをXcode上の今回作成したプロジェクトにドラッグする。
するとこのようになるはずだ。
google_calendar_ios1_3
Step3-3 〜 3-4. 今回作成したプロジェクトのプロジェクトナビゲーターからBuild Phasesを選択し、Link Binary With Librariesを開く。
左下の+ボタンを押して幾つかのライブラリを追加する。
google_calendar_ios1_4
上の方にlibGTLTouchStaticLib.aというのがあるので、これを追加する。
google_calendar_ios1_5
同様にしてSecurity.frameworkとSystemConfiguration.frameworkを追加する。
最終的にはこのようになっているはずだ。
google_calendar_ios1_6

Step 3-5. Build Settingsタブを選択し、検索窓にOther Linker Flagsと打ち込もう。
すると以下のようにOther Linker Flagsが表示されるので、右側をダブルクリックしてポップアップウィンドウを開く。
google_calendar_ios1_7
左下の+ボタンを押すと入力できるようになるので、そこに -ObjC -all_load と入力する。
その後、ポップアップウィンドウの外側をクリックすると以下のようになるはずだ。
google_calendar_ios1_8
次に、同じくBuild Settingsタブの検索窓にSearch Pathsと打ち込もう。
Search Pathsというカテゴリの中にUser Header Search Pathsという項目があるので、その右側をダブルクリックすると、先ほど同様にポップアップウィンドウが表示されるので、そこにライブラリのディレクトリ名であるGoogleClientLibraryと入力する。
ここで注意しなくてはならない点がある。
右側の選択をrecursiveにしなくてはいけない。
これを忘れるとビルドが正常に行えない。
google_calendar_ios1_9

Step 3-6. ライブラリのディレクトリのOAuth2/Touchというディレクトリの中にGTMOAuth2ViewTouch.xibというファイルがあるので、これをプロジェクトにドラッグして追加する。

Step 3-7. ライブラリのディレクトリのServices/Calendar/Generatedというディレクトリの中にあるGTLCalendar.hとGTLCalendar_Sources.mをプロジェクトに追加する。
すると、以下のように Would you like to configure an Objective-C bridging header ?と聞かれるので、Yesを選択する。
google_calendar_ios1_10
ライブラリはObjective-Cで書かれているので、Swiftで使えるようにするわけだ。

プロジェクト内にGoogleCalendarSample-Bridging-Header.hというファイルが自動的に作られているので、その中に以下のインポートを追加しよう。
#import "GTMOAuth2ViewControllerTouch.h"
#import "GTLCalendar.h"
これでStep 3は完了だ。
ビルドしてエラーがないことを確認しよう。

Step 4. 元のページのソースコードを自分のプロジェクトのViewControllerにコピペする。
次に、kClientIDとkClientSecretの値を自分のものに書き換える。
これらはGoogle Developers Consoleで入手したものを使用する。

次にscopesという変数の値を以下のように変更する。

これはイベントを追加したりするための権限だ。
デフォルトのkGTLAuthScopeCalendarReadonlyだと読み込みのみなので、次回の記事に備えてこのようにしておく。

それでは実行してみよう。
Googleのログイン画面が出てきて、ログインすると直近のイベントが10個表示されたはずだ。
これで全て完了だ!

と言いたいところだが、このGoogleのサンプルソースには問題がある。
今のままだとアプリを起動するたびにログインを求められる。

実はサンプルソースにはログインに成功したら、その情報をキーチェーンに保存する処理が入っているのだが、そのキーチェーンの情報を認証に使わないようになっている。

なので、viewDidLoad()内の一番最後の処理を以下のように変更する。

これで毎回ログインしなくても良くなったはずだ!