DropletCreator
Who made a droplet.
struct DropletCreator
Every droplet carries one, and every surface that lists droplets shows it: the Store's rows, the droplet's detail page, and the cards on getdroppy.app/droplets. A user should never have to guess whether something came from Droppy or from the community.
Cases
DropletCreator.Kind.droppy
case droppy
Published by Droppy itself.
DropletCreator.Kind.community
case community
Published by a third-party developer.
Initializers
init(from:)
init(from decoder: any Decoder) throws
init(name:kind:url:avatar:)
init(name: String, kind: Kind, url: URL? = nil, avatar: String)
init(name:kind:url:avatar:gitlab:)
init(name: String, kind: Kind, url: URL? = nil, avatar: String, gitlab: String?)
Creates a creator with a GitLab username. (DroppyKit 1.11.0)
init(rawValue:)
init?(rawValue: String)
Properties
avatar
let avatar: String
Filename of the creator's avatar, relative to the droplet's Assets/ directory. Required.
A square PNG, at least 256×256, with no built-in rounding: every surface clips it to a circle itself, so a pre-rounded image ends up rounded twice and the corners go muddy. Transparency is allowed.
This is the small round mark beside the droplet's name in the Store, so it has to read at 20 points. A wordmark will not; a monogram, a face, or a symbol will.
gitlab
let gitlab: String?
The maker's GitLab username, without the @. (DroppyKit 1.11.0)
Required by the Droplet Store repository (gitlab.com/droppyformac1/droplets): it generates CODEOWNERS from this field, which is what gets the maker asked before someone else's change to their droplet merges. Optional in the manifest itself, so a droplet built elsewhere still decodes.
kind
let kind: Kind
Whether this is a first-party or community droplet. Community submissions are always published as .community; the review tool refuses a submission that claims .droppy.
name
let name: String
Display name of the person or company, as it should appear in the Store. Sentence case, no marketing suffixes.
url
let url: URL?
A page the user can visit to learn who you are. Optional, but shown as a link on the detail page when present.
Methods
encode(to:)
func encode(to encoder: any Encoder) throws