Passbook is an iOS 6 feature that manages boarding passes, movie tickets, retail coupons, & loyalty cards. Using the PassKit API, developers can register web services to automatically update content on the pass, such as gate changes on a boarding pass, or adding credit to a loyalty card.
Dubai makes it easy to generate
.pkpass from a script or the command line, allowing you to rapidly iterate on the design and content of your passes, or generate one-offs on the fly.
Pairs nicely with Rack::Passbook.
Dubai is named for Dubai, UAE, a center of commerce and trade (and as Dave Rupert was all-too-eager to point out, an unfortunate pun on "Do Buy!"). It's part of a series of world-class command-line utilities for iOS development, which includes Cupertino (Apple Dev Center management), Shenzhen (Building & Distribution), Houston (Push Notifications), Venice (In-App Purchase Receipt Verification), and Nashville (iTunes Store API).
$ gem install dubai
require 'dubai' ::., ::. = "/path/to/certificate.p12", "..." # Example.pass is a directory with files "pass.json", "icon.png" & "[email protected]" File.open("Example.pkpass", 'w') do |f| f.write ::::.("Example.pass")..string end
Comand Line Interface
Dubai also comes with the
pk binary, which provides a convenient way to generate and preview passes
$ pk generate Example.pass -T boarding-pass
Dubai comes with templates for all of the different Passbook layouts:
.pkpass file (which can previewed with a drag-and-drop onto the iOS Simulator):
$ pk build Example.pass -c /path/to/certificate.p12
...or serve them from a webserver (which can be previewed by visiting the address on a device or the simulator):
$ pk serve Example.pass -c /path/to/certificate.p12 $ open http://localhost:4567/pass.pkpass
--host option to bind the server to a particular host. Binding on
0.0.0.0 will listen for all incoming connections on the local network, such as an iPhone or iPad:
$ pk serve Example.pass -H 0.0.0.0
Mattt Thompson (@mattt)
Dubai is available under the MIT license. See the LICENSE file for more info.