以前、Googleカレンダーにアクセスする記事を書いた。
[iOS] Googleカレンダーと連携する iOS編(1) 環境を整える
[iOS] Googleカレンダーと連携する iOS編(2) イベント操作

しかし、この記事で作成したプロジェクトをXcode7.1で起動し、Swift2にコンバートするとエラーが出てコンパイルに失敗してしまう。
そこで今回は現段階での環境設定の方法を見直してみる。
 
使用するXcodeのバージョンは7.1.1だ。
基本的な流れは公式に書かれているものに沿うようにするが、それだと新規に作成するプロジェクトのみのやり方になってしまうので、今回は既存のプロジェクトに追加する方法でやってみる。

公式
iOS Quickstart | Google Calendar API | Google Developers

準備
まずは既存のプロジェクトを用意しよう。
ここではGoogleCalendarSampleAppというSingle View Applicationが用意されているものとする。

Step1は省略する。

Step2 Google Client Libraryをダウンロードする
ダウンロードするファイルは本来はどこに置いても良いのだが、今回は相対パスで設定したいのでGoogleCalendarSampleAppフォルダの下にGoogleClientLibraryというフォルダを作成し、そこで公式に書かれているコマンドを実行して、諸々ダウンロードしよう。

完了したらこのようになっているはずだ。
GoogleCalendarEnviroment01

Step3 必要なプロジェクトを取り込む
公式ページではワークスペースを作成しているが、上述したように既存のGoogleCalendarSampleAppプロジェクトに取り込んでいく。
メニューから File > Add Files to "GoogleCalendarSampleApp" を選択して以下の2つのプロジェクトを取り込む。

GoogleClientLibrary/google-api-objectivec-client/Source/GTL.xcodeproj
GoogleClientLibrary/gtm-session-fetcher/Source/GTMSessionFetcherCore.xcodeproj

※公式では2つ目のファイル名はGTMSessionFetcher.xcodeprojとなっているが、これはおそらくミスだろう。

完了したらこのようになっているはずだ。
GoogleCalendarEnviroment02

次に上記のGTMSessionFetcherCoreプロジェクトを選択し、TARGETSの左下の+ボタンを押す。
追加するテンプレートの選択画面が現れるので、iOS > Framework & Library > Cocoa Touch Static Library を選択する。
GoogleCalendarEnviroment03
名前は公式と同じGTMSessionFetcherLibにしておこう。
また、Project:の欄がGTMSessionFetcherCoreとなっていることも確認しておこう。

作成したGTMSessionFetcherLibを選択し、Build Phases > Compile SourcesGTMSessionFetcherの.mファイルを全て追加しよう。
GoogleCalendarEnviroment04

次にGTLプロジェクトを選択し、TARGETSの中からGTLTouchStaticLibを選択する。
Build Phases > Link Binary with LibrarieslibGTMSessionFetcherLib.aを追加する。
GoogleCalendarEnviroment05
次に、Build Settings > User Header Search Paths../../gtm-session-fetcher/Source/を追加する。
GoogleCalendarEnviroment06
公式ではここは絶対パスを設定するように書いてあるが、上述したように相対パスで設定する。

次に、Build Settings > Preprocessor MacrosGTM_USE_SESSION_FETCHER=1を設定する。
GoogleCalendarEnviroment07
次にTARGETSGTLFrameworkを選択して、これを削除する。
GoogleCalendarEnviroment08
最後に、プロジェクトナビゲーターでGTLプロジェクトのGTL Source > Common > HTTPFetcherグループを削除する。
GoogleCalendarEnviroment09

 Step4 GoogleCalendarSampleAppの設定を行う
プロジェクトナビゲーターでGoogleCalendarSampleAppを選択し、Build Phases > Link Binary with Librariesに以下の3つを追加する。

libGTLTouchStaticLib.a
Security.framework
SystemConfiguration.framework

完了したらこのようになっているはずだ。
GoogleCalendarEnviroment10
次にBuild SettingsOther Linker Flags-ObjC -all_loadを設定する。
GoogleCalendarEnviroment11
次にUser Header Search Pathsに以下の2つの相対パスを追加する。

GoogleClientLibrary/gtm-session-fetcher/Source/
GoogleClientLibrary/google-api-objectivec-client/Source/**

GoogleCalendarEnviroment12
次に、Build Settings > Preprocessor MacrosGTM_USE_SESSION_FETCHER=1を設定する。
ここではDebug時のDEBUG=1が消えるとまずいので、DebugとReleaseにそれぞれ設定してやる。
GoogleCalendarEnviroment13
GoogleClientLibrary/google-api-objectivec-client/Source/OAuth2/Touch/GTMOAuth2ViewTouch.xibをプロジェクトナビゲーターにドラッグして追加する。
Copy items if neededにはチェックしなくて良い。

メニューから File > Add Files to "GoogleCalendarSampleApp" を選択してGoogleClientLibrary/google-api-objectivec-client/Source/Services/Calendar/Generated/にある以下の2つのファイルを取り込む。

GTLCalendar_Sources.m
GTLCalendar.h

その際、Bridging Headerを作るか聞かれるので、Create Bridging Headerを選択する。

作成されたBridging Headerに以下の2つのインポートを追加する。


Step4 サンプルコードをコピペする
公式ページからサンプルコードをViewController.swiftにコピペする。
また、クライアントIDとクライアントシークレットは自分のものを設定する。

ここでビルドするとエラーが2つ出ているはずだ。
1つ目のエラーはviewDidLoad()の中。
これを以下のようにして修正する。

2つ目のエラーはcreateAuthController()の中。
これを以下のようにして修正する。

これでビルドできるようになったはずだ。

実行してみよう。
GoogleCalendarEnviroment14
ここでログインすればカレンダーの予定が表示されるはずだ。