Лист ожиданияСкачать

StoreKit 2. Как iOS-приложение продаёт покупки и подписки

Фреймворк Apple для покупок внутри приложения на Swift, от загрузки товаров до восстановления купленного.

Коротко

StoreKit 2 это фреймворк Apple для покупок и подписок внутри приложения на Swift с async/await, его показали на WWDC21. Он работает с iOS 15, каждую транзакцию App Store подписывает в формате JWS, а готовые экраны покупки StoreView и SubscriptionStoreView есть с iOS 17.

Что это и чем он отличается от первой версии

StoreKit связывает приложение с App Store. Он показывает системное окно оплаты, проводит платёж и сообщает приложению о покупке. Вторую версию Apple представила в 2021 году на WWDC21 в рассказе Meet StoreKit 2 и построила её заново на Swift concurrency. Товары загружаются и покупаются через async/await, без наблюдателей очереди платежей, как было в первой версии.

Изменилась и проверка. Раньше приложение разбирало общий чек, а теперь каждая транзакция приходит отдельным объектом, подписанным App Store в формате JSON Web Signature. StoreKit сам проверяет подпись. Первая версия, классы SKPaymentQueue и SKProduct, помечена устаревшей с iOS 18, и у SKProduct в документации стоит отсылка к Product.

Где это в Xcode

Отдельно ставить StoreKit 2 не нужно, он входит в SDK. В коде хватает import StoreKit, а минимальная версия в Minimum Deployments должна быть iOS 15 или новее.

Для проверки без App Store нужен файл конфигурации StoreKit. Его создают из меню File › New, в поиске вводят storekit и выбирают StoreKit Configuration File. Включают файл в схеме, Edit Scheme › Run › Options › StoreKit Configuration.

Версии и числа Apple

ЧтоС какой версии
Product, Transaction, Transaction.currentEntitlementsiOS 15, macOS 12, tvOS 15, watchOS 8
Проверка права на вводное предложение, isEligibleForIntroOfferiOS 15
Готовые экраны StoreView, ProductView, SubscriptionStoreViewiOS 17, macOS 14, watchOS 10
Синхронизированный с App Store Connect файл конфигурацииXcode 14
Вид предложения win-backiOS 18
SKPaymentQueue и SKProduct из первой версииустарели с iOS 18
Помесячная оплата годовой подписки с обязательством на 12 месяцевiOS 26.5

По данным документации StoreKit и WWDC26, проверено 16.10.2026.

Покупка по шагам

  1. При запуске приложения заведите задачу, которая слушает Transaction.updates. Туда приходят продления и покупки, сделанные вне приложения.
  2. Загрузите товары через Product.products(for:) по Product ID из App Store Connect.
  3. По нажатию вызовите product.purchase(), система покажет своё окно подтверждения.
  4. Разберите результат. Доступ открывайте только для verified, unverified значит, что подпись не прошла проверку.
  5. Выдайте купленное и вызовите transaction.finish().
  6. При каждом запуске пройдите Transaction.currentEntitlements. Кнопка «Восстановить покупки» вызывает AppStore.sync().
Покупка в StoreKit 2 за шесть шаговШесть шагов покупки в StoreKit 2. 1. Слушайте Transaction.updates с первого запуска приложения. 2. Загрузите товары через Product.products(for:), цены придут в валюте покупателя. 3. Купите через product.purchase(), система покажет своё окно оплаты. 4. Проверьте подпись, VerificationResult, доступ открывают только для verified. 5. Выдайте покупку и вызовите transaction.finish(). 6. При запуске пройдите currentEntitlements, там вечные покупки и активные подписки. StoreKit 2 работает с iOS 15, по документации Apple на 16 октября 2026 года.Покупка в StoreKit 2 за шесть шаговSwift и async/await, iOS 15 и новее. По документации Apple на 16.10.20261Слушайте обновленияTransaction.updatesс первого запуска2Загрузите товарыProduct.products(for:)цены в валюте покупателя3Купитеproduct.purchase()системное окно оплаты4Проверьте подписьVerificationResultоткрывать только verified5Выдайте и завершитеtransaction.finish()после выдачи доступа6Восстановите при запускеcurrentEntitlementsвечные покупки и подписки
Доступ открывают только по транзакции verified, а покупки вне приложения приходят в Transaction.updates. По документации StoreKit, 16.10.2026.

Готовые экраны покупки

С iOS 17 экран покупки можно не рисовать самому. StoreView показывает список покупок, ProductView одну покупку, SubscriptionStoreView подписки одной группы. По словам Apple, хватает одной строки кода, а название, цена и срок приходят из App Store Connect.

SubscriptionStoreView сам ставит кнопку закрытия и ссылки на условия и политику конфиденциальности из App Store Connect, кнопку восстановления добавляет storeButton(_:for:). Для помесячной оплаты годовой подписки из iOS 26.5 Apple в 2026 году на WWDC26 показала модификатор preferredSubscriptionPricingTerms. Что должно быть на своём экране покупки, разобрано на странице про пейвол.

Как проверить до App Store

Локальный файл конфигурации работает без серверов App Store. Цены в нём условные и не связаны с ценовыми точками, но показываются в валюте выбранной витрины. В нём удобно проверить неудачную оплату и право на промо-предложения. Синхронизированный файл, с Xcode 14, берёт покупки из App Store Connect, но правке в Xcode не поддаётся.

Следующий уровень это песочница App Store с тестовыми аккаунтами. На iPhone с iOS 16 и новее для запуска из Xcode включите Developer Mode.

Агент в Appto пишет приложение на SwiftUI в обычном проекте Xcode и сам проходит каждый экран на симуляторе, а проверить покупку руками можно на своём iPhone или через TestFlight (код приложения в Appto).

Частые ошибки

  • Слушатель Transaction.updates запускают поздно. Туда приходят коды предложений, win-back offers и продления, без слушателя с первого запуска их легко пропустить.
  • Доступ по unverified. Такая транзакция не прошла проверку подписи, открывать по ней платное нельзя.
  • Нет finish(). Незавершённая транзакция остаётся в Transaction.unfinished и при следующем запуске придёт на обработку снова.
  • Расходуемые ищут в currentEntitlements. Их там нет, как нет возвращённых и отозванных покупок.

Вопросы

С какой версии iOS работает StoreKit 2?

С iOS 15, macOS 12, tvOS 15 и watchOS 8. Готовые экраны StoreView, ProductView и SubscriptionStoreView требуют iOS 17 или macOS 14 (документация Apple, проверено 16.10.2026).

Нужно ли переходить со старого StoreKit?

SKPaymentQueue и SKProduct помечены устаревшими с iOS 18, документация отсылает к Product из StoreKit 2. Новое 2026 года, например помесячную оплату годовой подписки из iOS 26.5, Apple показывает уже на StoreKit 2.

Что такое JWS в StoreKit 2?

JSON Web Signature, формат подписи. App Store подписывает каждую транзакцию, StoreKit проверяет подпись и отдаёт verified или unverified, а строку jwsRepresentation можно проверить ещё и на своём сервере.

Как восстановить покупки в StoreKit 2?

При запуске пройдите Transaction.currentEntitlements, там все нерасходуемые покупки и активные подписки. Кнопка «Восстановить покупки» вызывает AppStore.sync().

Сделайте своё приложение в Appto

Appto сама проверит нишу по свежим данным App Store, нарисует экраны, напишет код, оформит страницу в App Store и отправит в Apple с вашего аккаунта или покажет, что нажать в App Store Connect. Работает на вашем Claude Code или Codex.

Скачать для Mac