The iPhone Wiki is no longer updated. Visit this article on The Apple Wiki for current information. |
Difference between revisions of "PurpleRabbit"
NinjaCheetah (talk | contribs) (Added more details about the new Jobs.plist creation/editing features, will add more soon) |
NinjaCheetah (talk | contribs) |
||
Line 4: | Line 4: | ||
| title = PurpleRabbit |
| title = PurpleRabbit |
||
| logo = [[File:PurpleRabbit Icon.png|118px]] |
| logo = [[File:PurpleRabbit Icon.png|118px]] |
||
+ | | screenshot = [[File:PurpleRabbit_main_screen.png|150px]] |
||
+ | | caption = PurpleRabbit (61.40.4~301) |
||
| collapsible = |
| collapsible = |
||
| author = Apple Inc. |
| author = Apple Inc. |
||
Line 16: | Line 18: | ||
| operating system = [[wikipedia:macOS|macOS]] |
| operating system = [[wikipedia:macOS|macOS]] |
||
| platform = |
| platform = |
||
− | | size = |
+ | | size = 34-4 3MB |
| language = [[wikipedia:English language|English]] |
| language = [[wikipedia:English language|English]] |
||
| status = |
| status = |
||
− | | genre = |
+ | | genre = Firmware flasher |
| license = [[wikipedia:Proprietary software|Closed source]] |
| license = [[wikipedia:Proprietary software|Closed source]] |
||
| website = |
| website = |
||
Line 28: | Line 30: | ||
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]]. |
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 [[# |
+ | 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|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 (SSO)|AppleConnect]]) that was already set up for your use case. |
||
+ | |||
+ | === Events === |
||
+ | 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 === |
||
+ | 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)'' |
||
+ | '''Diagnostics''' |
||
+ | * ''Check Control Bit'' |
||
+ | * ''Pluckit'' |
||
+ | * ''Run Diags'' |
||
+ | * ''Run iCheck'' |
||
+ | * ''Test Module Response'' |
||
+ | '''NVRAM''' |
||
+ | * ''Clear NVRAM Variable'' |
||
+ | * ''Set NVRAM Variable'' |
||
+ | '''Firmware/Software''' |
||
+ | * ''Activate'' |
||
+ | * ''Install 2nd Party Application'' |
||
+ | * ''Install 3rd Party Application'' |
||
+ | * ''Load FDI (Factory Disk Image)'' |
||
+ | * ''Restore Device'' |
||
+ | * ''Scan For Bundles'' |
||
+ | '''Control/Timing''' |
||
+ | * ''Delay'' |
||
+ | * ''Restart Device'' |
||
+ | * ''Run Script'' |
||
+ | * ''Wait For Task'' |
||
+ | * ''Wait to Reconnect'' |
||
+ | '''ShopFloor''' |
||
+ | * ''ShopFloor - Add Record'' |
||
+ | * ''ShopFloor - Query Record'' |
||
+ | '''Other''' |
||
+ | * ''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.) |
||
+ | |||
+ | == Gallery == |
||
<gallery> |
<gallery> |
||
− | File:PurpleRabbit01.png|PurpleRabbit |
+ | File:PurpleRabbit01.png|PurpleRabbit v2.1 accessed through reverse engineering |
+ | File:PurpleRabbit_test_fail.png|Device test failing in PurpleRabbit 61.40.4~301 |
||
+ | File:PurpleRabbit_job_editor.png|PurpleRabbit job editor will all events types added |
||
+ | File:PurpleRabbit_command_list.png|List of commands that can be added to an event |
||
</gallery> |
</gallery> |
||
Revision as of 23:35, 28 October 2021
This article discusses software internally used by Apple. Acquiring a copy without Apple's consent is illegal and may result in being scammed. |
PurpleRabbit (61.40.4~301) | |
Original author(s) | Apple Inc. |
Developer(s) | Apple Inc. |
Stable release |
61.40.4~301 (latest known version) |
Operating system | macOS |
Size | 34-4 3MB |
Available in | English |
Type | Firmware flasher |
License | Closed 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.
Events
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
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)
Diagnostics
- Check Control Bit
- Pluckit
- Run Diags
- Run iCheck
- Test Module Response
NVRAM
- Clear NVRAM Variable
- Set NVRAM Variable
Firmware/Software
- Activate
- Install 2nd Party Application
- Install 3rd Party Application
- Load FDI (Factory Disk Image)
- Restore Device
- Scan For Bundles
Control/Timing
- Delay
- Restart Device
- Run Script
- Wait For Task
- Wait to Reconnect
ShopFloor
- ShopFloor - Add Record
- ShopFloor - Query Record
Other
- 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.)