<!--
{
  "availability" : [
    "iOS: 6.0.0 -",
    "iPadOS: 6.0.0 -",
    "macCatalyst: 13.0.0 -",
    "macOS: 11.0.0 -"
  ],
  "documentType" : "symbol",
  "framework" : "StoreKit",
  "identifier" : "/documentation/StoreKit/SKStoreProductViewController",
  "metadataVersion" : "0.1.0",
  "role" : "Class",
  "symbol" : {
    "kind" : "Class",
    "modules" : [
      "StoreKit"
    ],
    "preciseIdentifier" : "c:objc(cs)SKStoreProductViewController"
  },
  "title" : "SKStoreProductViewController"
}
-->

# SKStoreProductViewController

A view controller that provides a page where customers can purchase media from the App Store.

```
@MainActor class SKStoreProductViewController
```

## Overview

To display a store for customers to purchase media from the App Store, follow these steps:

1. Create an `SKStoreProductViewController` object and set its ``doc://com.apple.storekit/documentation/StoreKit/SKStoreProductViewController/delegate``.
1. Indicate a specific product to sell by passing its iTunes item identifier to the ``doc://com.apple.storekit/documentation/StoreKit/SKStoreProductViewController/loadProduct(withParameters:completionBlock:)`` method.
1. Present the view controller modally from another view controller in your app. Your delegate dismisses the view controller when the customer completes the purchase.

Present the `SKStoreProductViewController` object immediately when someone triggers an interaction, such as tapping a Buy button. Load the product information before presenting the view controller to ensure a seamless user experience.

This class ignores <doc://com.apple.documentation/documentation/UIKit/UIViewController/modalPresentationStyle> settings, and those settings have no impact on the sheet’s presentation.

To recommend another app without displaying a full product page, and to recommend an App Clip’s corresponding app from within the App Clip, use [`SKOverlay`](/documentation/StoreKit/SKOverlay).

> Note:
> In a compatible iPad or iPhone app running in visionOS, this method displays a minimal sheet to enable an app purchase or to launch the App Store for more information. For an in-line experience that’s consistent across platforms, use ``doc://com.apple.storekit/documentation/StoreKit/SKOverlay`` instead.

### Prevent exceptions

The `SKStoreProductViewController` class doesn’t support subclassing or embedding, and must be used as-is.

> Important:
> If you compile with the iOS 13 SDK, attempting to instantiate a subclass of `SKStoreProductViewController` results in a runtime exception.

This class throws the following runtime exceptions:

- term SKUnsupportedClassException: Occurs if the app attempts to instantiate a subclass of `SKStoreProductViewController`.
- term SKUnsupportedPresentationException: Occurs if the app attempts to use an unsupported presentation mode for `SKStoreProductViewController`, such as embedding it as a subview controller or attempting to use it in a popover.

## Topics

### Setting a delegate

[`delegate`](/documentation/StoreKit/SKStoreProductViewController/delegate)

The store view controller’s delegate.

[`SKStoreProductViewControllerDelegate`](/documentation/StoreKit/SKStoreProductViewControllerDelegate)

A protocol to call when the customer dismisses the store screen.

### Loading a new product screen

[Offering media for sale in your app](/documentation/StoreKit/offering-media-for-sale-in-your-app)

Allow users to purchase media in the App Store from within your app.

[`loadProduct(withParameters:completionBlock:)`](/documentation/StoreKit/SKStoreProductViewController/loadProduct(withParameters:completionBlock:))

Loads a new product screen to display.

[`loadProduct(withParameters:impression:completionBlock:)`](/documentation/StoreKit/SKStoreProductViewController/loadProduct(withParameters:impression:completionBlock:))

[`loadProduct(parameters:impression:)`](/documentation/StoreKit/SKStoreProductViewController/loadProduct(parameters:impression:))

[`loadProduct(parameters:impression:reengagementURL:)`](/documentation/StoreKit/SKStoreProductViewController/loadProduct(parameters:impression:reengagementURL:))

[Product Dictionary Keys](/documentation/StoreKit/product-dictionary-keys)

Keys for identifying products and the tokens for affiliates and campaigns.



---

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)
