KeyedArchive
A Ruby gem for working with files produced by NSKeyedArchiver.
Installation
Add this line to your application's Gemfile:
gem 'keyed_archive'
And then execute:
$ bundle
Or install it yourself as:
$ gem install keyed_archive
Usage
Basic Syntax
KeyedArchive supports the initializer arguments which CFPropertyList supports: :file to read data directly from a file and :data to read data from a variable that already has your NSKeyedArchive data within it.
# Create KeyedArchive by reading a file directly
keyed_archive_from_file = KeyedArchive.new(:file => "path/to/file.plist")
# Create KeyedArchive from a variable holding content which can 
# be parsed as a plist, either XML or binary. 
file_contents = File.read("path/to/file.plist")
keyed_archive_from_variable = KeyedArchive.new(:data => file_contents)Opening a keyed archive
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
  <key>$version</key>
  <integer>100000</integer>
  <key>$objects</key>
  <array>
    <string>$null</string>
  </array>
  <key>$archiver</key>
  <string>NSKeyedArchiver</string>
  <key>$top</key>
  <dict>
    <key>root</key>
    <dict>
      <key>CF$UID</key>
      <integer>1</integer>
    </dict>
  </dict>
</dict>
</plist>require 'keyed_archive'
filename = "path/to/file.plist"
keyed_archive = KeyedArchive.new(:file => "path/to/file.plist")
keyed_archive.archiver     # "NSKeyedArchiver"
keyed_archive.objects      # ["$null"]
keyed_archive.top          # {"root"=>1}
keyed_archive.version      # 100000
keyed_archive.unpacked_top # {"root"=>nil}Unpacking keyed archive objects
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
  <key>$version</key>
  <integer>100000</integer>
  <key>$objects</key>
  <array>
    <string>$null</string>
    <dict>
      <key>key</key>
      <string>value</string>
    </dict>
  </array>
  <key>$archiver</key>
  <string>NSKeyedArchiver</string>
  <key>$top</key>
  <dict>
    <key>root</key>
    <dict>
      <key>CF$UID</key>
      <integer>1</integer>
    </dict>
  </dict>
</dict>
</plist>require 'keyed_archive'
keyed_archive = KeyedArchive.new(:file => "path/to/file.plist")
keyed_archive.objects             # ["$null", {"key"=>"value"}]
keyed_archive.top                 # {"root"=>1}
keyed_archive.unpacked_top()      # {"root"=>{"key"=>"value"}}Contributing
- Fork it ( http://github.com/\<my-github-username>/keyed_archive/fork )
 - Create your feature branch (
git checkout -b my-new-feature) - Commit your changes (
git commit -am 'Add some feature') - Push to the branch (
git push origin my-new-feature) - Create new Pull Request