しばやん雑記

Azure とメイドさんが大好きなフリーランスのプログラマーのブログ

SignalR-ObjC で iPhone アプリでも SignalR を使う

みなさん SignalR してますか?SignalR って公式ではないですが iPhone, OS X 向けにもクライアントライブラリが公開されてるんですよ。

DyKnow/SignalR-ObjC · GitHub

SignalR-ObjC をインストールするには CocoaPods を使います。.NETer 向けにわかりやすく説明すると Cocoa 版 NuGet ですね。

CocoaPods: The Objective-C Library Manager

なので gem を使って CocoaPods をまずはインストールしておきます。

sudo gem install cocoapods

gem が動かないときは MacPorts で最新版入れるとか、いろいろと調べて頑張ってください(

プロジェクトを作成したらいったん閉じて、プロジェクトのルートに以下のような内容で Podfile を作成します。

platform :ios, '6.0'
pod 'SignalR-ObjC'

あとは pod install コマンドを叩くだけで SignalR-ObjC ライブラリを使った開発が出来るように設定が行われます。

pod install

後は生成された *.xcworkspace ファイルを開くと、すぐに SignalR を使った開発が行えるようになっています。やったね!

そして実際にサーバに接続するコードです。クラスにプリフィックスが付いていたり、Objective-C 特有の記法になっていますが、それ以外は殆ど C# 版と変わりありません。

// コネクションを作成
SRHubConnection *connection = [SRHubConnection connectionWithURL:@"http://***.cloudapp.net"];

// Hub のプロキシを作成
SRHubProxy *hitCounterHub = [connection createProxy:@"hitcounter"];

// showHitCount イベントを受け取るように設定
[hitCounterHub on:@"showHitCount" perform:self selector:@selector(showHitCount:)];

// 接続完了時に呼ばれるブロックを指定
connection.started = ^
{
    // HitCount メソッドを引数なしで呼び出す
    [hitCounterHub invoke:@"HitCount" withArgs:nil];
};

// 接続を開始
[connection start];

海外のライブラリなので日本語というかマルチバイト周りを心配していたのですが、特に問題もなく使えています。