wpxmlrpc 0.9.0-beta.1

wpxmlrpc 0.9.0-beta.1

TestsTested
LangLanguage Obj-CObjective C
License NOASSERTION
ReleasedLast Release Sep 2020

Maintained by Aaron Douglas, Jorge Bernal, Sérgio Estêvão, Eric Johnson, Enej Bajgoric, Antonis Lilis, Ernesto Carrion, Paolo Musolino, Gerardo Pacheco, Brandon Titus, Jorge Leandro Perez, Matt Bumgardner, James Frost, Elisa Budelli, Eduardo Toledo, Cesar Tardaguila, Lorenzo Mattei, Eric Johnson, Diego Rey Mendez, Stephenie Harris, Thuy Copeland, Daniele Bogo, Jaclyn Chen, Chip Snyder, Jeremy Massel, Pinar Olguc, Emily Laguna, Leandro Alonso, Paul Von Schrottky, Stefanos Togoulidis, Ceyhun Ozugur, Giovanni Lodi, Jayson Basañes, Rachel McRoberts, Yael Rubinstein, Giorgio Ruscigno, Automattic Mobile.



wpxmlrpc 0.9.0-beta.1

  • By
  • Automattic

WordPress XML-RPC Framework

The WordPress XML-RPC library is a lightweight XML-RPC client for iOS and OS X.

It's based on Eric Czarny's Cocoa XML-RPC Framework, but without all the networking code, and a few additions of our own.

Installation

WordPress XML-RPC uses CocoaPods for easy dependency management.

Just add this to your Podfile and run pod install:

pod 'wpxmlrpc'

Another option, if you don't use CocoaPods, is to copy the WPXMLRPC folder to your project.

Usage

WordPress XML-RPC only provides classes to encode and decode XML-RPC. You are free to use your favorite networking library.

Building a XML-RPC request

NSURL *URL = [NSURL URLWithString:@"http://example.com/xmlrpc"];
NSMutableURLRequest *request = [[NSMutableURLRequest alloc] initWithURL:URL];
[request setHTTPMethod:@"POST"];

WPXMLRPCEncoder *encoder = [[WPXMLRPCEncoder alloc] initWithMethod:@"demo.addTwoNumbers" andParameters:@[@1, @2]];
[request setHTTPBody:[encoder dataEncodedWithError:nil]];

Building a XML-RPC request using streaming

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES);
NSString *directory = [paths objectAtIndex:0];
NSString *guid = [[NSProcessInfo processInfo] globallyUniqueString];
NSString *streamingCacheFilePath = [directory stringByAppendingPathComponent:guid];

NSURL *URL = [NSURL URLWithString:@"http://example.com/xmlrpc"];
NSMutableURLRequest *request = [[NSMutableURLRequest alloc] initWithURL:URL];
[request setHTTPMethod:@"POST"];

NSInputStream *fileStream = [NSInputStream inputStreamWithFileAtPath:filePath];
WPXMLRPCEncoder *encoder = [[WPXMLRPCEncoder alloc] initWithMethod:@"test.uploadFile" andParameters:@[fileStream]];	      

[encoder encodeToFile:streamingCacheFilePath error:nil];

NSError *error = nil;
NSDictionary *attributes = [[NSFileManager defaultManager] attributesOfItemAtPath:filePath error:&error];
unsigned long contentLength = [[attributes objectForKey:NSFileSize] unsignedIntegerValue];
NSInputStream * inputStream = [NSInputStream inputStreamWithFileAtPath:filePath]; 

[request setHTTPBodyStream:inputStream];
[request setValue:[NSString stringWithFormat:@"%lu", contentLength] forHTTPHeaderField:@"Content-Length"];

Parsing a XML-RPC response

NSData *responseData = …
WPXMLRPCDecoder *decoder = [[WPXMLRPCDecoder alloc] initWithData:responseData];
if ([decoder isFault]) {
	NSLog(@"XML-RPC error %@: %@", [decoder faultCode], [decoder faultString]);
} else {
	NSLog(@"XML-RPC response: %@", [decoder object]);
}

Acknowledgments

The Base64 encoder/decoder found in NSData+Base64 is created by Matt Gallagher.

The original Cocoa XML-RPC Framework was developed by Eric Czarny and now lives at github.com/corristo/xmlrpc