An AUID is an identifier which is unique to a runtime andor save data. While UUID is good for general use, this is good specifically for a single session.

This is only guaranteed to be unique per-session if used correctly. Any further uniqueness is not guaranteed.

The current implementation simply uses positive integers. However, it’s good practice to treat this as an opaque type in case the implementation changes in the future.

Creating a new ID

To create a new ID, you must call .next(), for a new ID to be generated and returned:

struct Person: Identifiable, Codable {
    var id: AppUniqueIdentifier = .next()
    let name: String

let person = Person(name: "Dax")

Encoding & Decoding an ID

AUIDs are encoded as simple integers. One can expect the above Person instance to be encoded like this:

    "id": 7,
    "name": "Dax"

AUID has built-in encoding and decoding, so nothing special need be done. Just use any Swift encoder/decoder, like this:

let jsonData = try JSONEncoder().encode(person)
let decodedPerson = try JSONDecoder().decode(Person.self, from: jsonData)
assert(person == decodedPerson)

Decoding an AUID assures that the ID is not used in any future calls to .next(). Encoding an AUID has no special behavior.


To create a string form of a given ID, simply call .description, or pass it to String(describing:):


If you have a string form of an ID already (e.g. one you got from calling .description), you may transform it back into an AppUniqueIdentifier with the .init(_:) initializer. Only valid ID strings will result in a new value; invalid ones result in nil. The subsystem will ensure that this ID is not returned by .next()

When you’re done with an ID

If you no longer wish to use an ID (for example, the concept it was tracking has been deleted by the user), then you may pass it to AppUniqueIdentifier.recycle(id:):

mutating func remove(_ person: Person) {


View Github