iOSアプリでGoogleのDrive API for iOSの利用(Swift)

Pocket
LinkedIn にシェア
LINEで送る
Facebook にシェア

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_googledrive_01
表示される画面で「その他」を選択し、「名前」を入力して「作成」します。
※「iOS」ではなく「その他」を選択するようです。
ios_googledrive_02
ios_googledrive_03

2.ライブラリのダウンロード
Google Developers」に記載されてるSVNのアドレスからダウンロードします。

3.Xcodeプロジェクトへのライブラリの追
ダウンロードした「Source」フォルダに入っている「GTL.xcodeproj」をXcodeのプロジェクトへドロップします。
ios_googledrive_04
ios_googledrive_05

XcodeプロジェクトのTARGETを選択し、「Build Phases」の「Link Binary With Libraries」の「+」から「libGTLTouchStaticLib.a」を追加します。同様に「Security.framework」と「SystemConfiguration.framework」を追加します。
ios_googledrive_06
ios_googledrive_07

次に「Build Settings」の「Linking」ー「Other Linker Flags」へ「-ObjC -all_load」を入力します。
ios_googledrive_08

同じ「Build Settings」の「Search Paths」ー「User Header Search Paths」にダウンロードしたライブラリの「Source」フォルダへの絶対パスを入力します。また、入力欄の横を「recursive」にします。(検索対象を再帰的にすると思われます)
ios_googledrive_09

ダウンロードしたライブラリの「OAuth2」ー「Touch」にある「GTMOAuth2ViewTouch.xib」をXcodeプロジェクトにドラッグします。
※Xcode7からは「Supporting Files」のグループが無くなっています。(作成してもいいと思います)
ios_googledrive_10
ios_googledrive_11

同様にダウンロードしたライブラリの「Services」ー「Drive」ー「Generated」にある「GTLDrive.h」と「GTLDrive_Sources.m」をXcodeプロジェクトにドラッグします。Bridging-Headerを作成するか聞かれるため「Create Bridging Header」で作成します。
ios_googledrive_12
ios_googledrive_13
ios_googledrive_14

作成された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」に変更します。
ios_googledrive_15

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へアクセス出来ました。