id = "grandtotal" name = "GrandTotal" homepage = "https://www.mediaatelier.com/GrandTotal/" description = "GrandTotal is invoicing software built since 2008 exclusively for Mac." # The GrandTotal application icon, from the vendor's own site. icon = "https://www.mediaatelier.com/Assets/custom-icons/gt.png" # No command-line tool, so `detect` is the bundle identifier. It is # com.mediaatelier.GrandTotal3 even in GrandTotal 9: verified by downloading # the vendor's own build (the URL the Homebrew cask uses, # https://www.mediaatelier.com/GrandTotal9/GrandTotal_9.5.1.12.dmg), mounting # it and reading the bundle — `plutil -p GrandTotal.app/Contents/Info.plist` # reports CFBundleIdentifier com.mediaatelier.GrandTotal3 with # CFBundleShortVersionString 9.5.1. That frozen "3" is why this tool is often # listed under the name grandtotal-3. executables = [] platforms = ["macos"] [installation] macos_bundle_ids = ["com.mediaatelier.GrandTotal3"] [dotfiles] # Both paths come from the Homebrew cask's zap stanza # (https://github.com/Homebrew/homebrew-cask/blob/master/Casks/g/grandtotal.rb), # which names ~/Library/Preferences/com.mediaatelier.GrandTotal*.plist and # ~/Library/Application Support/com.mediaatelier.GrandTotal*. The globs are the # cask's own, and they are what makes the entry survive the next major version # keeping a different digit in the identifier. # # What is *not* here is the invoicing data itself. A GrandTotal document is a # file the user chose the location of — a .grandtotal bundle around a Core Data # store — so it is not a fixed path under the home directory and does not # belong in a catalog of configuration. paths = [ "[preferences]/com.mediaatelier.GrandTotal*.plist", "[appData]/com.mediaatelier.GrandTotal*/", ] # The same zap list keeps GrandTotal's caches and window state elsewhere — # ~/Library/Caches/com.mediaatelier.GrandTotal*, # ~/Library/HTTPStorages/com.mediaatelier.GrandTotal*, the saved application # state and the recent-documents shared file list — so nothing above needs # carving out. # GrandTotal is licensed per user and the licence is not in the keychain: the # app binary's string table has ".com.mediaatelier.GrandTotal.licenses" beside # ".com.mediaatelier.GrandTotal.preferences". Which directory those two sit in # could not be established, so no path is named here rather than guessing at # one; a consumer that content-scans what it syncs is the layer that catches # a licence file inside the paths above. secret = [] # No machine_lines, and none are expressible: this is a property list and an # application-support directory, while `format` covers toml, yaml and json # only. The machine-local part is the path of the last opened document.