<!--
{
  "availability" : [
    "iOS: 17.0.0 -",
    "iPadOS: 17.0.0 -",
    "macOS: 14.0.0 -",
    "tvOS: 17.0.0 -",
    "visionOS: 1.0.0 -",
    "watchOS: 10.0.0 -"
  ],
  "documentType" : "symbol",
  "framework" : "StoreKit",
  "identifier" : "/documentation/StoreKit/SubscriptionStoreControlStyle",
  "metadataVersion" : "0.1.0",
  "role" : "Protocol",
  "symbol" : {
    "kind" : "Protocol",
    "modules" : [
      "StoreKit",
      "SwiftUI"
    ],
    "preciseIdentifier" : "s:17_StoreKit_SwiftUI012SubscriptionA12ControlStyleP"
  },
  "title" : "SubscriptionStoreControlStyle"
}
-->

# SubscriptionStoreControlStyle

A type that specifies the appearance and interaction of controls in the subscription store view instances within the view hierarchy.

```
@MainActor @preconcurrency protocol SubscriptionStoreControlStyle
```

## Overview

Use the <doc://com.apple.documentation/documentation/SwiftUI/View/subscriptionStoreControlStyle(_:)> view modifier to configure the subscription store control style for a view hierarchy.

```swift
SubscriptionStoreView(groupID: "SAMPLE")
    .subscriptionStoreControlStyle(.prominentPicker)
```

You can also configure the control placement using the <doc://com.apple.documentation/documentation/SwiftUI/View/subscriptionStoreControlStyle(_:placement:)> view modifier.

### Create custom styles

To create a custom style, declare a type that conforms to the `SubscriptionStoreControlStyle` protocol and implement the required [`makeBody(configuration:)`](/documentation/StoreKit/SubscriptionStoreControlStyle/makeBody(configuration:)) method. For example, you can define a style that adds price comparison captions to buttons.

```swift
struct PriceComparisonButtonsSubscriptionStoreControlStyle: SubscriptionStoreControlStyle {

    func makeBody(configuration: Configuration) -> some View {
        // Return a view displaying a captioned button for each option.
    }
}
```

Inside the method, use the `configuration` parameter, which is a [`SubscriptionStoreControlStyleConfiguration`](/documentation/StoreKit/SubscriptionStoreControlStyleConfiguration) value, to get the properties of the control, such as the subscriptions to merchandise. For examples that show constructing a view from the configuration value, see [`makeBody(configuration:)`](/documentation/StoreKit/SubscriptionStoreControlStyle/makeBody(configuration:)).

The subscription store control style protocol has a [`Placement`](/documentation/StoreKit/SubscriptionStoreControlStyle/Placement) associated type, which represents the placements that the style supports. To optionally restrict the placements your custom style supports, explicitly declare a type alias named `Placement`. For more information about restricting placements, see [`SubscriptionStoreControlPlacement`](/documentation/StoreKit/SubscriptionStoreControlPlacement). If you don’t declare the type alias, your custom style automatically uses the [`AutomaticSubscriptionStoreControlPlacement`](/documentation/StoreKit/AutomaticSubscriptionStoreControlPlacement) as its [`Placement`](/documentation/StoreKit/SubscriptionStoreControlStyle/Placement) associated type.

The following code example declares a `Placement` type alias:

```swift
struct PriceComparisonButtonsSubscriptionStoreControlStyle: SubscriptionStoreControlStyle {

    // Support the same placements as the standard buttons style.
    typealias Placement = ButtonsSubscriptionStoreControlStyle.Placement

    func makeBody(configuration: Configuration) -> some View {
        // Return a view displaying a captioned button for each option.
    }
}
```

To provide easy access to the new style, declare a corresponding static variable in an extension to `SubscriptionStoreControlStyle`.

```swift
extension SubscriptionStoreControlStyle where Self == 
PriceComparisonButtonsSubscriptionStoreControlStyle {
    static var priceComparisonButtons: Self { Self() }
}
```

Then, use your custom style as follows:

```swift
SubscriptionStoreView(groupID: "SAMPLE")
    .subscriptionStoreControlStyle(.priceComparisonButtons)
```

## Topics

### Getting built-in subscription store control styles

[`automatic`](/documentation/StoreKit/SubscriptionStoreControlStyle/automatic)

A subscription store control style that resolves its appearance automatically, based on the current context.

[`buttons`](/documentation/StoreKit/SubscriptionStoreControlStyle/buttons)

A subscription store control style that displays a subscribe button for each subscription plan.

[`picker`](/documentation/StoreKit/SubscriptionStoreControlStyle/picker)

A subscription store control style that displays subscription plans as a picker control, with a single button to subscribe.

[`prominentPicker`](/documentation/StoreKit/SubscriptionStoreControlStyle/prominentPicker)

A subscription store control style that displays subscription plans as a prominent picker control, with a single button to subscribe.

[`pagedPicker`](/documentation/StoreKit/SubscriptionStoreControlStyle/pagedPicker)

A subscription store control style that displays subscription plans as a paged picker control, with a single button to subscribe.

[`pagedProminentPicker`](/documentation/StoreKit/SubscriptionStoreControlStyle/pagedProminentPicker)

A subscription store control style that displays subscription plans as a prominent paged picker control, with a single button to subscribe.

[`compactPicker`](/documentation/StoreKit/SubscriptionStoreControlStyle/compactPicker)

A subscription store control style that displays subscription plans as a compact control, with a single button to subscribe.

### Creating custom subscription store control styles

[`makeBody(configuration:)`](/documentation/StoreKit/SubscriptionStoreControlStyle/makeBody(configuration:))

Creates a view that represents the body of a subscription store control.

[`SubscriptionStoreControlStyle.Configuration`](/documentation/StoreKit/SubscriptionStoreControlStyle/Configuration)

The properties of a subscription store control that includes the list of auto-renewable subscriptions to merchandise.

[`SubscriptionStoreControlStyle.SubscribeButton`](/documentation/StoreKit/SubscriptionStoreControlStyle/SubscribeButton)

A button for subscribing to an in-app subscription.

[`SubscriptionStoreControlStyle.SubscriptionPicker`](/documentation/StoreKit/SubscriptionStoreControlStyle/SubscriptionPicker)

A composite control for selecting a subscription option and confirming the subscription.

[`SubscriptionStoreControlStyle.SubscriptionPickerOption`](/documentation/StoreKit/SubscriptionStoreControlStyle/SubscriptionPickerOption)

A subscription option within a subscription picker control.

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

A placement for a subscription store control in a store view.

[`Placement`](/documentation/StoreKit/SubscriptionStoreControlStyle/Placement)

The placement of subscription controls in a subscription store.

[`Body`](/documentation/StoreKit/SubscriptionStoreControlStyle/Body)

A view that represents the body of a subscription store control.

### Supporting types

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

The default in-app subscription store control style that resolves its appearance based on the view’s context.

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

A subscription store control style that displays a subscribe button for each subscription plan.

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

A subscription store control style that displays subscription plans as a picker control, with a single button to subscribe.

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

A subscription store control style that displays subscription plans as a prominent picker control, with a single button to subscribe.

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

A subscription store control style that displays subscription plans as a compact picker control, with a single button to subscribe.

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

A subscription store control style that displays subscription plans as a paged picker control, with a single button to subscribe.

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

A subscription store control style that displays subscription plans as a paged prominent picker control, with a single button to subscribe.

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

A system-defined placement for a subscription store view.



---

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)