2015/05/10

Evernote Cloud SDK 2.0にアップデート

 iOS, Evernote, Xcode

 動作環境:Xcode6

iOSアプリの64bit対応に伴い、古いEvernoteSDK(1.x SDK for iOS)のアップデート(マイグレーション)を実施することになりました。

  • 旧SDK: Evernote SDK for iOS 1.x
  • 新SDK: Evernote Cloud SDK 2.0

マイグレーション作業の大まかなガイダンスは、下記サイトにあります。
Migrating from Evernote SDK for iOS 1.x

まず最初に、新しいSDKの導入を行います。
CocoaPodsを使用する場合、手順はシンプルです。
プロジェクトのPodfileに以下を追記します。
pod 'evernote-cloud-sdk-ios'

続けて、コンソールから以下を実行します。


$ pod install




次に、コードの修正です。


EvernoteSDKを使用している各ソースファイルのヘッダー定義を、以下のように変更します。


//#import "EvernoteSDK.h"
#import <ENSDK/Advanced/ENSDKAdvanced.h>



AppDelegate内の記述を、以下のように変更します。


NSString *CONSUMER_KEY = @"xxxxxxxx";
NSString *CONSUMER_SECRET = @"xxxxxxxxx";


//[EvernoteSession setSharedSessionHost:EVERNOTE_HOST
//                 consumerKey:CONSUMER_KEY
//                 consumerSecret:CONSUMER_SECRET];
[ENSession setSharedSessionConsumerKey:CONSUMER_KEY
           consumerSecret:CONSUMER_SECRET
           optionalHost:nil];

Evernoteのホスト名の記載が不要となりました。SANDBOXに接続する場合はoptionalHostにEVERNOTE_SANDBOX_HOSTを指定します。


また、マイグレーションガイドにもありますが、以下の変更が必要です。

  • EvernoteSession -> ENSession
  • EvernoteNoteStore -> ENNoteStoreClient

但し、単純な名称変更だけでは正しく動作しませんので、マイグレーションガイドと同じページにあるGitHubのサンプルコードを参考にして変更を行いました。

以下、ケース別に対応後のコードを列挙します。

ex.) Evernoteログイン処理

[[ENSession sharedSession] authenticateWithViewController:self preferRegistration:NO completion:^(NSError *authenticateError) {
   if (!authenticateError) {
      /* 認証OK */
   } else if (authenticateError.code != ENErrorCodeCancelled) {
      /* エラー処理(Cancelによる) */
   } else {
      /* エラー処理 */
   }
}];

ex.) Evernoteログアウト処理

[[ENSession sharedSession] unauthenticate];

ex.) Notebookの一覧を取得

[[ENSession sharedSession].primaryNoteStore listNotebooksWithSuccess:^(NSArray *lnotebooks) {
   for (EDAMNotebook *lnotebook in lnotebooks) {
      /* Notebook名(lnotebook.name)を取得 */
   }
} failure:^(NSError *error) {
      /* エラー処理 */
}];

ex.) Tagの一覧を取得

[[ENSession sharedSession].primaryNoteStore listTagsWithSuccess:^(NSArray *tags) {
   for (EDAMTag *tag in tags) {
      /* Tag名(tag.name)を取得 */
   }
} failure:^(NSError *error) {
      /* エラー処理 */
}];

ex.) Noteの作成

[[ENSession sharedSession].primaryNoteStore createNote:newNote success:^(EDAMNote *note) {
   /* ノート作成OK */
} failure:^(NSError *error) {
   /* エラー処理 */
}];

他の変更点として、NoteStoreの指定がprimaryNoteStoreになっています。(EvernoteBusinessの場合はbusinessNoteStore)