CINXE.COM

Auto-renewable Subscriptions - App Store - Apple Developer

<!DOCTYPE html> <html xmlns="https://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> <head> <meta charset="utf-8" /> <meta name="Author" content="Apple Inc." /> <meta name="viewport" content="width=device-width, initial-scale=1, viewport-fit=cover" /> <link rel="shortcut icon" href="/favicon.ico" /> <link rel="icon" href="/favicon.ico" /> <link rel="mask-icon" href="/apple-logo.svg" color="#333333"> <link rel="stylesheet" href="/assets/styles/global.dist.css?01172423298" type="text/css" /> <link rel="stylesheet" href="/assets/styles/dark-mode.css?17182448067" type="text/css" media="(prefers-color-scheme: dark)" data-color-scheme="dark" /> <link rel="stylesheet" href="/assets/styles/localization.css?39172414191" type="text/css" /> <script src="/assets/scripts/lib/jquery/jquery-3.6.0.min.js?17182448067"></script> <script src="/assets/scripts/settings.js?17182448067"></script> <script src="/assets/scripts/language-locales.js?17182448067"></script> <script src="/assets/scripts/DeveloperBreadcrumbs.js?05182434080"></script> <script async src="/assets/scripts/lib/jquery/jquery.retinate.js?17182448067"></script> <script async src="/assets/scripts/global.js?17182448067"></script> <script async src="/assets/scripts/global-logout.js?17182448067"></script> <link rel="stylesheet" href="https://www.apple.com/wss/fonts?family=SF+Pro&v=2" type="text/css" /> <link rel="stylesheet" href="https://www.apple.com/wss/fonts?family=SF+Pro+Icons&v=1" type="text/css" /> <link rel="stylesheet" href="https://www.apple.com/wss/fonts?family=SF+Mono&v=2" type="text/css" /> <link rel="stylesheet" href="https://www.apple.com/wss/fonts?family=Apple+Icons&amp;v=1" type="text/css" /> <title>Auto-renewable Subscriptions - App Store - Apple Developer</title> <meta name="omni_page" content="Auto-renewable Subscriptions - App Store - (English)" /> <meta name="Description" content="Provide a seamless experience for auto-renewable subscriptions in your apps. You’ll receive more revenue for qualifying subscriptions after one year, have greater pricing flexibility, and more." /> <meta property="og:locale" content="en_US" /> <meta property="og:site_name" content="Apple Developer" /> <meta property="og:type" content="website" /> <meta property="og:image" content="https://developer.apple.com/news/images/og/app-store-og.png" /> <meta property="og:title" content="Auto-renewable Subscriptions - App Store - Apple Developer" /> <meta property="og:description" content="Provide a seamless experience for auto-renewable subscriptions in your apps. You’ll receive more revenue for qualifying subscriptions after one year, have greater pricing flexibility, and more." /> <meta property="og:url" content="https://developer.apple.com/app-store/subscriptions/" /> <meta name="twitter:card" content="summary_large_image" /> <meta name="twitter:image" content="https://developer.apple.com/news/images/og/app-store-og-twitter.png" /> <meta name="twitter:description" content="Provide a seamless experience for auto-renewable subscriptions in your apps. You’ll receive more revenue for qualifying subscriptions after one year, have greater pricing flexibility, and more." /> <meta name="twitter:title" content="Auto-renewable Subscriptions - App Store - Apple Developer" /> <meta name="twitter:url" content="https://developer.apple.com/app-store/subscriptions/"> <link rel="alternate" href="https://developer.apple.com/kr/app-store/subscriptions/" hreflang="ko-KR" /> <link rel="alternate" href="https://developer.apple.com/jp/app-store/subscriptions/" hreflang="ja-JP" /> <link rel="alternate" href="https://developer.apple.com/cn/app-store/subscriptions/" hreflang="zh-CN" /> <link rel="alternate" href="https://developer.apple.com/app-store/subscriptions/" hreflang="en" /> <link rel="canonical" href="https://developer.apple.com/app-store/subscriptions/" /> <link rel="stylesheet" href="/app-store/styles/app-store.css" type="text/css"> <link rel="stylesheet" href="/app-store/subscriptions/styles/subscriptions.css" type="text/css"> </head> <body class="app-store dmf"> <script> const prefersDark = window.matchMedia("(prefers-color-scheme: dark)").matches; if (window.Settings.preferredColorScheme) { const colorTheme = (window.Settings.preferredColorScheme === 'auto') && !prefersDark ? 'light' : (window.Settings.preferredColorScheme === 'light') ? 'light' : 'dark' document.body.setAttribute('data-color-scheme', colorTheme); } else { document.body.setAttribute('data-color-scheme', prefersDark ? 'dark' : 'light'); } </script> <style> /* footer */ html body[data-color-scheme='dark'] #main section.section.section-resources.bg-alt {background-color:var(--fill-tertiary);color:var(--glyph-gray);} html body[data-color-scheme='dark'] .developer-router-links {background-color:var(--fill-tertiary);color:var(--glyph-gray);} html body[data-color-scheme='dark'] .footer {background-color:var(--fill-tertiary);color:var(--glyph-gray-tertiary);} /* body backgrounds */ body[data-color-scheme='dark'].dmf {background-color: #000;} html body[data-color-scheme='dark'].dmf .bg-alt {background-color:var(--fill-tertiary);} html body[data-color-scheme='dark'].dmf .bg-blue {background-color:var(--fill-blue-secondary);} html body[data-color-scheme='dark'].dmf .bg-green-blue {background:linear-gradient(135deg, #65976d 0%, #588ea4 100%)} html body[data-color-scheme='dark'].dmf .bg-yellow {background: linear-gradient(to bottom, var(--fill-tertiary) 0%, var(--fill-tertiary-alt) 100%);} html body[data-color-scheme='dark'].dmf .bg-light {background-color:var(--fill-secondary-alt);} html body[data-color-scheme='dark'].dmf .bg-gradient, html body[data-color-scheme='dark'].dmf .bg-grad {background:linear-gradient(to bottom, var(--dark) 0%, var(--fill-gray-secondary-alt) 100%);} html body[data-color-scheme='dark'].dmf .bg-grad-down {background:linear-gradient(to bottom, var(--dark) 0%, var(--fill-gray-secondary-alt) 100%);} html body[data-color-scheme='dark'].dmf .bg-grad-up {background:linear-gradient(to bottom, var(--fill-gray-secondary-alt) 0%, var(--dark) 100%);} html body[data-color-scheme='dark'].dmf .bg-blue-gradient, html body[data-color-scheme='dark'].dmf .bg-gradient-blue {background:linear-gradient(to bottom, var(--fill-blue-gradient-light) 0%, var(--fill-blue-gradient-dark) 100%);} html body[data-color-scheme='dark'].dmf .bg-blue-gradient-alt {background: linear-gradient(90deg, #061830 0%, #102d48 100%);} /* globalNav */ html body[data-color-scheme='dark'] #ac-globalnav {background: var(--fill-tertiary);} /* localNav */ html body[data-color-scheme='dark'] .localnav.localnav-scrim .localnav-background, html body[data-color-scheme='dark'] .localnav-scrim.localnav.localnav-background { background-color: rgba(29, 29, 31, 0.9); } @supports ((-webkit-backdrop-filter: initial) or (backdrop-filter: initial)) { html body[data-color-scheme='dark'] .localnav.localnav-scrim .localnav-background, html body[data-color-scheme='dark'] .localnav-scrim.localnav.localnav-background { background-color: rgba(29, 29, 31, 0.72); } } </style> <link rel="stylesheet" href="/assets/styles/globalnav.css?55202406207" type="text/css" /> <link rel="stylesheet" href="/assets/styles/suggest-lang.css?17182448067" type="text/css" /> <div id="suggest-lang" class="ribbon hide" lang="en"> <div class="ribbon-content-wrapper"> <div class="ribbon-content row"> <div class="column large-12 large-centered"> <p><a href="#" id="suggest-link" class="ribbon-link more">View in English</a></p> <button id="suggest-closer" class="icon icon-after icon-reset" aria-label="Dismiss language suggestion" tabindex="0"></button> </div> </div> </div> </div> <script src="/assets/scripts/suggest-lang.js?17182448067"></script> <aside id="ac-gn-segmentbar" class="ac-gn-segmentbar" lang="en-US" dir="ltr"> </aside> <input type="checkbox" id="ac-gn-menustate" class="ac-gn-menustate" /> <nav id="ac-globalnav" class="no-js" role="navigation" aria-label="Global" data-hires="false" data-analytics-region="global nav" lang="en-US" dir="ltr" data-www-domain="www.apple.com" data-store-locale="us" data-store-root-path="/us" data-store-api="/[storefront]/shop/bag/status" data-search-locale="en_US" data-search-suggestions-api="/search-services/suggestions/" data-search-defaultlinks-api="/search-services/suggestions/defaultlinks/" data-search-suggestions-enabled="false"> <div class="ac-gn-content"> <ul class="ac-gn-header"> <li class="ac-gn-item ac-gn-menuicon"> <label class="ac-gn-menuicon-label" for="ac-gn-menustate" aria-hidden="true"> <span class="ac-gn-menuicon-bread ac-gn-menuicon-bread-top"> <span class="ac-gn-menuicon-bread-crust ac-gn-menuicon-bread-crust-top"></span> </span> <span class="ac-gn-menuicon-bread ac-gn-menuicon-bread-bottom"> <span class="ac-gn-menuicon-bread-crust ac-gn-menuicon-bread-crust-bottom"></span> </span> </label> <a href="#ac-gn-menustate" role="button" class="ac-gn-menuanchor ac-gn-menuanchor-open" id="ac-gn-menuanchor-open"> <span class="ac-gn-menuanchor-label">Global Nav Open Menu</span> </a> <a href="#" role="button" class="ac-gn-menuanchor ac-gn-menuanchor-close" id="ac-gn-menuanchor-close"> <span class="ac-gn-menuanchor-label">Global Nav Close Menu</span> </a> </li> <li class="ac-gn-item ac-gn-apple"> <a class="ac-gn-link ac-gn-link-apple-developer" href="/" data-analytics-title="appledeveloper home" id="ac-gn-firstfocus-small"> <span class="ac-gn-link-text">Apple Developer</span> </a> </li> </ul> <div class="ac-gn-search-placeholder-container" role="search"> <div class="ac-gn-search ac-gn-search-small"> <a id="ac-gn-link-search-small" class="ac-gn-link" href="/search/" data-analytics-title="search" data-analytics-click="search" data-analytics-intrapage-link aria-label="Search"> <div class="ac-gn-search-placeholder-bar"> <div class="ac-gn-search-placeholder-input"> <div class="ac-gn-search-placeholder-input-text" aria-hidden="true"> <div class="ac-gn-link-search ac-gn-search-placeholder-input-icon"></div> <span class="ac-gn-search-placeholder">Search</span> </div> </div> <div class="ac-gn-searchview-close ac-gn-searchview-close-small ac-gn-search-placeholder-searchview-close"> <span class="ac-gn-searchview-close-cancel" aria-hidden="true">Cancel</span> </div> </div> </a> </div> </div> <ul class="ac-gn-list"> <li class="ac-gn-item ac-gn-apple"> <a class="ac-gn-link ac-gn-link-apple-developer" href="/" data-analytics-title="appledeveloper home" id="ac-gn-firstfocus"> <span class="ac-gn-link-text">Apple Developer</span> </a> </li> <li class="ac-gn-item ac-gn-item-menu ac-gn-news"> <a class="ac-gn-link ac-gn-link-news" href="/news/" data-analytics-title="news"> <span class="ac-gn-link-text">News</span> </a> </li> <li class="ac-gn-item ac-gn-item-menu ac-gn-discover"> <a class="ac-gn-link ac-gn-link-discover" href="/discover/" data-analytics-title="discover"> <span class="ac-gn-link-text">Discover</span> </a> </li> <li class="ac-gn-item ac-gn-item-menu ac-gn-design"> <a class="ac-gn-link ac-gn-link-design" href="/design/" data-analytics-title="design"> <span class="ac-gn-link-text">Design</span> </a> </li> <li class="ac-gn-item ac-gn-item-menu ac-gn-develop"> <a class="ac-gn-link ac-gn-link-develop" href="/develop/" data-analytics-title="develop"> <span class="ac-gn-link-text">Develop</span> </a> </li> <li class="ac-gn-item ac-gn-item-menu ac-gn-distribute"> <a class="ac-gn-link ac-gn-link-distribute" href="/distribute/" data-analytics-title="distribute"> <span class="ac-gn-link-text">Distribute</span> </a> </li> <li class="ac-gn-item ac-gn-item-menu ac-gn-dsupport"> <a class="ac-gn-link ac-gn-link-dsupport" href="/support/" data-analytics-title="dsupport"> <span class="ac-gn-link-text">Support</span> </a> </li> <li class="ac-gn-item ac-gn-item-menu ac-gn-account"> <a class="ac-gn-link ac-gn-link-account" href="/account/" data-analytics-title="account"> <span class="ac-gn-link-text">Account</span> </a> </li> <li class="ac-gn-item ac-gn-item-menu ac-gn-search" role="search"> <a id="ac-gn-link-search" class="ac-gn-link ac-gn-link-search" href="/search/" data-analytics-title="search" data-analytics-click="search" data-analytics-intrapage-link aria-label="Search"></a> </li> </ul> <aside id="ac-gn-searchview" class="ac-gn-searchview" role="search" data-analytics-region="search"> <div class="ac-gn-searchview-content"> <div class="ac-gn-searchview-bar"> <div class="ac-gn-searchview-bar-wrapper"> <form id="ac-gn-searchform" class="ac-gn-searchform" action="/search/" method="get"> <div class="ac-gn-searchform-wrapper"> <input id="ac-gn-searchform-input" class="ac-gn-searchform-input" type="text" name="q" aria-label="Search" placeholder="Search" autocorrect="off" autocapitalize="off" autocomplete="off" spellcheck="false" role="combobox" aria-autocomplete="list" aria-expanded="true" aria-owns="quicklinks suggestions" /> <button id="ac-gn-searchform-submit" class="ac-gn-searchform-submit" type="submit" disabled aria-label="Submit Search"></button> <button id="ac-gn-searchform-reset" class="ac-gn-searchform-reset" type="reset" disabled aria-label="Clear Search"> <span class="ac-gn-searchform-reset-background"></span> </button> </div> </form> <button id="ac-gn-searchview-close-small" class="ac-gn-searchview-close ac-gn-searchview-close-small" aria-label="Cancel Search"> <span class="ac-gn-searchview-close-cancel" aria-hidden="true"> Cancel </span> </button> </div> </div> <aside id="ac-gn-searchresults" class="ac-gn-searchresults hidden" data-string-quicklinks="Quick Links" data-string-suggestions="Suggested Searches" data-string-noresults=""> <section class="ac-gn-searchresults-section ac-gn-searchresults-section-defaultlinks"> <div class="ac-gn-searchresults-section-wrapper"> <div class="search-group-checkbox hidden"><input id="group-input" type="checkbox" name="group-filter" checked>Only search within “<span id="group-search-label"></span>”</div> <h3 class="ac-gn-searchresults-header ac-gn-searchresults-animated">Quick Links</h3> <ul class="ac-gn-searchresults-list" id="defaultlinks" role="listbox"> </ul> <span role="status" class="ac-gn-searchresults-count" aria-live="polite">5 Quick Links</span> </div> </section> </aside> </div> <button id="ac-gn-searchview-close" class="ac-gn-searchview-close" aria-label="Cancel Search"> <span class="ac-gn-searchview-close-wrapper"> <span class="ac-gn-searchview-close-left"></span> <span class="ac-gn-searchview-close-right"></span> </span> </button> </aside> </div> </nav> <div class="ac-gn-blur"></div> <div id="ac-gn-curtain" class="ac-gn-curtain"></div> <div id="ac-gn-placeholder" class="ac-nav-placeholder"></div> <script src="/assets/scripts/ac-globalnav.built.js?17182448067"></script> <link rel="stylesheet" href="/assets/styles/search.css?17182448067"> <script src="/assets/scripts/search.js?17182448067"></script> <!-- metrics --> <script> /* RSID: */ var s_account="awdappledeveloper" </script> <script src="/assets/metrics/scripts/analytics.js?072620243"></script> <script> s.pageName= AC && AC.Tracking && AC.Tracking.pageName(); s.channel="www.en.developer" s.channel="www.appstore.developer"; /************* DO NOT ALTER ANYTHING BELOW THIS LINE ! **************/ var s_code=s.t();if(s_code)document.write(s_code) </script> <!-- /metrics --> <link rel="stylesheet" property="stylesheet" href="/assets/styles/localnav.css" type="text/css" /> <input type="checkbox" id="localnav-menustate" class="localnav-menustate"/> <nav id="localnav" class="localnav localnav-scrim" role="navigation"> <div class="localnav-wrapper"> <div class="localnav-background"></div> <div class="localnav-content"> <h2 class="localnav-title"> <a href="/in-app-purchase/">In-App Purchase</a> </h2> <div class="localnav-menu"> <a href="#localnav-menustate" class="localnav-menucta-anchor localnav-menucta-anchor-open" id="localnav-menustate-open"> <span class="localnav-menucta-anchor-label">Open Menu</span> </a> <a href="#" class="localnav-menucta-anchor localnav-menucta-anchor-close" id="localnav-menustate-close"> <span class="localnav-menucta-anchor-label">Close Menu</span> </a> <div class="localnav-menu-tray"> <ul class="localnav-menu-items"> <li class="localnav-menu-item"> <a href="/in-app-purchase/" class="localnav-menu-link">Overview</a> </li> <li class="localnav-menu-item"> <a href="/storekit/" class="localnav-menu-link">StoreKit</a> </li> <li class="localnav-menu-item"> <a href="/app-store/subscriptions/" class="localnav-menu-link">Subscriptions</a> </li> </ul> </div> <div class="localnav-actions localnav-actions"> <div class="localnav-action localnav-action-menucta" aria-hidden="true"> <label for="localnav-menustate" class="localnav-menucta"> <span class="localnav-menucta-chevron"></span> </label> </div> </div> </div> </div> </div> </nav> <label id="localnav-curtain" for="localnav-menustate"></label> <script src="/assets/scripts/ac-localnav.built.js"></script> <script type="text/javascript" src="/assets/scripts/localnav.js"></script> <main id="main" class="main" role="main"> <div class="ribbon ribbon-blue"> <div class="ribbon-drop-wrapper"> <div class="ribbon-content-wrapper"> <div class="ribbon-content row"> <div class="column large-centered large-12"> <p><a href="/app-store/subscriptions/#win-back-offers" class="ribbon-link more">Win-back offers are now available</a><br /> <a href="/app-store/subscriptions/#offer-codes" class="ribbon-link more">Offer codes now available for macOS</a></p> </div> </div> </div> </div> </div> <section class="section section-hero bg-grad-up overflow"> <div class="section-content"> <header> <div class="row"> <div class="column large-centered large-9 medium-10 small-12 text-center"> <h1 class="typography-hero-headline">Auto-renewable subscriptions</h1> <p class="intro">Offer a seamless experience for digital subscriptions in your apps. StoreKit&nbsp;APIs provide a simple, powerful way to implement auto-renewable subscriptions in apps on all Apple platforms and in all App&nbsp;Store&nbsp;categories.</p> </div> </div> </header> </div> <figure class="image-subscriptions-hero center"></figure> </section> <section class="section section-subscriptions-content"> <div class="section-content"> <div class="row-flex"> <div class="column-flex large-3 small-12"> <ul class="sidenav-container"></ul> <script src="/assets/scripts/sidenav.built.js?17182448067"></script> </div> <div class="column-flex large-9 small-12"> <h2 id="offering-subscriptions" data-sidenav>Overview</h2> <p>Auto-renewable subscriptions provide access to content, services, or premium features in your app on an ongoing basis. They automatically renew at the end of their duration until the user chooses to cancel. Subscriptions are available on iOS, iPadOS, macOS, tvOS, visionOS, and watchOS.</p> <p>Great subscription apps justify the recurring payment by providing ongoing value and continually innovating the app experience. If you’re considering implementing the subscription model, plan to regularly update your app with feature enhancements or expanded content.</p> <p>Many types of apps can take advantage of subscriptions, including apps that offer new game levels, episodic content, software as a service, or cloud support. Other appropriate subscriptions include apps that offer consistent, substantive updates, or access to libraries or collections of content. You can offer subscriptions (a type of in-app purchase) alongside other in-app purchase types.</p> <h3 id="get-ready" data-sidenav>Getting ready</h3> <p>To offer subscriptions, youʼll need to configure them in App&nbsp;Store&nbsp;Connect and use StoreKit&nbsp;APIs in your app. You’ll also need to assign each subscription to a subscription group (a group of subscriptions with different access levels, prices, and durations that people can choose from), then add details such as a name, price, and description. This information displays in the In-App Purchases section of your app’s product page on the App&nbsp;Store. Ensure that the subscriptions are available across all device types that your app supports. Consider allowing a way for subscribers to see the status of their subscription within your app, along with upgrade, crossgrade, and downgrade options, as well as a way to easily manage or turn off their auto-renewable subscription. Make sure to follow our design and review guidelines.</p> <p>To get ready:</p> <ul> <li>Watch the <a href="/videos/app-store-distribution-marketing/">In-App Purchase and Subscriptions videos</a>.</li> <li>Refer to the <a href="/documentation/storekit/in-app_purchase/">In-App Purchase StoreKit&nbsp;API documentation<span class="loc-cj"></span></a>.</li> <li>Learn how to configure your subscriptions in <a href="/help/app-store-connect/">App&nbsp;Store&nbsp;Connect Help</a>.</li> <li>Use the <a href="/documentation/appstoreserverapi/">App&nbsp;Store Server API<span class="loc-en-only"></span></a> and enable <a href="/documentation/appstoreservernotifications/">App&nbsp;Store Server Notifications<span class="loc-en-only"></span></a> to get real-time changes to the status of your subscriptions.</li> </ul> <h3 id="understanding-guidelines" data-sidenav="Understanding guidelines">Understanding subscription guidelines</h3> <p>Before creating your subscriptions, make sure you understand the requirements and best practices that will help you deliver a great experience. The guidelines below provide details on what your subscriptions need to include and how they should be presented in your app, as well as information on making changes to existing subscriptions, offering free trials, and more.</p> <p>Resources:</p> <ul class="small links"> <li class="document"><a href="/app-store/review/guidelines/#3.1.2">App Review Guidelines</a></li> <li class="document"><a href="/design/human-interface-guidelines/in-app-purchase#Autorenewable-subscriptions">Human Interface Guidelines</a></li> </ul> <h3 id="revenue-after-one-year" data-sidenav="Net revenue after a year">85% net revenue after one&nbsp;year</h3> <p>The net revenue structure for auto-renewable subscriptions differs from other business models on the App&nbsp;Store. During a subscriber’s first year of service, you receive 70% of the subscription price at each billing cycle, minus applicable taxes. After a subscriber accumulates one year of paid service, your net revenue increases to 85% of the subscription price, minus applicable taxes.</p> <p>Here’s how it works:</p> <ul> <li>Auto-renewable subscriptions on all Apple platforms are eligible.</li> <li>Days of paid service include all subscription offer types (introductory, promotional, and offer codes) with paid pricing options (pay as you go, pay up front).</li> <li>Free trials and renewal extensions are excluded from days of paid service.</li> <li>Days of paid service are specific to each subscription group.</li> <li>Upgrades, downgrades, or crossgrades between subscriptions in the same subscription group don’t affect the one year of paid service.</li> <li>If you’re currently enrolled in the <a href="/app-store/small-business-program/">App&nbsp;Store Small Business Program</a>, you receive 85% of the subscription price at each billing cycle (minus applicable taxes), regardless of whether or not the subscription has accumulated one year of paid service.</li> </ul> <p>If a subscription expires due to a cancellation or billing issue, the days of paid service stop accumulating. If the subscription is renewed <a href="#grace-period">within 60 days</a>, the days of paid service resume from the recovery date.</p> <h2 id="creating-subscriptions" class="headline-divider" data-sidenav>Creating subscriptions</h2> <p>You’ll configure your auto-renewable subscriptions in App&nbsp;Store&nbsp;Connect. Create each subscription product as part of a subscription group and assign it a level. How you set up your subscription group or groups will determine your proceeds rate, as well as how people can subscribe to your content or services, how they move between subscriptions, and when they are billed. Before creating subscriptions, identify the right subscription setup for your business model.</p> <h3 id="groups" data-sidenav="Creating a group">Creating a subscription&nbsp;group</h3> <p>Each subscription you offer must be assigned to a subscription group. A subscription group is made up of subscriptions with different access levels, prices, and durations so people can select the option that best fits their needs. Since people can only buy one subscription within a group at a time, creating a single group is the best practice for most apps as it prevents people from accidentally purchasing multiple subscriptions.</p> <p>If your app needs to offer the ability to buy multiple subscriptions — for example, to subscribe to more than one channel in a streaming app — you can add these subscriptions to different groups. People who buy subscriptions in multiple groups are billed separately for each subscription. Keep in mind that if a someone cancels a subscription in one group and then purchases a new subscription in a different group, the renewal date will change and the days of paid service will reset.</p> <p>Multiple subscription groups aren’t recommended for apps in which people would expect to have a single active subscription. Keep your offerings simple and easy to understand. For each subscription, create a user-friendly, self-explanatory name that differentiates it from others in the group. Use distinct names for the app, the subscription group, and each subscription to avoid confusion.</p> <div class="service-pins margin-top margin-bottom center"> <div class="device-iphone-x-silver-container device-large-for-medium device-medium-for-small"> <figure class="device-screen image-user-options"></figure> <figure class="device-hardware"></figure> </div> <!-- horizontal pins --> <div class="pin-wrapper large-show special-hide"> <div class="keyline-special"></div> <div class="pin pin-horizontal pin-horizontal-left pin-1"> <span class="pin-caption">App Name or Custom App Name</span> </div> <div class="pin pin-horizontal pin-horizontal-right pin-2"> <span class="pin-caption">Subscription Display Name</span> </div> <div class="pin pin-horizontal pin-horizontal-right pin-4"> <span class="pin-caption">Price/Duration</span> </div> </div> <div class="pin-wrapper large-hide special-show"> <div class="keyline-special"></div> <div class="pin pin-vertical pin-vertical-bottom pin-1"> <span class="pin-caption">App Name or Custom App Name</span> </div> <div class="pin pin-vertical pin-vertical-top pin-3"> <span class="pin-caption">Subscription Display Name</span> </div> <div class="pin pin-vertical pin-vertical-top pin-4"> <span class="pin-caption">Price/Duration</span> </div> </div> </div> <h3 id="ranking" data-sidenav="Ranking subscriptions">Ranking subscriptions within the&nbsp;group</h3> <p>If you offer multiple subscriptions with different prices tiers, you can assign each to a level in App&nbsp;Store&nbsp;Connect. Ranking your subscriptions determines the upgrade, downgrade, and crossgrade paths available. Arrange your subscriptions in order from the one that offers the most (level 1) to the one that offers the least. For subscriptions with lower service or content offerings, you might assign level 2 or 3, depending on your intended subscription experience. You can add more than one subscription to each level if the offerings are equal. For details, see <a href="/help/app-store-connect/manage-subscriptions/offer-auto-renewable-subscriptions/">Overview of an Auto-renewable Subscription Group Setup</a>.</p> <p>People can manage their subscriptions in their account settings on the App&nbsp;Store, where they see all renewal options and subscription groups, and can choose to upgrade, crossgrade, or downgrade between subscriptions as often as they like. You can also use the <a href="/documentation/storekit/appstore/3803198-showmanagesubscriptions/">showManageSubscriptions(in:)<span class="loc-en-only"></span></a> method to allow them to do this within your app. When someone makes a change in their subscription level, the timing of the change varies depending on what has happened:</p> <p><strong>Upgrade.</strong> Someone purchases a subscription that offers a higher level of service than their current subscription. They’re immediately upgraded and receive a refund of the prorated amount of their original subscription. If you’d like people to immediately access more content or features, rank the subscription higher to make it an upgrade.</p> <p><strong>Downgrade.</strong> Someone selects a subscription that offers a lower level of service than their current subscription. The subscription continues until the next renewal date, then is renewed at the lower level and price.</p> <p><strong>Crossgrade.</strong> Someone switches to a new subscription of the equivalent level. If the subscriptions are the same duration, the new subscription begins immediately. If the durations are different, the new subscription goes into effect at the next renewal date.</p> <h3 id="territory" data-sidenav="Territory pricing">Pricing subscriptions for each&nbsp;territory</h3> <p>Apps with auto-renewable subscriptions can choose from 800 price points across all available currencies and price tiers, with an additional 100 higher price points available <a href="/contact/request/app-store-higher-price-points/">upon request</a>. You can set the prices you think are appropriate for subscribers in different locations, and you have the flexibility to price your subscriptions at parity across storefronts.</p> <p><strong>Pricing tool.</strong> The App&nbsp;Store&nbsp;Connect pricing tool can help you manage pricing based on current exchange rates. If there’s a tax change or currency adjustment in a particular region, the price of subscriptions won’t generally be affected unless you decide to pass the change on to your users. If you want to change the price of a subscription in a specific market, it’s important to understand which markets are tax inclusive before you take action. For example, if you decide to lower the subscription price for users in Germany, the revenue you’ll receive will be the purchase price minus the European Union’s value added tax (VAT) and minus Apple’s commission. The default pricing in the App&nbsp;Store&nbsp;Connect pricing tool is inclusive of applicable taxes that Apple collects and remits. For more information, review Schedule 2 of the Apple Developer Program License Agreement, which describes territories that have different tax treatments.</p> <p>App&nbsp;Store&nbsp;Connect also lets you <a href="/help/app-store-connect/manage-app-information/set-a-tax-category/">assign tax categories</a> to your apps and In-App Purchases. These categories are based on your app’s content (for example, videos, books, or news publications) and determine which tax regulations apply in each territory, allowing Apple to administer tax for you at specific rates.</p> <h3 id="family-sharing" data-sidenav> <figure class="icon-family-sharing"></figure> Family Sharing </h3> <p>Family Sharing allows a subscriber to share access to an auto-renewable subscription with up to five family members across their Apple devices. With a streamlined, convenient user experience, Family Sharing can help you attract subscribers, encourage paid subscriptions, increase engagement, and improve retention. You can enable Family Sharing for your subscription in App&nbsp;Store&nbsp;Connect. Please note that this can’t be undone.</p> <p>Verify subscription access using purchase validation, then provide the proper access to subscribers and their family members. Whether a subscription is shared with a subscriber’s family by default depends on their subscription sharing settings and if the purchase was made before or after you enabled Family&nbsp;Sharing in App&nbsp;Store&nbsp;Connect. Subscribers whose settings don’t share the subscription by default are informed by Apple via push notification that the subscription can be shared with their family.</p> <p>You can highlight Family Sharing in several ways:</p> <p><strong>Highlight Family Sharing to potential subscribers.</strong> Include Family Sharing in your subscription’s display name so it’s easy to spot when reviewing subscription options. If you offer a Family Sharing-enabled subscription alongside subscriptions that don’t include Family Sharing, you can note the price difference for the Family Sharing option on the sign up screen.</p> <p><strong>Remind subscribers to enable Family Sharing.</strong> Mention Family Sharing within your app — for example, as part of onboarding for new subscribers or via in-app messaging for existing subscribers. Consider explaining how to confirm they’ve turned on Family Sharing for the subscription. If you offer a Family Sharing-enabled subscription they’re not currently subscribed to, you might provide a way for them to upgrade without leaving your app. Make sure you’ve ranked your subscriptions within the same subscription level in App&nbsp;Store&nbsp;Connect to provide a seamless upgrade experience.</p> <p><strong>Help subscribers share subscriptions.</strong> You can use in-app messaging to ask subscribers to confirm their Family Sharing settings, or implement share extensions so they can easily share your app. Within the transaction information, you can look at <a href="/documentation/storekit/transaction/3749705-ownershiptype/">ownershipType<span class="loc-en-only"></span></a> to see if someone is the subscriber or a family member, so you can make sure to display your message to the person who completed the purchase.</p> <p>Resources:</p> <ul class="small links"> <li class="document"><a href="/help/app-store-connect/configure-in-app-purchase-settings/turn-on-family-sharing-for-in-app-purchases/">Turn on Family&nbsp;Sharing for in-app&nbsp;purchases</a></li> <li class="document"><a href="/documentation/storekit/original_api_for_in-app_purchase/supporting_family_sharing_in_your_app/">Support Family Sharing in your app<span class="loc-en-only"></span></a></li> <li class="video"><a href="/videos/play/tech-talks/110345">Family Sharing for in-app purchases</a></li> </ul> <h3 id="offering-subscriptions-to-multiple-apps" data-sidenav="Multiple apps">Offering subscriptions to multiple&nbsp;apps</h3> <p>You can offer auto-renewable subscriptions to access multiple apps. Each app must be approved to use auto-renewable In-App Purchases and published under the same developer account.</p> <p>Use App&nbsp;Store&nbsp;Connect to set up separate and equivalent auto-renewable subscriptions for each app included in the multiapp subscription so that people can subscribe from any app. To help people avoid paying multiple times for the same offering, make sure to verify that they’re active subscribers before showing any subscription options. <a href="/app-store/subscriptions/#keeping-subscribers">View details on determining if a subscription is active</a>.</p> <p>You can also create an app bundle to group multiple subscription apps into a single download at a reduced price. App bundles can include up to 10 of your iOS apps or up to 10 of your macOS apps.</p> <p>Resources:</p> <ul class="small links"> <li class="document"><a href="/app-store/app-bundles/">App bundle essentials</a></li> <li class="document"><a href="/documentation/storekit/original_api_for_in-app_purchase/subscriptions_and_offers/offering_a_subscription_across_multiple_apps/">Offer subscriptions across apps<span class="loc-en-only"></span></a></li> </ul> <h2 id="attracting-subscribers" class="headline-divider" data-sidenav="Attracting subscribers">Attracting subscribers</h2> <p>By allowing people to try your subscription at the moment they’re most interested in its value, you increase the likelihood that they’ll subscribe. There are several ways you can provide a preview of the subscription experience.</p> <div class="row-flex"> <div class="column-flex-center large-6 small-12"> <div class="device-iphone-x-silver-container device-medium-for-small"> <figure class="device-screen screen-onboarding"></figure> <figure class="device-hardware"></figure> </div> </div> <div class="column-flex-center large-6 small-12"> <p><strong>Present subscription benefits during onboarding.</strong> By highlighting the value of your subscription when people first launch your app, you can educate them on how the app works and help them understand what they’ll gain from subscribing. Keep onboarding brief, engaging, and focused on the features your audience cares about, such as the ability to access the subscription across multiple device types. Provide a succinct call to action and clear subscription terms.</p> <p><a href="#clear-description">Find out what you’ll need to <span class="more nowrap">include</span></a></p> </div> </div> <div class="row-flex"> <div class="column-flex-center large-6 small-12"> <div class="device-iphone-x-silver-container device-medium-for-small"> <figure class="device-screen screen-freemium"></figure> <figure class="device-hardware"></figure> </div> </div> <div class="column-flex-center large-6 small-12"> <p><strong>Offer a freemium app experience.</strong> A freemium app allows customers to use the app at no cost, with the option to subscribe if they want to enhance their experience or engage more deeply. A free experience lowers the barrier to try an app, and people may be more inclined to invest in paid features after having had time to enjoy the app.</p> </div> </div> <div class="row-flex"> <div class="column-flex-center large-6 small-12"> <div class="device-iphone-x-silver-container device-medium-for-small"> <figure class="device-screen screen-paywall"></figure> <figure class="device-hardware"></figure> </div> </div> <div class="column-flex-center large-6 small-12"> <p><strong>Offer a metered paywall.</strong> A metered paywall allows access to a finite amount of content for a specified duration before needing to make a purchase — for example, viewing 10 full articles per month for free in a news app. This gives people the opportunity to immediately start sampling your subscription experience, while encouraging them to subscribe.</p> </div> </div> <p class="margin-top-small">For freemium and paywall experiences, include contextually relevant prompts to encourage people to subscribe — for example, when they near their monthly limit of free articles or videos. Additionally, consider making it easy to subscribe at any time by including a prompt throughout the app interface. Test and measure the impact of these prompts, and consider trying different versions of your call-to-action messaging to understand what resonates most with your audience.</p> <p><a href="/videos/play/tech-talks/110151/">Optimize subscriptions for success: <span class="nowrap icon icon-after icon-playcircle">acquisition</span></a></p> <h3 id="clear-description" data-sidenav>Clearly describing subscriptions</h3> <p>An effective subscription purchase flow makes it simple for people to get the product or service they’re interested in. Use consistent messaging and include clear terms so people can easily recognize the value of the offer. A lengthy sign-up process will lower your subscription conversion rate, so keep the purchase flow simple and only ask for necessary information. In addition, the following details must be included in your subscription’s sign-up screen:</p> <ul class="compound-item-list"> <li>Subscription name and duration, and the content or services provided during the subscription period</li> <li>Full renewal price, shown clearly and prominently, and localized in available currencies</li> <li>A way for current subscribers to sign in or restore purchases</li> </ul> <p>Please note that your app and App&nbsp;Store metadata must include links to your Terms of Use and Privacy&nbsp;Policy.</p> <div class="row-flex"> <div class="column-flex-center large-6 small-12"> <div class="device-iphone-x-silver-container device-medium-for-small"> <figure class="device-screen image-purchase-flow-1"></figure> <figure class="device-hardware"></figure> </div> </div> <div class="column-flex-center large-6 small-12"> <p><strong>Billing amount</strong><br> In the purchase flow, the amount that will be billed must be the most prominent pricing element in the layout. For example, an annual subscription should clearly display the total amount that will be billed upon purchase. While you may also present a breakdown price that the annual amount is equivalent to or a savings when compared to weekly or monthly subscriptions, these additional elements should be displayed in a subordinate position and size to the annual price. This ensures that people are not misled.</p> </div> </div> <div class="row-flex"> <div class="column-flex-center large-6 small-12"> <div class="device-iphone-x-silver-container device-medium-for-small"> <figure class="device-screen image-purchase-flow-2"></figure> <figure class="device-hardware"></figure> </div> </div> <div class="column-flex-center large-6 small-12"> <p><strong>Free trials</strong><br> In the purchase flow for a free trial, clearly indicate how long the free trial lasts and the price billed once the free trial is over.</p> </div> </div> <h3 id="promoting-in-app-purchases-on-the-app-store" data-sidenav="Promoting on the App Store">Promoting subscriptions on the App&nbsp;Store</h3> <div class="row split-row"> <div class="column large-7 small-12"> <p>You can promote In-App Purchases directly on the App&nbsp;Store, so people can find your subscription or introductory offer and initiate a purchase even before downloading your app. Promoted In-App Purchases appear on your product page, can display in search results, and may be featured on the Today, Games, or Apps tabs. Choose to promote up to 20 In-App Purchases at a time to help you effectively increase discoverability for content within your app. This can be particularly effective for letting new customers know about introductory offers.</p> <p><a href="/app-store/promoting-in-app-purchases/">Learn about promoting your in-app <span class="more nowrap">purchases</span></a></p> </div> <div class="column large-5 small-12"> <figure class="image-promote-iap"></figure> <figcaption class="caption">Promoted In-App Purchases have unique metadata to communicate their value.</figcaption> </div> </div> <h2 id="providing-subscription-offers" class="headline-divider" data-sidenav>Providing subscription offers</h2> <p>Grow, retain, and re-acquire customers by giving them a free or discounted price for a specific duration for an auto-renewable subscription. At the end of the offer period, the subscription auto-renews at the standard price unless a subscriber cancels it.</p> <p>You can create introductory offers, offer codes, promotional offers, and win-back offers. You can provide some or all of these at once, depending on your business goals. To determine which might be best for a particular use case, consider each offer’s intended use, customer eligibility, redemption limits, and other criteria.</p> <table class="margin-top-small margin-bottom table-offers"> <thead> <tr class="header"> <th>&nbsp;</th> <th class="text-center"><strong>Aquire</strong></th> <th class="text-center"><strong>Retain</strong></th> <th class="text-center"><strong class="nowrap">Re-aquire</strong></th> </tr> </thead> <tbody> <tr> <td width="40%"><strong>Introductory offers</strong></td> <td><figure class="icon icon-checksolid" alt="applicable"></figure></td> <td></td> <td></td> </tr> <tr> <td width="40%"><strong>Promotional offers</strong></td> <td></td> <td><figure class="icon icon-checksolid" alt="applicable"></figure></td> <td><figure class="icon icon-checksolid" alt="applicable"></figure></td> </tr> <tr> <td width="40%"><strong>Win-back offers</strong></td> <td></td> <td></td> <td><figure class="icon icon-checksolid" alt="applicable"></figure></td> </tr> <tr> <td width="40%"><strong>Offer codes</strong></td> <td><figure class="icon icon-checksolid" alt="applicable"></figure></td> <td><figure class="icon icon-checksolid" alt="applicable"></figure></td> <td><figure class="icon icon-checksolid" alt="applicable"></figure></td> </tr> </tbody> </table> <div class="resource-grid margin-top"> <a href="/videos/play/tech-talks/110151/" class="resource-grid-item"> <div class="image-wrapper thumbnail" aria-hidden="true"> <img class="thumbnail-image" data-session="6425-ref" src="https://devimages-cdn.apple.com/wwdc-services/images/8/6425/6425_wide_250x141_2x.jpg" alt="" width="100%"> <span class="thumbnail-scrim"></span> <span class="thumbnail-button" aria-label="Play"></span> </div> <h4>Optimize subscriptions for success: acquisition</h4> </a> <a href="/videos/play/tech-talks/111386/" class="resource-grid-item"> <div class="image-wrapper thumbnail" aria-hidden="true"> <img class="thumbnail-image" data-session="9148-ref" src="https://devimages-cdn.apple.com/wwdc-services/images/8/9148/9148_wide_250x141_2x.jpg" alt="" width="100%"> <span class="thumbnail-scrim"></span> <span class="thumbnail-button" aria-label="Play"></span> </div> <h4>Improve your subscriber retention with App&nbsp;Store&nbsp;features</h4> </a> </div> <h3 id="configuring-offers" data-sidenav>Configuring subscription offers</h3> <p>When setting up offers in App&nbsp;Store&nbsp;Connect, you’ll choose the offer type, eligibility, duration, pricing, and more. To support offers within your app, you’ll use <a href="/documentation/storekit/in-app_purchase/supporting_subscription_offer_codes_in_your_app/">StoreKit APIs<span class="loc-en-only"></span></a>. For each offer you create, you’ll choose one of the following <a href="/help/app-store-connect/reference/pricing-and-availability/">offer discount types</a>:</p> <p><strong>Free trial.</strong> A subscriber can access your subscription for free for a specific duration — for example, a one-month free offer for a subscription with a standard renewal price of $4.99 per month. Their subscription begins immediately, but they won’t be billed until the offer duration ends. This discount type may be useful if you want to let people experience your subscription at no immediate cost to them.</p> <p><strong>Pay as you go.</strong> A subscriber pays a discounted price each billing period for a specific duration — for example, $1.99 per month for three months for a subscription with a standard renewal price of $9.99 per month. Once the duration is over, they’re billed at the standard renewal price. This option may be useful if you want to attract price-sensitive people with a recurring discount without having to offer that discount for the lifetime of the subscription.</p> <p><strong>Pay up front.</strong> A subscriber pays a one-time price for a specific duration — for example, $9.99 up front for the first six months of a subscription with a standard renewal price of $39.99 per year. Once the duration is over, they’ll be billed at the standard renewal price. This may be useful if you want to offer an extended experience that gives people time to enjoy the subscription before the next renewal.</p> <div class="row-flex"> <div class="column-flex-center large-6 small-12"> <div class="device-iphone-x-silver-container device-medium-for-small"> <figure class="device-screen screen-onboarding"></figure> <figure class="device-hardware"></figure> </div> </div> <div class="column-flex-center large-6 small-12"> <h3 id="offering-introductory-prices" data-sidenav>Introductory offers</h3> <p>Introductory offers allow new subscribers to experience your subscription before paying full price. Display offers within your app using <a href="/documentation/storekit/in-app_purchase/original_api_for_in-app_purchase/subscriptions_and_offers/implementing_introductory_offers_in_your_app">StoreKit<span class="loc-cj"></span></a>, and <a href="/help/app-store-connect/configure-in-app-purchase-settings/promote-in-app-purchases/">promote</a> the offer’s In-App Purchase to display it on the App Store. When promoted, your offer appears on your product page and may display in search results as well as on the Today, Games, and Apps tabs — helping to further discovery of your offer. You can <a href="/help/app-store-connect/manage-subscriptions/set-up-introductory-offers-for-auto-renewable-subscriptions/">create an introductory offer</a> for each subscription per territory. Customers can redeem one introductory offer per subscription group.</p> </div> </div> <h3 id="offer-codes" data-sidenav="Offer codes">Offer codes<span class="violator violator-reduced violator-inline nowrap">Now available on macOS</span></h3> <p>Use offer codes to acquire, retain, and re-acquire subscribers by providing a subscription at a discount or for free for a limited time. You can create two types of offer codes: one-time-use codes (18-digit unique codes), or custom codes (such as SPRINGPROMO). Learn how to <a href="/help/app-store-connect/manage-subscriptions/set-up-offer-codes">create offer codes</a> and how to <a href="/documentation/storekit/appstore/supporting_subscription_offer_codes_in_your_app">support offer codes<span class="loc-en-only"></span></a> using StoreKit. To get notified of redemptions, ensure you've set up App Store Server Notifications.</p> <h4 class="typography-headline-body">Distribution</h4> <p>When distributing offer codes, you can use your online and offline marketing channels, such as in-app merchandising, email, or print campaigns. Consider which channels might be most effective at reaching your intended customers.</p> <div class="row-flex"> <div class="column-flex-center large-6 small-12"> <div class="device-iphone-x-silver-container device-medium-for-small"> <figure class="device-screen screen-offer-codes"></figure> <figure class="device-hardware"></figure> </div> </div> <div class="column-flex-center large-6 small-12"> <p>Offer codes can be used in a variety of ways — for example, you can:</p> <ul> <li>Send an email sharing the latest features and recently added content with an offer code to current or previous subscribers, so they can experience your service for a limited time.</li> <li>Distribute flyers that include custom codes to promote your service to event attendees.</li> <li>Partner with another company on a marketing initiative or campaign to help promote your app to new subscribers.</li> <li>Create a peer-to-peer member referral program that enables current subscribers to share an offer code and receive a benefit for promoting your app. You are responsible for distributing any benefits or rewards to subscribers.</li> <li>Provide a code to a subscriber with a customer service issue to compensate for the issue and encourage retention.</li> <li>Distribute one-time-use codes within an app that you’re sunsetting as a way to transition current subscribers to your new app and promote your service.</li> <li>Display a save offer in your app to a subscriber who has turned off auto-renew but their subscription hasn’t expired yet.</li> </ul> </div> </div> <h4 class="typography-headline-body">Redemption</h4> <p>Customers can redeem offer codes using a <a href="/news/?id=dopmcbjk">redemption URL</a> or on the App Store (in iOS 14.2, iPadOS 14.2, and macOS 15 or later). They can also redeem offer codes within your app if your app supports the <a href="/documentation/storekit/storeview/4203466-offercoderedemption">offerCodeRedemption<span class="loc-en-only"></span></a> method. For a smooth customer experience, be sure to mention any eligibility or availability limits in your communications.</p> <p>Apple handles the redemption experience, which includes an offer details screen that includes your app icon, subscription display name, duration, and pricing. If you’ve previously added a promotional image for the subscription, this is shown instead of your app icon. To help people make an informed decision, make sure that these details clearly describe the subscription experience. In order for offer codes to be redeemed, your app must be available on the App Store. If someone doesn’t have your app, they’ll be able to download it during the redemption experience.</p> <div class="row-flex flex-padding-bottom"> <div class="column-flex-center large-6 small-12"> <div class="device-iphone-x-silver-container device-medium-for-small"> <figure class="device-screen screen-redemption"></figure> <figure class="device-hardware"></figure> </div> </div> <div class="column-flex-center large-6 small-12"> <p>Depending on your subscription setup, existing subscribers may be able to redeem more than one offer if the offers are in different subscription groups. If you intend for someone to subscribe to only one subscription group at a time, make sure the offer is within their current subscription group. Existing subscribers can only redeem codes that are an upgrade from or at the same level as their current subscription.</p> <p>Be sure to provide a relevant experience based on someone’s subscription status. For example, you might provide onboarding that highlights the benefits of your subscription for new subscribers. If your app includes account creation or requires agreement to additional terms, make this process as smooth as possible for customers who redeemed a code and are new to your app.</p> </div> </div> <div class="resource-grid margin-top"> <a href="/videos/play/tech-talks/10868/" class="resource-grid-item"> <div class="image-wrapper thumbnail" aria-hidden="true"> <img class="thumbnail-image" data-session="4855-ref" src="https://devimages-cdn.apple.com/wwdc-services/images/8/4855/4855_wide_250x141_2x.jpg" alt="" width="100%"> <span class="thumbnail-scrim"></span> <span class="thumbnail-button" aria-label="Play"></span> </div> <h4>Subscription offer codes essentials</h4> </a> <a href="/videos/play/tech-talks/110150/" class="resource-grid-item"> <div class="image-wrapper thumbnail" aria-hidden="true"> <img class="thumbnail-image" data-session="6424-ref" src="https://devimages-cdn.apple.com/wwdc-services/images/8/6424/6424_wide_250x141_2x.jpg" alt="" width="100%"> <span class="thumbnail-scrim"></span> <span class="thumbnail-button" aria-label="Play"></span> </div> <h4>Get started with custom offer codes</h4> </a> </div> <h3 id="promotional-offers" data-sidenav>Promotional offers</h3> <p>Grow and retain your customer base by giving existing or former subscribers a free or discounted subscription for a specific duration. You decide the business logic for promotional offers, giving you the flexibility to create unique promotions within your app, such as:</p> <ul class="compound-item-list"> <li>An upgraded subscription at a special price for people who have canceled their subscription</li> <li>A free month of service for a tenured subscriber who has renewed multiple times</li> <li>A discounted price on a month of service for a subscriber who may not be consistently engaging with your app or game</li> </ul> <div class="row-flex"> <div class="column-flex-center large-6 small-12"> <div class="device-iphone-x-silver-container device-medium-for-small"> <figure class="device-screen screen-offers"></figure> <figure class="device-hardware"></figure> </div> </div> <div class="column-flex-center large-6 small-12"> <p>Use <a href="/documentation/storekit/original_api_for_in-app_purchase/subscriptions_and_offers/implementing_promotional_offers_in_your_app/">StoreKit<span class="loc-en-only"></span></a> or App Store Server APIs to identify the auto-renewal statuses of your subscribers and understand which offers might be most effective. To easily determine eligibility, enable App Store Server Notifications for your app. This allows you to receive notifications when a subscriber's status changes, helping you understand when to display an offer to someone. You can have up to 10 offers for each subscription — be sure to consider the implications of having multiple offers in effect. Learn about <a href="/help/app-store-connect/manage-subscriptions/set-up-promotional-offers-for-auto-renewable-subscriptions/">configuring promotional offers</a> in App&nbsp;Store&nbsp;Connect.</p> </div> </div> <h3 id="win-back-offers" data-sidenav="Win-back offers">Win-back offers<span class="violator violator-reduced violator-inline">New</span></h3> <p>Reach previous subscribers and encourage them to resubscribe with win-back offers. Based on your configuration, Apple displays these offers to eligible customers in various places, such as on the App Store or in your app or game. For example, you can create a pay up front offer for a reduced subscription price of $9.99 for six months, with a standard renewal price of $39.99 per&nbsp;year.</p> <h4 class="typography-headline-body">Discovery and redemption</h4> <p>Eligible customers can discover and redeem win-back offers in several places, including:</p> <div class="row-flex flex-padding-bottom"> <div class="column-flex-center large-6 small-12"> <div class="sv-margin-top-small device-iphone-13-pro-silver-container device-medium-for-small"> <picture class="device-screen"> <source media="(max-width:1068px)" srcset="/app-store/subscriptions/images/screen-win-back-offers-medium_2x.png" /> <img src="/app-store/subscriptions/images/screen-win-back-offers-large_2x.png" width="100%" alt="" aria-label="" /> </picture> <figure class="device-hardware"></figure> </div> </div> <div class="column-flex-center large-6 small-12"> <p class="sv-margin-top-small"><strong>On the App Store:</strong> On your product page and in editorial selections and personalized recommendations on the Today, Games, and Apps tabs if you’ve been featured. People can tap your offer to learn more details about your offer and open or redownload your app or game to seamlessly redeem your offer.</p> <p><strong>In-app:</strong> A win-back <a href="/documentation/storekit/in-app_purchase/supporting_win-back_offers_in_your_app">offer sheet<span class="loc-en-only"></span></a> automatically appears to eligible customers within your app or game, with no additional work required. For additional control and display customization, you can use StoreKit views or <a href="/documentation/storekit/message">StoreKit&nbsp;2&nbsp;APIs<span class="loc-en-only"></span></a> to merchandise win-back offers in your app.</p> <p><strong>In their Apple account under their Subscription settings.</strong> People can tap your app or game to view and redeem any available offers. This appears automatically with no additional work required.</p> <p><strong>Using a direct link.</strong> Similar to offer codes, you can use the URL provided in App&nbsp;Store&nbsp;Connect and share it with people through your own channels, such as email.</p> <p>For more information on these placement types, see <a href="/help/app-store-connect/manage-subscriptions/set-up-win-back-offers">set up win-back offers</a>.</p> </div> </div> <h4 class="typography-headline-body">Configuration and merchandising</h4> <p>When <a href="/help/app-store-connect/manage-subscriptions/set-up-win-back-offers/">configuring win-back offers</a> in App&nbsp;Store&nbsp;Connect, you provide offer details and select the offer priority. Your priority selection affects how your offer is ranked within your app, in someone’s Subscription settings, and on the App Store (if you’ve chosen to promote it). Apple uses your subscription display name and description when displaying your win-back offer, so be sure this information is accurate.</p> <p>If you’d like to display your offer on the App Store, you’ll need an approved <a href="/help/app-store-connect/manage-in-app-purchases/view-and-edit-in-app-purchase-information#add-or-remove-an-image">subscription image</a>. Aim for a simple graphic that’s different than your app icon or screenshots that conveys the essence of the In-App Purchase included as part of the offer.</p> <p>By default, <a href="/help/app-store-connect/manage-subscriptions/manage-streamlined-purchasing">streamlined purchasing</a> is turned on for your app or game, which lets people complete a purchase from outside your app. You can turn this off in App&nbsp;Store&nbsp;Connect if you wish.</p> <div class="resource-grid margin-top"> <a href="/videos/play/wwdc2024/10110/" class="resource-grid-item"> <div class="image-wrapper thumbnail" aria-hidden="true"> <img class="thumbnail-image" data-session="9237-ref" src="https://devimages-cdn.apple.com/wwdc-services/images/C03E6E6D-A32A-41D0-9E50-C3C6059820AA/9237/9237_wide_250x141_2x.jpg" alt="" width="100%"> <span class="thumbnail-scrim"></span> <span class="thumbnail-button" aria-label="Play"></span> </div> <h4>Implement App Store Offers</h4> </a> </div> <h2 id="keeping-subscribers" class="headline-divider" data-sidenav>Keeping subscribers</h2> <p>For people to stay subscribed to your app, they need to continue getting value out of the subscription. Update your app regularly with new content and feature enhancements to help encourage subscribers to maintain their subscriptions.</p> <h3 id="sending-notifications-to-aid-retention" data-sidenav>Sending notifications</h3> <p>When written thoughtfully, notifications can help people stay engaged with your service and keep their subscriptions active. To ensure a positive experience, make sure your notifications are timely, serve a clear purpose, and deliver meaningful information. You can also use push notifications to market your content — for example, promoting a subscription offer to people who haven’t yet subscribed. However, people must first explicitly opt in to receiving marketing push notifications via a method within your app that includes consent language and a clear way of opting out. Carefully consider the frequency, timing, and content of your notifications to ensure they always provide value to subscribers. Push notifications must not include sensitive personal or confidential information.</p> <ul class="links-stacked"> <li><a href="/design/human-interface-guidelines/managing-notifications">View design <span class="more nowrap">guidance</span></a></li> <li><a href="/documentation/usernotificationsui/">Get details on implementing <span class="more nowrap">notifications<span class="loc-en-only"></span></span></a></li> </ul> <h3 id="subscription-support" data-sidenav="Subscriber support">Providing support</h3> <p>Thoughtful customer support helps you manage relationships with your subscribers and can lead to improved engagement, higher retention, and better ratings and reviews. Use StoreKit and App&nbsp;Store server APIs to provide more seamless subscriber support, and to resolve issues in a more timely and efficient manner.</p> <h4 class="typography-headline-body">Letting people manage their subscriptions</h4> <p>A subscriber’s preferences may change during a subscription period. You can use the <a href="/documentation/storekit/appstore/3803198-showmanagesubscriptions/">showManageSubscriptions(in:)<span class="loc-en-only"></span></a> method to let them manage their subscription within your app. By providing a dedicated place in your app to manage subscriptions, you can also display other options to complement the system-provided management UI. For example, you might show a promotional offer that provides a higher service level for a discounted price. If they cancel, you might provide an offer to help win them back and encourage them to resubscribe. Or you might present a survey where they can share feedback about their subscription experience and reasons for cancelling, which can inform your marketing strategy. To ensure a positive experience, always make it easy for people to access the system-provided management UI where they can cancel if they wish.</p> <h4 class="typography-headline-body">Extending a subscription’s renewal date</h4> <p>In cases of service or content delivery issues — such as a server outage or technical glitch — you can extend the renewal date of a subscription using the <a href="/documentation/appstoreserverapi/extend_a_subscription_renewal_date/">Renewal Date Extension endpoint<span class="loc-en-only"></span></a>. For example, if a sports match is canceled or there’s an interruption to a livestreamed event, you might extend free service for a specified time in order to make up for the issue. You can move the renewal date for a customer’s subscription twice per calendar year, each up to 90 days in the future. Any days included in an extension won’t count toward the one year of paid service needed to receive an 85% proceeds rate.</p> <p>Alternatively, you can use <a href="/app-store/subscriptions/#offer-codes">offer codes</a> to compensate dissatisfied subscribers with a free or discounted subscription for a specific period of time. These codes can be redeemed on the App&nbsp;Store or within your app.</p> <h4 class="typography-headline-body">Determining subscriber status</h4> <p>The <a href="/documentation/appstoreserverapi/get_all_subscription_statuses/">Get All Subscription Statuses<span class="loc-en-only"></span></a> endpoint lets you determine in one simple check whether a subscription is active, expired, in billing retry, or in grace period. Use this information to inform your retention strategy and provide subscribers with relevant information within your app, such as their upcoming renewal date. You can also use this endpoint alongside the <a href="/documentation/storekit/transaction/3822312-offerid/">OfferID<span class="loc-en-only"></span></a> and <a href="/documentation/storekit/transaction/3822313-offertype/">OfferType<span class="loc-en-only"></span></a> transaction properties in StoreKit to identify offer redemptions.</p> <ul class="links-stacked"> <li><a href="/videos/play/tech-talks/10887/">Learn to support customers with StoreKit&nbsp;2 and the <span class="icon icon-after icon-playcircle nowrap">App Store Server API</span></a></li> <li><a href="/videos/play/wwdc2021/10175/">Learn to support customers and <span class="icon icon-after icon-playcircle nowrap">manage refunds</span></a></li> <li><a href="/design/human-interface-guidelines/in-app-purchase#Providing-help-with-in-app-purchases">Learn to help people manage their <span class="more nowrap">subscriptions</span></a></li> </ul> <h3 id="retaining-subscribers" data-sidenav="Retaining subscribers">Retaining&nbsp;subscribers</h3> <p>Use the <a href="/documentation/appstoreserverapi/get_all_subscription_statuses/">Get All Subscription Statuses<span class="loc-en-only"></span></a> endpoint and <a href="/documentation/appstoreserverapi/get_transaction_history/">Get Transaction History<span class="loc-en-only"></span></a> endpoint to determine the status of your users’ subscriptions and view transaction history, so you can identify and act on:</p> <p><strong>Voluntary churn.</strong> Determine if a subscriber has turned off auto-renew for a particular subscription using the <a href="/documentation/appstoreserverapi/get_all_subscription_statuses/">Get All Subscription Statuses<span class="loc-en-only"></span></a> endpoint. You can also use App&nbsp;Store Server Notifications to get real-time updates about changes in a user’s status and key events related to their In-App Purchases, such as a change in renewal status. Use this information to take action in response. For example, you might present a promotional offer or suggest an alternate tier that better fits their needs. When a subscription expires, you can lock access to the subscription’s content or service. Be sure to inform the user of any changes and let them know if there’s anything they need to do in response and how to resubscribe if needed.</p> <p id="grace-period"><strong>Involuntary churn.</strong> Sometimes a subscriber might experience a billing issue, such as an expired credit card, that causes their subscription to expire. Starting in iOS 16.4 and iPadOS 16.4, if a subscription doesn’t successfully renew, a system-provided sheet appears in your app upon launch with a prompt that lets customers update the payment method for their Apple Account. If you’d like, you can choose to delay or suppress this sheet in StoreKit using <a href="/documentation/storekit/message">messages<span class="loc-en-only"></span></a> and <a href="/documentation/storekit/message/3963915-display/">display<span class="loc-en-only"></span></a>.</p> <p>You can learn when a subscription fails to renew using:</p> <ul> <li>App Store server notifications, which sends a DID_FAIL_TO_RENEW notification type.</li> <li><a href="/documentation/storekit/product/subscriptioninfo/renewalstate/">StoreKit renewal state<span class="loc-en-only"></span></a> to get information about the renewal state.</li> <li><a href="/documentation/appstoreserverapi/get_all_subscription_statuses/">The App Store Server API<span class="loc-en-only"></span></a> to get all subscription statuses.</li> </ul> <p>When a subscription renewal fails, Apple attempts to recover it for 60 days. If you’ve chosen to pause access to your service or content during this time, you’ll need to reinstate access once the issue is resolved. If the subscription renews within 60 days, the days of paid service resume from the renewal date.</p> <p>To prevent service interruptions due to billing issues, enable Billing Grace Period in App&nbsp;Store&nbsp;Connect. Apple attempts to address the billing issue and recover the subscription while the subscriber retains subscription access. You can choose to apply Billing Grace Period to all renewals (existing paid renewals and free offers transitioning to paid renewals) or only to existing paid renewals. You can also set a duration of 3, 16, or 28 days. Be sure to consider what Billing Grace Period configuration best aligns with your business. If the subscription is recovered within the Billing Grace Period, there won’t be any interruption to the days of paid service or to your revenue. If someone resubscribes after 60 days, the days of paid service reset and you’ll receive the standard one-year subscription rate until the next year of paid service passes.</p> <p><strong>Price increase consent.</strong> When you increase the price of a subscription and Apple asks affected subscribers to agree to the new price, you can keep track of their consent status before the change takes effect. Before displaying the price increase sheet to affected users, you might show an in-app message that explains the benefits of the subscription and how the price increase improves the service. If someone doesn’t respond to the increase, their subscription expires at the end of their current billing cycle.</p> <p>Resources:</p> <ul class="small links"> <li class="document"><a href="/documentation/appstoreserverapi/">App&nbsp;Store Server API<span class="loc-en-only"></span></a></li> <li class="document"><a href="/documentation/appstoreservernotifications/">App&nbsp;Store Server Notifications<span class="loc-en-only"></span></a></li> <li class="document"><a href="/documentation/storekit/original_api_for_in-app_purchase/subscriptions_and_offers/reducing_involuntary_subscriber_churn/">Reduce involuntary subscriber churn<span class="loc-en-only"></span></a></li> <li class="document"><a href="/help/app-store-connect/manage-subscriptions/enable-billing-grace-period-for-auto-renewable-subscriptions/">Enable Billing Grace Period</a></li> </ul> <h3 id="managing-prices-for-existing-subscribers" data-sidenav>Managing prices</h3> <p>You can <a href="#territory">price your auto-renewable subscriptions by storefront</a> and choose from 800 price points across all available currencies and price tiers, with an additional 100 higher price points available upon request. After you set a starting price for your auto-renewable subscription, you can schedule one future price change at a time, per territory in App&nbsp;Store&nbsp;Connect.</p> <p><strong>Price decreases.</strong> If you decrease the price of your auto-renewable subscription, existing subscriptions will automatically renew at the lower price. You don’t have the option to preserve the higher price for existing subscribers. Existing subscribers don’t receive any communications and don’t need to take any action.</p> <p><strong>Price increases.</strong> When you increase the price of an auto-renewable subscription, Apple automatically provides push notifications, email, and in-app messaging to let subscribers know about the upcoming change and how to manage their subscription. Some price increases require subscribers to opt in, while smaller, infrequent price increases can result in notifications without the need to opt in.</p> <p>If needed, you can temporarily delay the in-app price consent sheet to avoid interrupting someone during a critical moment.</p> <p>You can keep an unlimited number of active subscribers at their existing price while increasing the price for new subscribers. If you don’t preserve the price for existing subscribers, and they need to consent, they must agree to the new price. If they don’t agree, their subscription expires at the end of their current billing cycle.</p> <p>If you have several cohorts of subscribers at different prices and want to move all subscribers to the current price, increase the price for those paying closest to the current price first (for example, $2.99 to $3.99), then the next closest, and so on. This ensures that people don’t experience multiple price increases. Before you make any pricing decisions, research your target market’s pricing expectations and weigh the potential impact of raising the price against retaining subscribers.</p> <figure class="graph graph-sidebar sidebar-graph-3 graph-wide large-3 medium-4 small-10 margin-top"> <div class="graph-unit deemphasize sidebar-3-unit-3" role="text"> <div class="graph-data"> <span class="graph-caption-total">$3.99</span> <div class="graph-bar-slot"> <div class="graph-bar"></div> </div> </div> </div> <div class="graph-unit deemphasize sidebar-3-unit-2" role="text"> <div class="graph-data"> <span class="graph-caption-total">$2.99</span> <div class="graph-bar-slot"> <div class="graph-bar"></div> </div> </div> </div> <div class="graph-unit sidebar-3-unit-1" role="text"> <div class="graph-data"> <span class="graph-caption-total">$1.99</span> <div class="graph-bar-slot"> <div class="graph-bar"></div> </div> </div> </div> <div class="pin-wrapper"> <div class="pin pin-vertical pin-vertical-top pin-1"> <span class="pin-caption">2022</span> </div> <div class="pin pin-vertical pin-vertical-top pin-2"> <span class="pin-caption">2023</span> </div> <div class="pin pin-vertical pin-vertical-top pin-3"> <span class="pin-caption">2024</span> </div> </div> <figcaption class="graph-caption"> <ul> <li>New subscribers in 2024 will pay $3.99.</li> <li>Subscribers since 2023 continue to pay $2.99.</li> <li>Subscribers since 2022 continue to pay $1.99.</li> </ul> </figcaption> </figure> <p>Resources:</p> <ul class="small links"> <li class="document"><a href="/help/app-store-connect/manage-subscriptions/manage-pricing-for-auto-renewable-subscriptions/">Manage pricing for auto-renewable subscriptions</a></li> <li class="video"><a href="/videos/play/tech-talks/110350/">Manage auto-renewable subscription pricing in App&nbsp;Store&nbsp;Connect</a></li> <li class="document"><a href="/documentation/storekit/skpaymentqueuedelegate/3521328-paymentqueueshouldshowpriceconse/">Delay the price consent sheet<span class="loc-en-only"></span></a></li> </ul> <h3 id="measuring-subscriptions-with-sales-and-trends" data-sidenav="Measuring performance">Measuring performance with Sales and&nbsp;Trends</h3> <p>View and analyze subscription data to better understand how your subscriptions are performing. Filter data by Territory, App, Subscription Type, and more in Sales and Trends in App&nbsp;Store&nbsp;Connect.</p> <p><strong>Subscription summary page.</strong> Get an overview of your subscriptions — including data on overall subscription performance, daily number of active paid subscriptions, retention and conversion rates, cancellation reasons, and more. You can use the data on this page to help inform your strategy. For example, if your introductory offers have a low conversion rate, you might consider revising your in-app messaging to better explain your subscription’s value or extending the duration of the offers to give customers more time to experience your subscription’s value before making the decision to purchase.</p> <p><strong>Subscription state page.</strong> View your total active subscriptions based on their current state: standard price, introductory offers, promotional offers, and billing retry. Use this data to measure your subscriptions’ growth over time. For example, group data by Proceeds Rate to understand how many subscriptions earned a higher proceeds rate after one year. Filter or group data by different dimensions, such as Territory, Promotional Offer, Subscription, and more for additional insight.</p> <p><strong>Subscription event page.</strong> View your total subscription activations, conversions to standard price, reactivations, renewals, and more. Filter data for additional insights. For example, filtering by a specific promotional offer will show you how effective it’s been at reactivating lapsed subscriptions. You can use this information to update your promotional offer strategy. <a href="/help/app-store-connect/reference/subscription-events/">View&nbsp;definitions of each subscription&nbsp;event</a>.</p> <p><strong>Subscription retention page.</strong> View data related to your subscription retention, as well as data on conversion rates for your introductory and promotional offers. The Retention Trends for Standard Paid Subscriptions section shows the percentage of subscriptions that were renewed for consecutive periods. You can filter this information by a specific subscription to understand which start months have the highest retention and investigate contributing factors — for example, launching new content in a particular month or a seasonal marketing campaign. This can help inform your engagement and retention efforts.</p> <p><strong>Subscription reports.</strong> You can download daily reports containing all of this information plus additional details, such as anonymized start date and days before canceling.</p> <p>Resources:</p> <ul class="margin-bottom small links"> <li class="document"><a href="/app-store-connect/analytics/">Sales and Trends essentials</a></li> <li class="document"><a href="/help/app-store-connect/view-sales-and-trends/view-subscription-data/">View subscriptions data</a></li> <li class="document"><a href="/help/app-store-connect/view-sales-and-trends/download-and-view-reports/">Download and view reports</a></li> </ul> </div> </div> </div> </section> </main> <link rel="stylesheet" property="stylesheet" href="/assets/styles/router-strip.css" type="text/css" /> <aside class="section developer-router-links"> <div class="section-content"> <div class="row"> <div class="column large-3 medium-6 small-12"> <a href="/app-store/submitting/" class="block text-center"> <figure class="router-icon router-icon-submit"></figure> <p><strong>Submit</strong></p> <p class="typography-subbody">Prepare your apps and metadata for submission to the <span class="nowrap">App Store.</span></p> <p class="typography-subbody"> <span class="block-link more">Learn more</span> </p> </a> </div> <div class="column large-3 medium-6 small-12"> <a href="/app-store-connect/" class="block text-center"> <figure class="router-icon router-icon-manage"></figure> <p><strong>Manage</strong></p> <p class="typography-subbody">Manage apps, analytics, sales reports, agreements, tax and banking information, and more.</p> <p class="typography-subbody"> <span class="block-link more">Learn more</span> </p> </a> </div> <div class="column large-3 medium-6 small-12"> <a href="/app-store/promote/" class="block text-center"> <figure class="router-icon router-icon-promote"></figure> <p><strong>Promote</strong></p> <p class="typography-subbody">Get marketing guidance and tools to help you promote your app on the <span class="nowrap">App Store.</span></p> <p class="typography-subbody"> <span class="block-link more">Learn more</span> </p> </a> </div> <div class="column large-3 medium-6 small-12"> <a href="/support/app-store/" class="block text-center"> <figure class="router-icon router-icon-help"></figure> <p><strong>Support</strong></p> <p class="typography-subbody">Have a question or request? Get help with guides, articles, or by contacting us.</p> <p class="typography-subbody"> <span class="block-link more">Learn more</span> </p> </a> </div> </div> </div> </aside> <link rel="stylesheet" href="/assets/styles/footer.dist.css?17182448067"> <footer id="footer" class="footer" role="contentinfo" aria-labelledby="footer-label"> <div class="footer-content"> <h2 class="footer-label" id="footer-label">Developer Footer</h2> <developer-breadcrumbs> <li><a href="/app-store/">App Store</a></li> <li>Auto-renewable Subscriptions</li> </developer-breadcrumbs> <nav class="footer-directory" aria-label="Apple Developer Directory" role="navigation"> <!--googleoff: all--> <div class="footer-directory-column"> <input class="footer-directory-column-section-state" type="checkbox" id="footer-directory-column-section-state-platform" /> <div class="footer-directory-column-section"> <label class="footer-directory-column-section-label" for="footer-directory-column-section-state-platform"> <h3 class="footer-directory-column-section-title">Platforms</h3> </label> <a href="#footer-directory-column-section-state-platform" class="footer-directory-column-section-anchor footer-directory-column-section-anchor-open"> <span class="footer-directory-column-section-anchor-label">Open Menu</span> </a> <a href="#" class="footer-directory-column-section-anchor footer-directory-column-section-anchor-close"> <span class="footer-directory-column-section-anchor-label">Close Menu</span> </a> <ul class="footer-directory-column-section-list"> <li class="footer-directory-column-section-item"><a class="footer-directory-column-section-link" href="/ios/">iOS</a></li> <li class="footer-directory-column-section-item"><a class="footer-directory-column-section-link" href="/ipados/">iPadOS</a></li> <li class="footer-directory-column-section-item"><a class="footer-directory-column-section-link" href="/macos/">macOS</a></li> <li class="footer-directory-column-section-item"><a class="footer-directory-column-section-link" href="/tvos/">tvOS</a></li> <li class="footer-directory-column-section-item"><a class="footer-directory-column-section-link" href="/visionos/">visionOS</a></li> <li class="footer-directory-column-section-item"><a class="footer-directory-column-section-link" href="/watchos/">watchOS</a></li> </ul> </div> <input class="footer-directory-column-section-state" type="checkbox" id="footer-directory-column-section-state-tools" /> <div class="footer-directory-column-section"> <label class="footer-directory-column-section-label" for="footer-directory-column-section-state-tools"> <h3 class="footer-directory-column-section-title">Tools</h3> </label> <a href="#footer-directory-column-section-state-tools" class="footer-directory-column-section-anchor footer-directory-column-section-anchor-open"> <span class="footer-directory-column-section-anchor-label">Open Menu</span> </a> <a href="#" class="footer-directory-column-section-anchor footer-directory-column-section-anchor-close"> <span class="footer-directory-column-section-anchor-label">Close Menu</span> </a> <ul class="footer-directory-column-section-list"> <li class="footer-directory-column-section-item"><a class="footer-directory-column-section-link" href="/swift/">Swift</a></li> <li class="footer-directory-column-section-item"><a class="footer-directory-column-section-link" href="/swiftui/">SwiftUI</a></li> <li class="footer-directory-column-section-item"><a class="footer-directory-column-section-link" href="/swift-playgrounds/">Swift Playgrounds</a></li> <li class="footer-directory-column-section-item"><a class="footer-directory-column-section-link" href="/testflight/">TestFlight</a></li> <li class="footer-directory-column-section-item"><a class="footer-directory-column-section-link" href="/xcode/">Xcode</a></li> <li class="footer-directory-column-section-item"><a class="footer-directory-column-section-link" href="/xcode-cloud/">Xcode Cloud</a></li> <li class="footer-directory-column-section-item"><a class="footer-directory-column-section-link" href="/sf-symbols/">SF Symbols</a></li> </ul> </div> </div> <div class="footer-directory-column"> <input class="footer-directory-column-section-state" type="checkbox" id="footer-directory-column-section-state-topics" /> <div class="footer-directory-column-section"> <label class="footer-directory-column-section-label" for="footer-directory-column-section-state-topics"> <h3 class="footer-directory-column-section-title">Topics &amp; Technologies</h3> </label> <a href="#footer-directory-column-section-state-topics" class="footer-directory-column-section-anchor footer-directory-column-section-anchor-open"> <span class="footer-directory-column-section-anchor-label">Open Menu</span> </a> <a href="#" class="footer-directory-column-section-anchor footer-directory-column-section-anchor-close"> <span class="footer-directory-column-section-anchor-label">Close Menu</span> </a> <ul class="footer-directory-column-section-list"> <li class="footer-directory-column-section-item"><a class="footer-directory-column-section-link" href="/accessibility/">Accessibility</a></li> <li class="footer-directory-column-section-item"><a class="footer-directory-column-section-link" href="/accessories/">Accessories</a></li> <li class="footer-directory-column-section-item"><a class="footer-directory-column-section-link" href="/app-extensions/">App Extensions</a></li> <li class="footer-directory-column-section-item"><a class="footer-directory-column-section-link" href="/app-store/">App Store</a></li> <li class="footer-directory-column-section-item"><a class="footer-directory-column-section-link" href="/audio/">Audio &amp; Video</a></li> <li class="footer-directory-column-section-item"><a class="footer-directory-column-section-link" href="/augmented-reality/">Augmented Reality</a></li> <li class="footer-directory-column-section-item"><a class="footer-directory-column-section-link" href="/design/">Design</a></li> <li class="footer-directory-column-section-item"><a class="footer-directory-column-section-link" href="/distribute/">Distribution</a></li> <li class="footer-directory-column-section-item"><a class="footer-directory-column-section-link" href="/education/">Education</a></li> <li class="footer-directory-column-section-item"><a class="footer-directory-column-section-link" href="/fonts/">Fonts</a></li> <li class="footer-directory-column-section-item"><a class="footer-directory-column-section-link" href="/games/">Games</a></li> <li class="footer-directory-column-section-item"><a class="footer-directory-column-section-link" href="/health-fitness/">Health &amp; Fitness</a></li> <li class="footer-directory-column-section-item"><a class="footer-directory-column-section-link" href="/in-app-purchase/">In-App Purchase</a></li> <li class="footer-directory-column-section-item"><a class="footer-directory-column-section-link" href="/localization/">Localization</a></li> <li class="footer-directory-column-section-item"><a class="footer-directory-column-section-link" href="/maps/">Maps &amp; Location</a></li> <li class="footer-directory-column-section-item"><a class="footer-directory-column-section-link" href="/machine-learning/">Machine Learning</a></li> <li class="footer-directory-column-section-item"><a class="footer-directory-column-section-link" href="https://opensource.apple.com">Open Source</a></li> <li class="footer-directory-column-section-item"><a class="footer-directory-column-section-link" href="/security/">Security</a></li> <li class="footer-directory-column-section-item"><a class="footer-directory-column-section-link" href="/safari/">Safari &amp; Web</a></li> </ul> </div> </div> <div class="footer-directory-column"> <input class="footer-directory-column-section-state" type="checkbox" id="footer-directory-column-section-state-resources" /> <div class="footer-directory-column-section"> <label class="footer-directory-column-section-label" for="footer-directory-column-section-state-resources"> <h3 class="footer-directory-column-section-title">Resources</h3> </label> <a href="#footer-directory-column-section-state-resources" class="footer-directory-column-section-anchor footer-directory-column-section-anchor-open"> <span class="footer-directory-column-section-anchor-label">Open Menu</span> </a> <a href="#" class="footer-directory-column-section-anchor footer-directory-column-section-anchor-close"> <span class="footer-directory-column-section-anchor-label">Close Menu</span> </a> <ul class="footer-directory-column-section-list"> <li class="footer-directory-column-section-item"><a class="footer-directory-column-section-link" href="/documentation/">Documentation</a></li> <li class="footer-directory-column-section-item"><a class="footer-directory-column-section-link" href="/learn/">Tutorials</a></li> <li class="footer-directory-column-section-item"><a class="footer-directory-column-section-link" href="/download/">Downloads</a></li> <li class="footer-directory-column-section-item"><a class="footer-directory-column-section-link" href="/forums/">Forums</a></li> <li class="footer-directory-column-section-item"><a class="footer-directory-column-section-link" href="/videos/">Videos</a></li> </ul> </div> <input class="footer-directory-column-section-state" type="checkbox" id="footer-directory-column-section-state-support" /> <div class="footer-directory-column-section"> <label class="footer-directory-column-section-label" for="footer-directory-column-section-state-support"> <h3 class="footer-directory-column-section-title">Support</h3> </label> <a href="#footer-directory-column-section-state-support" class="footer-directory-column-section-anchor footer-directory-column-section-anchor-open"> <span class="footer-directory-column-section-anchor-label">Open Menu</span> </a> <a href="#" class="footer-directory-column-section-anchor footer-directory-column-section-anchor-close"> <span class="footer-directory-column-section-anchor-label">Close Menu</span> </a> <ul class="footer-directory-column-section-list"> <li class="footer-directory-column-section-item"><a class="footer-directory-column-section-link" href="/support/articles/">Support Articles</a></li> <li class="footer-directory-column-section-item"><a class="footer-directory-column-section-link" href="/contact/">Contact Us</a></li> <li class="footer-directory-column-section-item"><a class="footer-directory-column-section-link" href="/bug-reporting/">Bug Reporting</a></li> <li class="footer-directory-column-section-item"><a class="footer-directory-column-section-link" href="/system-status/">System Status</a></li> </ul> </div> <input class="footer-directory-column-section-state" type="checkbox" id="footer-directory-column-section-state-account" /> <div class="footer-directory-column-section"> <label class="footer-directory-column-section-label" for="footer-directory-column-section-state-account"> <h3 class="footer-directory-column-section-title">Account</h3> </label> <a href="#footer-directory-column-section-state-account" class="footer-directory-column-section-anchor footer-directory-column-section-anchor-open"> <span class="footer-directory-column-section-anchor-label">Open Menu</span> </a> <a href="#" class="footer-directory-column-section-anchor footer-directory-column-section-anchor-close"> <span class="footer-directory-column-section-anchor-label">Close Menu</span> </a> <ul class="footer-directory-column-section-list"> <li class="footer-directory-column-section-item"><a class="footer-directory-column-section-link" href="/account/">Apple Developer</a></li> <li class="footer-directory-column-section-item"><a class="footer-directory-column-section-link" href="https://appstoreconnect.apple.com/">App Store Connect</a></li> <li class="footer-directory-column-section-item"><a class="footer-directory-column-section-link" href="/account/ios/certificate/">Certificates, IDs, &amp; Profiles</a></li> <li class="footer-directory-column-section-item"><a class="footer-directory-column-section-link" href="https://feedbackassistant.apple.com/">Feedback Assistant</a></li> </ul> </div> </div> <div class="footer-directory-column"> <input class="footer-directory-column-section-state" type="checkbox" id="footer-directory-column-section-state-programs" /> <div class="footer-directory-column-section"> <label class="footer-directory-column-section-label" for="footer-directory-column-section-state-programs"> <h3 class="footer-directory-column-section-title">Programs</h3> </label> <a href="#footer-directory-column-section-state-programs" class="footer-directory-column-section-anchor footer-directory-column-section-anchor-open"> <span class="footer-directory-column-section-anchor-label">Open Menu</span> </a> <a href="#" class="footer-directory-column-section-anchor footer-directory-column-section-anchor-close"> <span class="footer-directory-column-section-anchor-label">Close Menu</span> </a> <ul class="footer-directory-column-section-list"> <li class="footer-directory-column-section-item"><a class="footer-directory-column-section-link" href="/programs/">Apple Developer Program</a></li> <li class="footer-directory-column-section-item"><a class="footer-directory-column-section-link" href="/programs/enterprise/">Apple Developer Enterprise Program</a></li> <li class="footer-directory-column-section-item"><a class="footer-directory-column-section-link" href="/app-store/small-business-program/">App Store Small Business Program</a></li> <li class="footer-directory-column-section-item"><a class="footer-directory-column-section-link" href="https://mfi.apple.com/">MFi Program</a></li> <li class="footer-directory-column-section-item"><a class="footer-directory-column-section-link" href="/programs/news-partner/">News Partner Program</a></li> <li class="footer-directory-column-section-item"><a class="footer-directory-column-section-link" href="/programs/video-partner/">Video Partner Program</a></li> <li class="footer-directory-column-section-item"><a class="footer-directory-column-section-link" href="/security-bounty/">Security Bounty Program</a></li> <li class="footer-directory-column-section-item"><a class="footer-directory-column-section-link" href="/programs/security-research-device/">Security Research Device Program</a></li> </ul> </div> <input class="footer-directory-column-section-state" type="checkbox" id="footer-directory-column-section-state-events" /> <div class="footer-directory-column-section"> <label class="footer-directory-column-section-label" for="footer-directory-column-section-state-events"> <h3 class="footer-directory-column-section-title">Events</h3> </label> <a href="#footer-directory-column-section-state-events" class="footer-directory-column-section-anchor footer-directory-column-section-anchor-open"> <span class="footer-directory-column-section-anchor-label">Open Menu</span> </a> <a href="#" class="footer-directory-column-section-anchor footer-directory-column-section-anchor-close"> <span class="footer-directory-column-section-anchor-label">Close Menu</span> </a> <ul class="footer-directory-column-section-list"> <li class="footer-directory-column-section-item"><a class="footer-directory-column-section-link" href="/events/">Meet with Apple</a></li> <li class="footer-directory-column-section-item"><a class="footer-directory-column-section-link" href="/events/developer-centers/">Apple Developer Centers</a></li> <li class="footer-directory-column-section-item"><a class="footer-directory-column-section-link" href="/app-store/app-store-awards/">App Store Awards</a></li> <li class="footer-directory-column-section-item"><a class="footer-directory-column-section-link" href="/design/awards/">Apple Design Awards</a></li> <li class="footer-directory-column-section-item"><a class="footer-directory-column-section-link" href="/academies/">Apple Developer Academies</a></li> <li class="footer-directory-column-section-item"><a class="footer-directory-column-section-link" href="/entrepreneur-camp/">Entrepreneur Camp</a></li> <li class="footer-directory-column-section-item"><a class="footer-directory-column-section-link" href="/wwdc/">WWDC</a></li> </ul> </div> </div> <!--googleon: all--> </nav> <section class="footer-mini" vocab="http://schema.org/" typeof="Organization"> <div class="footer-mini-news"> <div class="copy"> Get the <a href="https://apps.apple.com/us/app/apple-developer/id640199958">Apple Developer app</a>. </div> <div class="content"> <div class="color-scheme-toggle" role="radiogroup" tabindex="0" aria-label="Select a color scheme preference"> <label data-color-scheme-option="light"> <input type="radio" value="light" autocomplete="off" onchange="window.setPreferredColorScheme(event.target.value)" /> <div class="text">Light</div> </label> <label data-color-scheme-option="dark"> <input type="radio" value="dark" autocomplete="off" onchange="window.setPreferredColorScheme(event.target.value)" /> <div class="text">Dark</div> </label> <label data-color-scheme-option="auto"> <input type="radio" value="auto" autocomplete="off" onchange="window.setPreferredColorScheme(event.target.value)" /> <div class="text">Auto</div> </label> </div> <script async src="/assets/scripts/color-scheme-toggle.js"></script> </div> </div> <link rel="stylesheet" href="/assets/styles/language-dropdown.css?17182448067"> <div class="language-dropdown dropdown-container legacy-form hidden"> <select class="dropdown" aria-label="Language Dropdown"></select> <span class="dropdown-icon icon icon-chevrondown" aria-hidden="true"></span> </div> <script src="/assets/scripts/language-dropdown.js?17182448067"></script> <div class="footer-mini-legal"> <div class="footer-mini-legal-copyright">Copyright © 2024 <a href="https://www.apple.com">Apple Inc.</a> All rights reserved.</div> <div class="footer-mini-legal-links"> <a class="footer-mini-legal-link" href="https://www.apple.com/legal/internet-services/terms/site.html" class="first">Terms of Use</a> <a class="footer-mini-legal-link" href="https://www.apple.com/legal/privacy/">Privacy Policy</a> <a class="footer-mini-legal-link" href="/support/terms/">Agreements and Guidelines</a> </div> </div> </section> </div> </footer> </body> </html>

Pages: 1 2 3 4 5 6 7 8 9 10