From The Apple Wiki
Original author(s)Apple Inc.
Developer(s)Apple Inc.
Stable release
1.0 (PurpleRabbit-92~64)
(latest known version)
Operating systemmacOS
Available inEnglish
TypeFirmware flasher
LicenseClosed source

PurpleRabbit is an internal macOS app which can restore devices much like PurpleRestore and iOS Restore Tool, and can also print labels. This app seems to be to be used in factories, as the software uses files and libraries that are only found in factory machines. The app also has a label maker window, which allows workers to print out labels which have device information on them. These labels are then placed onto prototype devices and are used for identification, as there are usually many different type of prototypes of any given device that all perform differently or contain different features. The best example of this would be prototype iPhone 12 models. During the prototyping phase, there were many different models which had different capabilities and features. Some models supported 120Hz refresh rates while some didn't, etc. These models would all have a different model number depending on their features, therefore making it necessary to print out labels containing each prototype's model number, so that none of them get mixed up. Within the PurpleRabbit app, there is also a menu bar option that allows engineers to file a Radar.

By default the app will not launch correctly, and instead will throw an error saying "Failed to load Jobs.plist", which is actually nonexistent within the app's Application Support directory. As of version "61.40.4~301", this is no longer the case. If PurpleRabbit doesn't detect a Jobs.plist, it creates a blank one and continues to run. Another new feature is the ability to add/remove jobs from the Jobs.plist file. If you load an older version of PurpleRabbit after creating the file in the newest version, you'll be able to access the entire application. Unfortunately this doesn't reveal any features that weren't already discovered through reverse-engineering (see Gallery) since job editing is not present in those versions.

Job Editor

The job editor is a feature that was added somewhere between PurpleRabbit v2.1 and v61.40.4~301. It allows you to create and edit the Jobs.plist file from within PurpleRabbit, as opposed to v2.1 where you would likely need one to get one (probably through AppleConnect) that was already set up for your use case.


There are 4 types of predefined events available in the job editor, as well as an option to create user-defined events. The 4 predetermined types are as follows:

  • When Device Connects
  • When Task Completes
  • When Task Fails
  • When PurpleRabbit Starts

It is unclear how you would set what triggers a user-defined event as the only parameter shown when you select one is the event name.


Commands are placed after an event and are run once the event triggers. A full list of all the commands that can be added is as follows: (names are written here exactly as they are written in the application and sorted to make looking through them easier)

Instant Pudding

  • Add Blob (Instant Pudding)
  • Add Result (Instant Pudding)
  • Add Serial Number (Instant Pudding)
  • Add Station Attribute (Instant Pudding)
  • Check SFC routing result (Instant Pudding)
  • Done Commit (Instant Pudding)
  • Start (Instant Pudding)


  • Check Control Bit
  • Pluckit
  • Run Diags
  • Run iCheck
  • Test Module Response


  • Clear NVRAM Variable
  • Set NVRAM Variable


  • Activate
  • Install 2nd Party Application
  • Install 3rd Party Application
  • Load FDI (Factory Disk Image)
  • Restore Device
  • Scan For Bundles


  • Delay
  • Restart Device
  • Run Script
  • Wait For Task
  • Wait to Reconnect


  • ShopFloor - Add Record
  • ShopFloor - Query Record


  • Interpret
  • Key Operation
  • Log Parser - Search String
  • Print Label

Command Errors

Many commands that I have tested (such as Check Control Bit) fail to run because "gh_station_info.json" cannot be found. It's possible that this file had to be distributed to each factory station in order to use PurpleRabbit. Instant Pudding-related commands fail with a null response. (For example, running Check SFC routing result (Instant Pudding) returns "IPAMIOK failed: (null)". This is likely because AmIOk and other Instant Pudding-related commands are only available on devices running internal firmware.)


See Also