Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with
or
.
Download ZIP
Easily add the Apple Binary Plist format to your Rails controllers
branch: master

This branch is 2 commits behind soffes:master

Failed to load latest commit information.
lib Updated Gemfile and fixed another 1.9.2 issue
spec Fix tests to run on 1.9.2 (several are still failing)
.gitignore Initial commit
Changelog.markdown
Gemfile Updated Gemfile and fixed another 1.9.2 issue
Gemfile.lock Work on encoding
LICENSE
Rakefile Work on encoding
Readme.markdown Updated readme and license
Todo.markdown Added initial specs
binary_plist.gemspec Updated Gemfile and fixed another 1.9.2 issue
init.rb Prefer single quotes

Readme.markdown

BinaryPlist

Rails plugin for easily adding a binary plist format. The binary plist format is ideal for transferring data to an Objective-C based application.

Note: This is still a work in progress. It should be ready to use for most applications. The most noticeable issue is the lack of support for large integers.

Installation

Add the following line to your bundle and run bundle install.

gem "binary_plist"

Usage

All you have to do is add the plist format to your respond_to block:

def index
  @posts = Post.all
  respond_to do |format|
    format.html
    format.plist { render :plist => @posts }
  end
end

You can do the combined style if you're support multiple formats like json or xml.

def index
  @posts = Post.all
  respond_to do |format|
    format.html
    format.any(:json, :plist) { render request.format.to_sym => @posts }
  end
end

Consuming

On the Objective-C side, it's ridiculously easy to consume the plist data.

NSURL *url = [NSURL URLWithString:@"http://localhost:3000/posts.plist"];
NSArray *posts = [NSArray arrayWithContentsOfURL:url];

You can also use the more flexible syntax:

NSURL *url = [NSURL URLWithString:@"http://localhost:3000/posts.plist"];
NSDate *date = [NSData dataWithContentsOfURL:url];
id result = [NSPropertyListSerialization propertyListFromData:data 
             mutabilityOption:NSPropertyListImmutable format:NULL errorDescription:nil];

if ([result isKindOfClass:[NSArray class]]) {
  // Handle array response
} else if ([result isKindOfClass:[NSDictionary class]]) {
  // Handle dictionary response
} else {
  // Etc...
}

Thanks

The encoder is largely based on Apple Binary Property List serializer.

Copyright (c) 2010-2011 Sam Soffes, released under the MIT license

Something went wrong with that request. Please try again.