Tech Racho エンジニアの「?」を「!」に。
  • 開発

iPhoneでXML_RPCする方法を見つけた

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;

CONTACT

TechRachoでは、パートナーシップをご検討いただける方からの
ご連絡をお待ちしております。ぜひお気軽にご意見・ご相談ください。