iOSアプリでGoogleのDrive API for iOSを利用してみます。
iOS:9.0.2
Xcode:7.0.1
Swift:2.0
「Google Developers」を参考に、というかほぼそのままの内容ですが整理してみました。
1.GoogleのAPIを利用可能にします。
「Google Developers Console」でプロジェクトを作成します。
作成したプロジェクトの「APIと認証」ー「API」で「Drive API」を有効にします。
次に「APIと認証」ー「認証情報」の「OAuth同意画面」を開き、「メールアドレス」と「サービス名」を入力し「保存」します。
「認証情報」の「認証情報を追加」の「OAuth2.0クライアントID」を選択します。
表示される画面で「その他」を選択し、「名前」を入力して「作成」します。
※「iOS」ではなく「その他」を選択するようです。
2.ライブラリのダウンロード
「Google Developers」に記載されてるSVNのアドレスからダウンロードします。
3.Xcodeプロジェクトへのライブラリの追
ダウンロードした「Source」フォルダに入っている「GTL.xcodeproj」をXcodeのプロジェクトへドロップします。
XcodeプロジェクトのTARGETを選択し、「Build Phases」の「Link Binary With Libraries」の「+」から「libGTLTouchStaticLib.a」を追加します。同様に「Security.framework」と「SystemConfiguration.framework」を追加します。
次に「Build Settings」の「Linking」ー「Other Linker Flags」へ「-ObjC -all_load」を入力します。
同じ「Build Settings」の「Search Paths」ー「User Header Search Paths」にダウンロードしたライブラリの「Source」フォルダへの絶対パスを入力します。また、入力欄の横を「recursive」にします。(検索対象を再帰的にすると思われます)
ダウンロードしたライブラリの「OAuth2」ー「Touch」にある「GTMOAuth2ViewTouch.xib」をXcodeプロジェクトにドラッグします。
※Xcode7からは「Supporting Files」のグループが無くなっています。(作成してもいいと思います)
同様にダウンロードしたライブラリの「Services」ー「Drive」ー「Generated」にある「GTLDrive.h」と「GTLDrive_Sources.m」をXcodeプロジェクトにドラッグします。Bridging-Headerを作成するか聞かれるため「Create Bridging Header」で作成します。
作成されたBridging-Headerにimportを追加します。
#import "GTMOAuth2ViewControllerTouch.h" #import "GTLDrive.h"
4.ライブラリソースコードの修正(2015.10.14時点)
Google Developersのサンプルで実行しようとすると「Multiple methods named ‘initWithArray:’ found」のエラーになります。stack overflowなどを参考に以下の修正を行いました。
[GTMGatherInputStream.m]
修正前(20行目から)
+ (NSInputStream *)streamWithArray:(NSArray *)dataArray { return [[[self alloc] initWithArray:dataArray] autorelease]; }
修正後
+ (NSInputStream *)streamWithArray:(NSArray *)dataArray { return [[(GTMGatherInputStream*)[self alloc] initWithArray:dataArray] autorelease]; }
[GTMOAuth2Authentication.h]と[GTLService.h]
修正前
#ifndef GTM_USE_SESSION_FETCHER #define GTM_USE_SESSION_FETCHER 1 #endif
修正後
#ifndef GTM_USE_SESSION_FETCHER #define GTM_USE_SESSION_FETCHER 0 #endif
「GTL.xcodeproj」の「Build Settings」にある「Apple LLVM 7.0 – Warnings – All languages」ー「Deprecated Functions」を「NO」に変更します。
5.サンプルコードの修正
Google Developersに記載のサンプルソース(ViewController)をそのまま貼り付けるとエラーになったため、こちらも修正しました。
[ViewController.swift]
修正前
output.autoresizingMask = UIViewAutoresizing.FlexibleHeight | UIViewAutoresizing.FlexibleWidth
修正後
output.autoresizingMask = UIViewAutoresizing.FlexibleHeight.union(UIViewAutoresizing.FlexibleWidth)
修正前
let scopeString = " ".join(scopes)
修正後
let scopeString = scopes.joinWithSeparator(" ")
これでサンプルソースを実行してGoogle Driveへアクセス出来ました。