<!--
{
  "availability" : [
    "macOS: 27.0.0 -"
  ],
  "documentType" : "symbol",
  "framework" : "FSKit",
  "identifier" : "/documentation/FSKit/FSVolume/Handler",
  "metadataVersion" : "0.1.0",
  "role" : "Protocol",
  "symbol" : {
    "kind" : "Protocol",
    "modules" : [
      "FSKit"
    ],
    "preciseIdentifier" : "c:objc(pl)FSVolumeHandler"
  },
  "title" : "FSVolume.Handler"
}
-->

# FSVolume.Handler

Methods that all volumes implement to provide required capabilities.

```
protocol Handler : FSVolume.CommonOperations, FSVolume.PathConfOperations
```

## Overview

Conform to this protocol in your subclass of [`FSVolume`](/documentation/FSKit/FSVolume).
To provide additional capabilities, conform to the other `FSVolume` handler protocols, such as [`FSVolume.OpenCloseHandler`](/documentation/FSKit/FSVolume/OpenCloseHandler) and [`FSVolume.ReadWriteHandler`](/documentation/FSKit/FSVolume/ReadWriteHandler).

> Note: This protocol extends ``doc://FSKit/documentation/FSKit/FSVolume/PathConfOperations``, so your volume implementation must also conform to that protocol.

> Important: This protocol replaces the ``doc://FSKit/documentation/FSKit/FSVolume/Operations`` protocol. It exposes the same functionality, while using ``doc://FSKit/documentation/FSKit/FSVolumeHandlerResult`` objects. These objects add the ability to reply with ``doc://FSKit/documentation/FSKit/FSItem/Attributes`` and free space from the relevant methods.

## Topics

### Handling activation and deactivation

[`class FSItem`](/documentation/FSKit/FSItem)

A distinct object in a file hierarchy, such as a file, directory, symlink, socket, and more.

[`class FSActivateResult`](/documentation/FSKit/FSActivateResult)

The result of an activate call.

[`struct FSDeactivateOptions`](/documentation/FSKit/FSDeactivateOptions)

Options that affect the behavior of deactivate methods.

### Mounting and unmounting

[`func mount(options: FSTaskOptions, replyHandler: ((any Error)?) -> Void)`](/documentation/FSKit/FSVolume/Handler/mount(options:replyHandler:))

[`func unmount(replyHandler: () -> Void)`](/documentation/FSKit/FSVolume/Handler/unmount(replyHandler:))

### Working with items

[`func createItem(named: FSFileName, type: FSItem.ItemType, in: FSItem, attributes: FSItem.SetAttributesRequest, context: FSContext, replyHandler: (FSCreateItemResult?, (any Error)?) -> Void)`](/documentation/FSKit/FSVolume/Handler/createItem(named:type:in:attributes:context:replyHandler:))

Creates a new file or directory item.

[`class FSFileName`](/documentation/FSKit/FSFileName)

The name of a file, expressed as a data buffer.

[`enum ItemType`](/documentation/FSKit/FSItem/ItemType)

An enumeration of item types, such as file, directory, or symbolic link.

[`class SetAttributesRequest`](/documentation/FSKit/FSItem/SetAttributesRequest)

A request to set attributes on an item.

[`class FSCreateItemResult`](/documentation/FSKit/FSCreateItemResult)

The result of a create-item call.

[`func lookupItem(named: FSFileName, in: FSItem, context: FSContext, replyHandler: (FSLookupItemResult?, (any Error)?) -> Void)`](/documentation/FSKit/FSVolume/Handler/lookupItem(named:in:context:replyHandler:))

Looks up an item within a directory.

[`class FSLookupItemResult`](/documentation/FSKit/FSLookupItemResult)

The result of an item lookup call.

[`func removeItem(FSItem, named: FSFileName, from: FSItem, context: FSContext, replyHandler: (FSRemoveItemResult?, (any Error)?) -> Void)`](/documentation/FSKit/FSVolume/Handler/removeItem(_:named:from:context:replyHandler:))

Removes an existing item from a given directory.

[`class FSRemoveItemResult`](/documentation/FSKit/FSRemoveItemResult)

The result of a remove-item call.

[`func renameItem(FSItem, inDirectory: FSItem, named: FSFileName, to: FSFileName, inDirectory: FSItem, overItem: FSItem?, context: FSContext, replyHandler: (FSRenameItemResult?, (any Error)?) -> Void)`](/documentation/FSKit/FSVolume/Handler/renameItem(_:inDirectory:named:to:inDirectory:overItem:context:replyHandler:))

Renames an item from one path in the file system to another.

[`class FSRenameItemResult`](/documentation/FSKit/FSRenameItemResult)

The result of a rename-item call.

[`func reclaimItem(FSItem, replyHandler: ((any Error)?) -> Void)`](/documentation/FSKit/FSVolume/Handler/reclaimItem(_:replyHandler:))

### Working with links

[`func createLink(to: FSItem, named: FSFileName, in: FSItem, context: FSContext, replyHandler: (FSCreateLinkResult?, (any Error)?) -> Void)`](/documentation/FSKit/FSVolume/Handler/createLink(to:named:in:context:replyHandler:))

Creates a new hard link.

[`class FSCreateLinkResult`](/documentation/FSKit/FSCreateLinkResult)

The result of a create-link call.

[`func createSymbolicLink(named: FSFileName, in: FSItem, attributes: FSItem.SetAttributesRequest, linkContents: FSFileName, context: FSContext, replyHandler: (FSCreateSymlinkResult?, (any Error)?) -> Void)`](/documentation/FSKit/FSVolume/Handler/createSymbolicLink(named:in:attributes:linkContents:context:replyHandler:))

Creates a new symbolic link.

[`class FSCreateSymlinkResult`](/documentation/FSKit/FSCreateSymlinkResult)

The result of a create-symlink call.

[`func readSymbolicLink(FSItem, context: FSContext, replyHandler: (FSReadSymlinkResult?, (any Error)?) -> Void)`](/documentation/FSKit/FSVolume/Handler/readSymbolicLink(_:context:replyHandler:))

Reads a symbolic link.

[`class FSReadSymlinkResult`](/documentation/FSKit/FSReadSymlinkResult)

The result of a read-symlink call.

### Working with attributes

[`func getAttributes(FSItem.GetAttributesRequest, of: FSItem, context: FSContext, replyHandler: (FSGetAttributesResult?, (any Error)?) -> Void)`](/documentation/FSKit/FSVolume/Handler/getAttributes(_:of:context:replyHandler:))

Fetches attributes for the given item.

[`class GetAttributesRequest`](/documentation/FSKit/FSItem/GetAttributesRequest)

A request to get attributes from an item.

[`class FSGetAttributesResult`](/documentation/FSKit/FSGetAttributesResult)

The result of a get-attributes call.

[`func setAttributes(FSItem.SetAttributesRequest, on: FSItem, context: FSContext, replyHandler: (FSSetAttributesResult?, (any Error)?) -> Void)`](/documentation/FSKit/FSVolume/Handler/setAttributes(_:on:context:replyHandler:))

Sets the given attributes on an item.

[`class SetAttributesRequest`](/documentation/FSKit/FSItem/SetAttributesRequest)

A request to set attributes on an item.

[`class FSSetAttributesResult`](/documentation/FSKit/FSSetAttributesResult)

The restlt of a set-attributes call.

### Inspecting directory contents

[`func enumerateDirectory(FSItem, startingAt: FSDirectoryCookie, verifier: FSDirectoryVerifier, attributes: FSItem.GetAttributesRequest?, packer: FSDirectoryEntryPacker, context: FSContext, replyHandler: (FSEnumerateDirectoryResult?, (any Error)?) -> Void)`](/documentation/FSKit/FSVolume/Handler/enumerateDirectory(_:startingAt:verifier:attributes:packer:context:replyHandler:))

Enumerates the contents of the given directory.

[`struct FSDirectoryCookie`](/documentation/FSKit/FSDirectoryCookie)

A value that indicates a location in a directory from which to enumerate.

[`struct FSDirectoryCookie`](/documentation/FSKit/FSDirectoryCookie)

A value that indicates a location in a directory from which to enumerate.

[`struct FSDirectoryVerifier`](/documentation/FSKit/FSDirectoryVerifier)

A tool to detect whether the directory contents changed since the last call to enumerate a directory.

[`struct FSDirectoryVerifier`](/documentation/FSKit/FSDirectoryVerifier)

A tool to detect whether the directory contents changed since the last call to enumerate a directory.

[`class FSDirectoryEntryPacker`](/documentation/FSKit/FSDirectoryEntryPacker)

An object used to provide items during a directory enumeration.

[`class FSEnumerateDirectoryResult`](/documentation/FSKit/FSEnumerateDirectoryResult)

The result of an enumerate-directory call.

### Performing synchronization

[`func synchronize(flags: FSSyncFlags, replyHandler: ((any Error)?) -> Void)`](/documentation/FSKit/FSVolume/Handler/synchronize(flags:replyHandler:))

[`enum FSSyncFlags`](/documentation/FSKit/FSSyncFlags)

Behavior flags for use with synchronization calls.

### Inspecting required volume properties

[`var supportedVolumeCapabilities: FSVolume.SupportedCapabilities`](/documentation/FSKit/FSVolume/Handler/supportedVolumeCapabilities)

[`class SupportedCapabilities`](/documentation/FSKit/FSVolume/SupportedCapabilities)

A type that represents capabilities supported by a volume, such as hard and symbolic links, journaling, and large file sizes.

[`var volumeStatistics: FSStatFSResult`](/documentation/FSKit/FSVolume/Handler/volumeStatistics)

A property that provides up-to-date statistics of the volume.

[`class FSStatFSResult`](/documentation/FSKit/FSStatFSResult)

A type used to report a volume’s statistics.

### Inspecting optional volume properties

[`struct MountOptions`](/documentation/FSKit/FSVolume/MountOptions)

Mount options to be requested from FSKit using the `requestedMountOptions` property.

### Supporting types

[`class FSContext`](/documentation/FSKit/FSContext)

A context object that provides information about the initiator of a file system operation.

### Instance Methods

[`func activateVolume(options: FSTaskOptions, replyHandler: (FSActivateResult?, (any Error)?) -> Void)`](/documentation/FSKit/FSVolume/Handler/activateVolume(options:replyHandler:))

Activates the volume using the specified options.

[`func deactivateVolume(options: FSDeactivateOptions, replyHandler: ((any Error)?) -> Void)`](/documentation/FSKit/FSVolume/Handler/deactivateVolume(options:replyHandler:))

Tears down a previously initialized volume instance.

## Relationships

### Inherits From

[`PathConfOperations`](/documentation/FSKit/FSVolume/PathConfOperations)

[`CommonOperations`](/documentation/FSKit/FSVolume/CommonOperations)

[`NSObjectProtocol`](/documentation/ObjectiveC/NSObjectProtocol)

---

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)