Generate Apple Passbook passes in Ruby

Passifier does most of the hard work and will more easily allow you to automate generating pkpass files. You simply supply

  • A Hash of metadata and layout (the contents of pass.json for those experienced)
  • Image urls and paths
  • The location of your key/certificate files
  • Output path for the generated .pkpass file


Add this line to your application's Gemfile:

gem 'passifier'


Metadata and Layout

First, supply a bunch of pass information and styling. This will become the file pass.json within the pass archive. More information on pass.json and creating a layout can be found at

serial = "SO_SERIAL"

spec = {
  "formatVersion" => 1,
  "passTypeIdentifier" => "pass.example.example",
  "teamIdentifier" => "ATEAMID",
  "relevantDate" => "2012-07-30T14:19Z",          
  "organizationName" => "Example Inc.",
  "serialNumber" => serial,
  "description" => "this is a pass",
  "labelColor" => "rgb(122, 16, 38)",
  "backgroundColor" => "rgb(227, 227, 227)",
  "foregroundColor" => "rgb(110,110,110)",
  "generic" => {
    "headerFields" => [
        "key" => "date",
        "label" => "Date",
        "value" => "October 30th"
    "primaryFields" => [
        "key" => "title",
        "label" => "",
        "value" => "Passifier!"
    "secondaryFields" => [
        "key" => "host",
        "label" => "Host",
        "value" => "",


Specify a Hash of images. Notice that you can use either paths or urls here.

images = {
  "background.png" => "assets/background.png",
  "background@2x.png" => "assets/background@2x.png",
  "icon.png" => "assets/icon.png",
  "icon@2x.png" => "assets/icon@2x.png",
  "logo.png" => "",
  "logo@2x.png" => "",
  "thumbnail.png" => "assets/thumbnail.png",
  "thumbnail@2x.png" => "assets/thumbnail@2x.png"


Give Passifier some info about your .pem files.

(to-do: more info on obtaining certificates and creating pem files)

key_pem = "path/to/a/key.pem"
pass_phrase = "somethingsomething"
cert_pem = "path/to/a/certificate.pem"

# Create a Signing object
signing =, pass_phrase, cert_pem)


Now it's time to create your pass.

Passifier::Pass.generate("readme.pkpass", serial, spec, images, signing)

Passifier will have created the file readme.pkpass for you. When opened in Passbook, that pass looks something like:


Find a similar example with some more explanation here

Contributing to Passifier

  • Check out the latest master to make sure the feature hasn't been implemented or the bug hasn't been fixed yet.
  • Check out the issue tracker to make sure someone already hasn't requested it and/or contributed it.
  • Create an issue in the issue tracker
  • Fork the project.
  • Start a feature/bugfix branch; include the issue number in the branch name.
  • Commit and push until you are happy with your contribution.
  • Make sure to add tests for it. This is important so we don't break it in a future version unintentionally.


Copyright © 2012 Paperless Post. See for details.