---
title: "PSPDFKit 6 Migration Guide | iOS"
canonical_url: "https://www.nutrient.io/guides/ios/migration-guides/pspdfkit-6-migration-guide/"
md_url: "https://www.nutrient.io/guides/ios/migration-guides/pspdfkit-6-migration-guide.md"
last_updated: "2026-06-08T09:14:14.405Z"
description: "Learn about the API changes and migration steps for PSPDFKit for iOS 6.0, including updates to annotation, bookmark, and form field methods."
---

[PSPDFKit&nbsp;6 for iOS is our latest framework update](https://www.nutrient.io/blog/pspdfkit-ios-6-0/).

## iOS and Xcode Requirements

With PSPDFKit&nbsp;6 for iOS, we dropped support for iOS&nbsp;8. We follow [our usual pattern](https://www.nutrient.io/../../announcements/version-support) of supporting n-1 major iOS versions, which currently spans across iOS&nbsp;9.0, 9.1, 9.2, 9.3, and 10.0. This build also requires Xcode&nbsp;8. Xcode&nbsp;8 runs on macOS 10.11 or 10.12, and we recommend macOS Sierra&nbsp;10.12 or higher.

If you require support for iOS&nbsp;8, we updated PSPDFKit&nbsp;5 with more iOS&nbsp;10-related fixes, and you’re free to continue using this version until you can drop the old OS requirements. Note that PSPDFKit&nbsp;5 works best with Xcode&nbsp;7.3.1, and building it with Xcode&nbsp;8 isn’t officially supported.

## Deprecations

As PSPDFKit 6 for iOS is a major release, previously deprecated methods have been removed. While working on new features and improvements, we added new deprecations throughout the SDK. These deprecations include a message telling you what to use instead. If you find some of the methods you were previously using marked as deprecated, check out the message and the header of the class.

## Breaking Changes

In addition to the deprecations, we also worked on a couple of features that fundamentally change the way things work, which makes deprecating the old APIs no longer practical, and which would have had an impact on the new APIs. As we believe the current APIs should be the best ones possible, there are some cases where we introduced breaking changes. We tried to keep the amount of breaking changes to a minimum, and we include as many breaking changes as possible in major releases so that you only need to migrate things once. We put a lot of effort into designing the new APIs so that we can keep improving the underlying components throughout the next year without any other breaking changes, and we’ll do our best to stick with this approach.

Below you’ll find a list of these changes, along with instructions on how to migrate your existing code.

## Permissions

iOS 10 requires new keys in the `Info.plist` if you compiled with Xcode 8. This is a change by Apple but it’s still worth mentioning, since missing it could crash your app or get you rejected. It’s easy to add — see our [permissions](https://www.nutrient.io/../../getting-started/permissions) guide for details.

## Document Saving

We unified our document-saving logic so that there are only two methods on [`PSPDFDocument`](https://www.nutrient.io/api/ios/documentation/pspdfkit/document) to save a document, annotations, and bookmarks, and there are no extra methods for annotation saving. `saveAnnotationsWithError:` has been integrated into [`save:`](https://www.nutrient.io/api/ios/documentation/pspdfkit/document/save(options:)), and `saveAnnotationsWithCompletionBlock:` has been unified with [`saveWithCompletionHandler:`](https://www.nutrient.io/api/ios/documentation/pspdfkit/pspdfdocument/savewithoptions:completionhandler:). These methods can safely be replaced with their new unified variants.

## Page Index

We streamlined the use of `page`, `pageIndex`, and other similar wordings. All the properties and parameters that deal with page numbers now use the wording `pageIndex`. This clarifies that the parameter is not a page object of some sort, but rather the index that identifies a given page. It also plays nicely with the naming conventions of Swift 3.

## Rendering and Caching

We redesigned our APIs when it comes to rendering and caching to simplify use and improve performance. Throughout the next year, we’ll continue making performance improvements that have been made possible by these changes. If you don’t do any custom rendering or caching, there are no changes required to make use of this. However, if you previously made calls to [`PSPDFRenderQueue`](https://www.nutrient.io/api/ios/documentation/pspdfkit/renderqueue), `PSPDFRenderJob`, or [`PSPDFCache`](https://www.nutrient.io/api/ios/documentation/pspdfkit/pdfcache) yourself, then there’s a good chance you’ll have to update your code to use PSPDFKit 6. Additionally, PSPDFKit now automatically chooses the best rendering mode for you, so the `renderingMode` property on [`PSPDFConfiguration`](https://www.nutrient.io/api/ios/documentation/pspdfkitui/pdfconfiguration) is no longer needed and has been removed. Look at the two most relevant changes below; if you need more details on the rendering and caching changes, look at the [rendering and caching](https://www.nutrient.io/../../getting-started/rendering-pdf-pages#rendering-and-caching) guide.

### Requesting an Image

`PSPDFRenderJob` is no longer available, and requesting an image is now a two-step process. First, configure a [`PSPDFRenderRequest`](https://www.nutrient.io/api/ios/documentation/pspdfkit/renderrequest) and specify the parameters of the image you’re requesting. Then, create a [`PSPDFRenderTask`](https://www.nutrient.io/api/ios/documentation/pspdfkit/rendertask) with this request and hand it over to the queue. The task is used to influence the actual rendering by things like the priority of the request or by canceling a task you no longer need.

### Caching

The changes to [`PSPDFCache`](https://www.nutrient.io/api/ios/documentation/pspdfkit/pdfcache) are of a similar nature: Instead of passing a number of parameters to the cache directly, you now use the same [`PSPDFRenderRequest`](https://www.nutrient.io/api/ios/documentation/pspdfkit/renderrequest) and pass it to the cache to get a cached image. The biggest change, however, is that the cache no longer is another module next to the render queue; instead, now the render queue accesses the cache automatically. So for most requests, you no longer need to access the cache directly; rather, always schedule a render task, and the render queue will make sure to serve you with a cached image quickly if one is available. Most people who used the cache previously have code that first checks the cache, and if the cache didn’t provide the required data, they scheduled a render job. With PSPDFKit 6, you most likely can remove the first part and immediately create a render request and schedule a render task with this.

## Plugins

The `PSPDFPlugin` API has been removed.

Dynamic plugin lookup had a noticeable impact on app launch time, especially in bigger apps. As a result, we decided to remove it in favor of explicit configuration patterns. We believe this gives the API more clarity and predictability.

### Stylus Drivers

The `PSPDFStylusDriver` stylus driver protocol doesn’t extend `PSPDFPlugin` anymore. To update your stylus drivers:

- Update the designated initializer to `- (instancetype)initWithDelegate:(id<PSPDFStylusDriverDelegate>)delegate`.

- Change the name of `pluginInfo` method to `driverInfo`.

- Update keys in your `driverInfo` dictionary — `PSPDFPluginIdentifierKey` becomes `PSPDFStylusDriverIdentifierKey`, and `PSPDFPluginIdentifierKey` and `PSPDFPluginProtocolVersionKey` should be removed.

Your stylus drivers have to be registered with the `PSPDFKitGlobal.sharedInstance.stylusManager.availableDriverClasses` property.

With the previous plugin architecture, you could provide your own instance of `PSPDFStylusManager`, which is now no longer needed because our default implementation should cover all scenarios. Let us know if you relied on custom implementation.

#### Other Components That Used to Conform to PSPDFPlugin

You may want to provide your custom implementation for the following `PSPDFKit` components:

- `id<PSPDFFileManager> fileManager` and coordinated file manager

- `id<PSPDFApplicationPolicy> policy`

If so, you can pass your own instances in the `options` dictionary with `+[PSPDFKitGlobal setLicenseKey:options:]` using the following keys: `PSPDFApplicationPolicyKey`, [`PSPDFFileManagerKey`](https://www.nutrient.io/api/ios/documentation/pspdfkit/sdk/setting/filemanager), and [`PSPDFCoordinatedFileManagerKey`](https://www.nutrient.io/api/ios/documentation/pspdfkit/sdk/setting/coordinatedfilemanager).

[`PSPDFMultimediaViewController`](https://www.nutrient.io/api/ios/documentation/pspdfkitui/multimediaviewcontroller) used to support plugin architecture. Now you can customize it by subclassing [`PSPDFGalleryViewController`](https://www.nutrient.io/api/ios/documentation/pspdfkitui/galleryviewcontroller) and [registering your subclass](https://www.nutrient.io/../../getting-started/overriding-classes).

## Framework Headers

We recommend you include our framework in your app using the `#import <PSPDFKit/PSPDFKit.h>` umbrella header or via the `@import PSPDFKit` module. We don’t recommend including one or more individual files on their own.
---

## Related pages

- [14 9 Migration Guide](/guides/ios/migration-guides/14-9-migration-guide.md)
- [14 2 Migration Guide](/guides/ios/migration-guides/14-2-migration-guide.md)
- [Migrate to electronic signatures](/guides/ios/migration-guides/migrating-to-electronic-signatures.md)
- [Migrating To Advanced Digital Signatures Api](/guides/ios/migration-guides/migrating-to-advanced-digital-signatures-api.md)
- [Pspdfkit 10 3 Migration Guide](/guides/ios/migration-guides/pspdfkit-10-3-migration-guide.md)
- [Pspdfkit 10 4 Migration Guide](/guides/ios/migration-guides/pspdfkit-10-4-migration-guide.md)
- [Migrating From Apple Pdfkit](/guides/ios/migration-guides/migrating-from-apple-pdfkit.md)
- [Pspdfkit 11 3 Migration Guide](/guides/ios/migration-guides/pspdfkit-11-3-migration-guide.md)
- [Pspdfkit 10 Migration Guide](/guides/ios/migration-guides/pspdfkit-10-migration-guide.md)
- [Pspdfkit 12 2 Migration Guide](/guides/ios/migration-guides/pspdfkit-12-2-migration-guide.md)
- [Pspdfkit 11 5 Migration Guide](/guides/ios/migration-guides/pspdfkit-11-5-migration-guide.md)
- [Pspdfkit 13 3 Migration Guide](/guides/ios/migration-guides/pspdfkit-13-3-migration-guide.md)
- [Pspdfkit 13 Migration Guide](/guides/ios/migration-guides/pspdfkit-13-migration-guide.md)
- [Pspdfkit 12 3 Migration Guide](/guides/ios/migration-guides/pspdfkit-12-3-migration-guide.md)
- [Pspdfkit 3 Migration Guide](/guides/ios/migration-guides/pspdfkit-3-migration-guide.md)
- [Pspdfkit 4 Migration Guide](/guides/ios/migration-guides/pspdfkit-4-migration-guide.md)
- [Pspdfkit 12 Migration Guide](/guides/ios/migration-guides/pspdfkit-12-migration-guide.md)
- [Pspdfkit 5 Migration Guide](/guides/ios/migration-guides/pspdfkit-5-migration-guide.md)
- [Pspdfkit 6 5 Migration Guide](/guides/ios/migration-guides/pspdfkit-6-5-migration-guide.md)
- [Pspdfkit 11 4 Migration Guide](/guides/ios/migration-guides/pspdfkit-11-4-migration-guide.md)
- [Pspdfkit 7 6 Migration Guide](/guides/ios/migration-guides/pspdfkit-7-6-migration-guide.md)
- [Pspdfkit 9 2 Migration Guide](/guides/ios/migration-guides/pspdfkit-9-2-migration-guide.md)
- [Pspdfkit 9 4 Migration Guide](/guides/ios/migration-guides/pspdfkit-9-4-migration-guide.md)
- [Upgrading](/guides/ios/getting-started/upgrading.md)
- [Pspdfkit 9 5 Migration Guide](/guides/ios/migration-guides/pspdfkit-9-5-migration-guide.md)
- [Pspdfkit 9 3 Migration Guide](/guides/ios/migration-guides/pspdfkit-9-3-migration-guide.md)
- [PSPDFKit 8 migration guide for iOS developers](/guides/ios/migration-guides/pspdfkit-8-migration-guide.md)
- [Pspdfkit 9 Migration Guide](/guides/ios/migration-guides/pspdfkit-9-migration-guide.md)
- [Migrate to PSPDFKit 7 with ease](/guides/ios/migration-guides/pspdfkit-7-migration-guide.md)

