<!--
{
  "availability" : [
    "iOS: 15.4 -",
    "iPadOS: 15.4 -",
    "macCatalyst: 15.4 -"
  ],
  "documentType" : "symbol",
  "framework" : "Assignables",
  "identifier" : "/documentation/Assignables",
  "metadataVersion" : "0.1.0",
  "role" : "Framework",
  "symbol" : {
    "kind" : "Framework",
    "modules" : [
      "Assignables"
    ],
    "preciseIdentifier" : "Assignables"
  },
  "title" : "Assignables"
}
-->

# Assignables

A framework that contains wrappers for a PDF to allow creation
of an assessment and student work on that assessment.

## Overview

An [`AssignableDocument`](/documentation/Assignables/AssignableDocument) is a document that contains a base PDF and
stores added markup, annotations, questions, and scoring options
for that PDF.

This framework focuses on the student and teacher experience.
Teachers can assign the document to a student by creating
an [`AssignedWorkDocument`](/documentation/Assignables/AssignedWorkDocument) from the [`AssignableDocument`](/documentation/Assignables/AssignableDocument).
In addition to those data types, Assignables also provides SwiftUI
view classes to enable editing of those documents in your own views.

Once a student completes their work, they can return it to the
teacher to be scored and to receive comments on their work.

Authorship is important at each of these steps, so Assignables
supports attribution of changes to any document using types
that conform to [`UserIdentity`](/documentation/Assignables/UserIdentity).

Since teachers may collaborate on making an assignable or scoring
student works, or students might collaborate on a document,
both document types support merging copies of the document with
any other copy of the same document.

## Topics

### Assignable document

[`AssignableDocument`](/documentation/Assignables/AssignableDocument)

An assignable document is an augmented PDF that allows teachers to mark up
the PDF with the intention of students taking the assessment.

[`AssignedWorkDocument`](/documentation/Assignables/AssignedWorkDocument)

An assigned work document is a document that contains taker and
scorer markup specific to a taker. It also contains a copy of the assignable
document upon which it is based.

[`Assignable`](/documentation/Assignables/Assignable)

Documents conforming to this protocol can be assigned to a user.

### Configuration

[`AssignableDocumentConfiguration`](/documentation/Assignables/AssignableDocumentConfiguration)

A type that specifies the options for an assignable document.

[`AssignedWorkDocumentConfiguration`](/documentation/Assignables/AssignedWorkDocumentConfiguration)

A type that specifies the score of a document.

### Presentation

[`AssignableDocumentView`](/documentation/Assignables/AssignableDocumentView)

SwiftUI View to display an `AssignableDocument`.

[`AssignedWorkDocumentView`](/documentation/Assignables/AssignedWorkDocumentView)

SwiftUI View to display an `AssignedWorkDocument`

### Document elements

[`DocumentElement`](/documentation/Assignables/DocumentElement)

Represents an element that is contained within a document.
Such elements can have identifiers that uniquely identify
them within a document.

[`BasicDocumentElementID`](/documentation/Assignables/BasicDocumentElementID)

A default implementation for a document element identifier.

[`DocumentElementID`](/documentation/Assignables/DocumentElementID)

An identifier for an element in a document.

[`AssignableDocumentElement`](/documentation/Assignables/AssignableDocumentElement)

An element of an [`AssignableDocument`](/documentation/Assignables/AssignableDocument).

[`AssignedWorkDocumentElement`](/documentation/Assignables/AssignedWorkDocumentElement)

An element of an [`AssignedWorkDocument`](/documentation/Assignables/AssignedWorkDocument).

### Mergeable document

[`MergeableDocument`](/documentation/Assignables/MergeableDocument)

Documents conforming to this protocol can merge several
copies of the document into a single document.

[`MergeablePartsContainerPartID`](/documentation/Assignables/MergeablePartsContainerPartID)

The ID of a part in a `MergeablePartsContainer`.

[`MergeableDocumentPage`](/documentation/Assignables/MergeableDocumentPage)

Types conforming to this protocol indicate that they are
a page in a [`MergeableDocument`](/documentation/Assignables/MergeableDocument) conforming object.

[`MergeablePartsContainer`](/documentation/Assignables/MergeablePartsContainer)

Objects conforming to this protocol allow
merging in other replicas of themselves or
merging in individual parts of themselves.

[`DocumentThumbnail`](/documentation/Assignables/DocumentThumbnail)

A structure that contains an image of an entire
page or a portion of a page and the ID of the
page the image is from.

### Identity

[`UserIdentity`](/documentation/Assignables/UserIdentity)

Types conforming to this protocol can act as
user identities for editors of a document.

[`AnonymousUserIdentity`](/documentation/Assignables/AnonymousUserIdentity)

A user identity for unknown editors.

[`AnyUserIdentity`](/documentation/Assignables/AnyUserIdentity)

A user identity that performs type erasure by wrapping another user identity.

[`StringUserIdentity`](/documentation/Assignables/StringUserIdentity)

A user identity defined by a string.

[`UserIdentityTypeRegistry`](/documentation/Assignables/UserIdentityTypeRegistry)

A registry for user identity types.
Assignable documents and document elements store user
identity data as `Data` objects. In order for that data to
be deserialized, the type to deserialize it as needs to be
known to [`UserIdentityTypeRegistry`](/documentation/Assignables/UserIdentityTypeRegistry).
Without registration of the user identity, custom types
won’t be deserializable.

[`UserIdentityFactory`](/documentation/Assignables/UserIdentityFactory)

A type that contains helpers for creating user identity objects.



---

Copyright &copy; 2026 Apple Inc. All rights reserved. | [Terms of Use](https://www.apple.com/legal/internet-services/terms/site.html) | [Privacy Policy](https://www.apple.com/privacy/privacy-policy)