忍者ブログ
プログラミングとか日常とかの覚書っぽいなにか
[37] [36] [35] [34] [33] [32] [31] [30] [29] [28] [27]
×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。

昔のエントリで、iOSで動作するTwitterクライアントの作成に挑戦したことがありました。しかし、iOSやXCodeのバージョンアップによりARC (Automatic Reference Counting) の機能が追加されている現在、当時の内容はもはや古くなってしまいました。
そうでなくても、実はSBJsonライブラリのバージョン変遷によるファイル構成の変更などのために、当時のエントリの記述通りにやってもうまくいかなくなってしまってたりしてましたし。

今回は、現在の最新のXcodeであるXCode 4.3.2を使用して、ARC対応版として書き直していくことにします。内容は以前に書いたものとほぼ同じですが、iOS5以降では標準でJSONパーサーが使えるので、SBJsonライブラリの代わりにそちらを使用していくことにします。


GTMOAuthとGTMHTTPFetcherのダウンロード

OAuth認証に必要なGTMOAuthとGTMHTTPFetcherについては、それぞれ以下で公開されています。

GTMOAuth Project Home (英語)
http://code.google.com/p/gtm-oauth/

GTMHTTPFetcher Project Home (英語)
http://code.google.com/p/gtm-http-fetcher/

ただし、GTMHTTPFetcherはGTMOAuthライブラリの中に含まれている(というか、GTMOAuthが内部でGTMHTTPFetcherを利用している)ので、GTMOAuthの方だけダウンロードすればOKです。

最新のGTMOAuthライブラリはSVN(Subversion)というバージョン管理ツールを使用してWeb上で管理されており、ターミナル上でsvnコマンドを使用してダウンロードしてくることができます。
「アプリケーション」→「ユーティリティ」→「ターミナル」を起動し、ダウンロードしたいディレクトリ(フォルダ)まで移動(cdコマンド)してから以下のように入力すると、そのディレクトリの下に「gtm-oauth」というフォルダが作成され、現在の最新のソースを取得できます。
svn checkout http://gtm-oauth.googlecode.com/svn/trunk/ gtm-oauth


以下の通りファイルが展開されます。
Sourceフォルダの中にGTMOAuthライブラリの各種クラスのソースファイルがあります。また、HTTPFethcherフォルダの中にはGTMHTTPFetcherライブラリのソースファイルが格納されています。




Twitterクライアントアプリケーションの登録

今回作成するクライアントアプリケーションの情報をTwitterに登録しておきます。

Twitter Applications
http://dev.twitter.com/apps

Twitterにサインインした後、上記のページから「Create a new application」を選択し、新しく登録するプログラムの情報を入力して登録します。



ここで、通常Webアプリベースでないクライアントアプリケーションは「Callback URL」入力欄を空にするものなのですが、GTMOAuthはCallback URLを指定しなければならない仕様になっているようです。作成するアプリケーションの中でこのURLが実際に使用されることはないため、存在しないダミーのURLを指定することができます。
ここでは例として「http://www.example.com/OAuthCallback」を指定しています(example.comやexample.netは予約済みドメインなのでこの用途にはちょうどよい)。

登録直後はアプリケーションのアクセス種別が「Read only」(読み込みのみ)になっています。タイムラインの取得だけであれば「Read only」でよいですが、アプリケーションからツイートを行うためにはアクセス種別を変更しておく必要があります。その場合は、Settingタブに移動して「Read and Write」または「Read, Write, and Access direct messages」を選択します。



クライアントアプリケーションを登録すると、アプリケーションに「Consumer key(コンシューマー・キー)」と「Consumer secret(コンシューマー・シークレット)」という2つのキーコードが割り当てられます。これらはDefaultタブの「OAuth settings」で確認することができます。この2つのキーはOAuth認証で使用されるもので、後でGTMOAuthライブラリに渡してやる必要がありますので、これをメモしておいてください。



ここの中で、特に「Consumer secret」は秘密鍵であるのため、他の人に知られないようにしなければいけません。


XCodeプロジェクトの作成

XCodeを起動してプロジェクトを作成します。

どうやら、この後で使用するGTMOAuthViewControllerTouchクラスがナビゲーションバーで表示切替されることを前提に作られている(閉じるときに内部でpopViewControllerを使っているため、アプリケーション側でもpushViewControllerで表示する必要がある)ようなので、あらかじめナビゲーションバーとテーブルビューが作られる「Navigation-based Application」を選択しておきます。



プロジェクトのオプション選択画面では、「Use Automatic Reference Counting」(ARCを使う)にチェックが入っていることを確認しましょう。今回は「Use Storyboards」にもチェックしたものとして解説しています(今までと同じようにアプリケーションの画面をxib形式で作りたい場合はチェックを外しておきます)。



プロジェクトを作成できたら、GTMOAuthライブラリに含まれるもののうち、以下のソースファイルをプロジェクトに追加します。FinderからソースファイルをXcodeのプロジェクトビューにドラッグ&ドロップすることで追加することができます。
  • gtm-oauth/Source フォルダ内
    • GTMOAuthAuthentication.h
    • GTMOAuthAuthentication.m
    • GTMOAuthSignIn.h
    • GTMOAuthSignIn.m
  • gtm-oauth/Source/Touch フォルダ内
    • GTMOAuthViewControllerTouch.h
    • GTMOAuthViewControllerTouch.m
    • GTMOAuthViewTouch.xib
  • gtm-oauth/HTTPFetcher フォルダ内
    • GTMHTTPFetcher.h
    • GTMHTTPFetcher.m

追加するときに以下のオプション画面が表示されるので、「Copy items into destination group's folder (if needed)」チェックボックスにチェックを付けておきます。また、「Add to target」の中のプロジェクト名のチェックボックスにも、チェックを付けるようにしてください(複数選択してドラッグ&ドロップする際に、ヘッダファイルが含まれているとデフォルトで外れてしまうらしい(?))。



ソースファイルを以下のようにグループ分けすることもできます。この辺りはお好みで。



次に、GTMOAuthライブラリのソースのコンパイルオプションを設定します。
GTMOAuthライブラリのソースはARCに対応しておらず、このままビルドするとエラーとなってしまいます。GTMOAuthのソースファイルをコンパイルする際にはARCが適用されないように指定する必要があります。

プロジェクトナビゲータ上でプロジェクトを選択し、
「TARGET」内のターゲット名
→ 「Build Phases」
→ 「Compile Sources」
と開き、GTMOAuth/GTMHTTPFetcher関連の4つのファイルを以下のように選択状態にします(Shiftキーで範囲選択するか、Commandキーを押しっぱなしで1つずつ追加選択)。



ファイルが選択された状態でEnterキーを押下するとコンパイルオプションの入力ボックスが表示されるので、ここに「-fno-objc-arc」と入力します。こうすることで、この4つのファイルはARCなしでコンパイルされるようになります。




最後に、以下のフレームワークライブラリをリンクするように設定します。
  • Security.framework
  • SystemConfiguration.framework
同じ画面で
「TARGET」内のターゲット名
→ 「Build Phases」
→ 「Compile Sources」
と開き、追加ボタン「+」を押して、上記の2つを追加します。





ここまでで、開発の準備段階が完了です。
この時点でビルドを行い、ビルドが正常に完了すれば、開発の準備は整ったことになります。


下準備:不要コードの削除

上記の手順で作成したプロジェクトでは、初期状態でナビゲーションバーが存在し、さらにテーブルビューを持つMasterViewControllerと、通常のビューを持つDetailViewControllerが自動的に作成されており、それぞれのクラスですでにサンプルプログラム的なコードがいくらか記載されています。
今後、MasterViewControllerクラスに対して実装を追加していくのですが、すでにあるサンプルの部分は不要なので、あらかじめ削除しておくことにします。

MasterViewController.mファイルの中でクラスエクステンション(無名カテゴリ)を使用してインスタンス変数 _objects が宣言されていますが、今後使用しないので削除します。
@interface MasterViewController () {
}
@end

そして、この _objects を参照している部分を修正していきます。

以下のメソッドは使用しないため、丸ごと削除してしまいましょう。(またはメソッド全体をコメントアウトするのでも構いません。)
  • insertNewObject:
  • tableView:commitEditingStyle:forRowAtIndexPath:
  • prepareForSegue:sender:

viewDidLoad メソッドは現状ではスーパークラスを呼び出す以外に何もしない状態にしておきます。
- (void)viewDidLoad
{
    [super viewDidLoad];
}

tableView:numberOfRowsInSection: メソッドはテーブルビューの項目数を返すものですが、現状では戻り値を 0 固定にしておきます。
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    return 0;
}

tableView:cellForRowAtIndexPath: メソッドはセルのラベルテキスト設定部分を削除し、現状は何もせずに単に cell を返すだけにしておきます。
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"Cell"];
    return cell;
}

今回はここまでです。次回以降、実際のプログラムを書いていきます。

拍手

PR

コメント


コメントフォーム
お名前
タイトル
文字色
メールアドレス
URL
コメント
パスワード
  Vodafone絵文字 i-mode絵文字 Ezweb絵文字


忍者ブログ [PR]
プロフィール
HN:
はむぱい
職業:
ソフト作ったりしてる人
Twitter
最新CM
[06/09 replica rolex oyster perpetual datejust]
[06/09 bracelets imitation cartier love]
[06/09 replica the oyster perpetual datejust]
[06/09 datejust rolex oyster perpetual]
[06/09 replica gold love bangle]
カレンダー
11 2017/12 01
S M T W T F S
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
31
ブログ内検索
あ~いい漢字