iPhoneでXML_RPCを使おうとすると、地味に苦労します。
XMLParserはあるので、自力でやっても良いのですが、出来ればライブラリが欲しいですよね。
eczarny xmlrpcがiPhone対応ということですが、私の環境ではターゲットをiPhone OSにするとビルドエラーが出ました。
MacOSをターゲットにすると正常にビルドできます。NSXMLDocumentなどを内部で利用しており、これがiPhone非対応なのが原因みたいです。2.0~2.2.1まで全滅でした。
WordPress for iPhoneのXML_RPC
ということで他を当たったところ、WordPress for iPhoneの内部で使われているものが良さそうでした。
これもeczarmy xmlrpcをベースに作られているようですが(未確認)、iPhoneでもちゃんと動きます。
ダウンロード
ということで、以下からソースコードをダウンロードします。ライセンスはGNU GPLでした。
http://iphone.trac.wordpress.org/browser(trunkを開いて、下の方にあるZip Archiveをクリック)
色々入っていますが、Classes/XMLRPCフォルダ丸ごとと、Classes以下でファイル名に「+」が含まれるものを全部コピーして、プロジェクトにインポートすればOKです。
利用法
使い方は、以下のようにやります。
#import "XMLRPCRequest"
#import "XMLRPCResponse"
#import "XMLRPCConnection"
- (void)test {
//requestを生成
NSURL *url = [NSURL URLWithString:@"https://www.bpsinc.jp"];
XMLRPCRequest *request = [[XMLRPCRequest alloc]initWithHost:url];
[request setMethod:@"Test.version" withObjects:[NSArray array]]; //引数を指定するときはarrayの部分にデータを入れる
NSLog(@"%@", [request source]); //XMLRPCのリクエストソースが見られます
//通信
XMLRPCResponse *response = [XMLRPCConnection sendSynchronousXMLRPCRequest: request];
NSLog(@"%@", [response source]); //XMLRPCのレスポンスソースが見られます
NSLog(@"%@", [response object]); //objectメソッドは、戻り値の型になります。サーバ側で明示的に型を指定しましょう
}
ソースコードは短く読みやすいので、簡単に使いこなせると思います。
非同期通信は、以下の2つを実装すれば、XMLRPCConnectionのinitWithRequestで実行できます。
- (void)connection:(XMLRPCConnection *)connection
didReceiveResponse:(XMLRPCResponse *)response forMethod:(NSString *)method;
- (void)connection:(XMLRPCConnection *)connection
didFailWithError:(NSError *)error forMethod:(NSString *)method;