Property List (.plist) Generation

Property list generation is done using various functions and custom data types.

The file plistgen.go generates the file, while plist.go contains definitions of the data types and helper functions used in generating the plist.

A plistData value consists of a key, type and value. This will almost directly translate to an XML string.

type plistData struct {
    key      string
    dataType plistDataType
    value    any


Here are the constants for plistDataType:

  • Text
  • Number
  • Dictionary
  • Array
  • Boolean

It is made easier by the fact that you can have a slice of plistData as the value if the dataType is Dictionary. This is because the function that generates the plist syntax for dictionaries will recurse. This allows you to in some cases almost completely forget about the resulting plist and mainly construct it via abstraction.

At the end of the day, these functions and types come together to build a string that is saved as a .shortcut file.

To save the output as a separate plist file from the resulting signed Shortcut, use the --debug (or -d) option when running the compiler.