- StoreHelper Documentation Landing Page -
StoreHelper
documentation landing page - StoreHelper Quick Start -
StoreHelper
quick-start guide - StoreHelper In-Depth Guide -
StoreHelper
andStoreKit2
in-depth guide - StoreHelper Demo Project - Example Xcode
StoreHelper
project - StoreHelper Demo with UIKit - experimental demo showing
StoreHelper
in a UIKit project
SKHelper
is a new (September, 2024), lightweight Swift package that enables developers to easily add in-app purchase and subscription functionaility to their SwiftUI-based apps.
Designed to be an easier-to-use refactoring of StoreHelper, it makes use of Apple's StoreKit Views to provide a standard and easily customizable UI.
Check out the SKHelper
Repo and Quick Start Tutorial to get a fast overview of how things work.
- 5 May, 2024
- Simplification of subscription display price logic to use Apple's subscriptionPeriodFormatStyle, which also supports localization. Added by Hengyu (thank you!)
- 2 April, 2024
- Basic support for tvOS added by Hengyu (thank you!)
- 15 March, 2024
- Reorganization of documentation to support DocC
- 8 March, 2024
- Added Privacy Policy Manifest
- 24 January, 2024
- Basic support for visionOS added by Hengyu (thank you!)
- 23 June, 2023
- Improved handling of subscription renewals and expirations that happen when the app's not running
- See
AppStoreHelper.paymentQueue(_:updatedTransactions:)
andStoreHelper.handleStoreKit1Transactions(productId:date:status:transaction:)
- 12 February, 2023
- Made the configuration of subscription products more flexible
- You can now either rely on a naming convention (as before) or use a "Subscriptions" section in "Products.plist"
- See the Samples/Configuration/SampleProducts.plist file for details
- Added unit tests to StoreHelperDemo project
- 27 January, 2023
- Fixed a bug related to isPurchased for consumable products. Caused a crash on macOS and iOS (thank you Abdullah Kardaş!)
- 18 January, 2023
- Additional logging of various activities added
- 17 January, 2023
- Improved support for handling extended wait times for StoreKit and App Store responses
- Improved caching of purchasing status
- Updates to many shared views to handle unknown purchases status
- 10 January, 2023
- Added support for caching of product purchase status in
isPurchased(productId:)
using thepurchasedProductsFallback
collection - Using
purchasedProductsFallback
as a cache can be turned on/off usingStoreHelper.doUsePurchasedProductsFallbackCache
- The
purchasedProductsFallback
property is nowpublic private(set)
rather thanpublic
- Added "Refresh Products" button and support for pull-to-refresh to the products list
- UI improvements to various views and improved sharing of views between iOS and macOS
- Minor documentation updates (StoreHelper Guide)
- Added support for caching of product purchase status in
- 13 December, 2022
- Added proof-of-concept demo showing
StoreHelper
in a UIKit project
- Added proof-of-concept demo showing
- 27 November, 2022
- Major update to the way subscriptions are handled
- Subscription prices now show prices and renewal periods
- Promotional and Introductory offers on subscriptions are now supported
- The most appropriate promotional or introductory offers or standard price and renewal period are automatically displayed
- Additions to
StoreHelper.SubscriptionHelper
:hasLowerValueCurrentSubscription(than:)
,isLapsedSubscriber(to:)
,allSubscriptionTransactions()
- Added in-app redemption of offer codes
- Added new sections to the Guide on "Subscription Introductory and Promotional Offers" and "Supporting In-App Offer Code Redemption"
- Quick Start and Guide documentation reviewed and updated for iOS16/macOS13/Xcode14 and new subscription features
- 7 Nov, 2022
- Minor changes re upgrade to iOS 16 and macOS 13
- 19 October, 2022
- Added new section to the Guide on "Restoring Previous Purchases"
- 15 March, 2022
- Changed the initialization flow because of a new warning in Xcode 13.3 related to having
@MainActor init()
- Removed the need for StoreHelper's init method to run on the main thread by moving some initialization code to a new
start()
method - You should now call
StoreHelper.start()
as soon as possible after initializingStoreHelper
- The
start()
method starts listening for transactions and get localized product info from the App Store - Updated all documentation because of this change
- Changed the initialization flow because of a new warning in Xcode 13.3 related to having
- 25 January, 2022
- Refactored
StoreHelper
as a SPM Package - Moved example app to separate repo (StoreHelperDemo)
- Updated documentation re change to SPM package
- Refactored
- 19 January, 2022
- Major updates to documentation
- Added Mac target
- 21 December, 2021
- Updated documentation to reflect refactoring changes
- 20 December, 2021
- Refactored throughout so that this non-private version of
StoreHelper
is in-sync with privateStoreHelper
code used in an app released to the App Store
- Refactored throughout so that this non-private version of
StoreHelper
is a Swift Package Manager (SPM) package that enables developers using Xcode 13 - 15 to easily add in-app purchase
support to iOS 15 - 17 and macOS 12 - 14 SwiftUI apps. The package also provides basic support for visionOS and tvOS.
StoreHelper
is used to provide in-app purchase support in Writerly (iOS/macOS), which is available on the App Store.
StoreHelper
provides the following features:
- Multi-platform (iOS, macOS) SwiftUI support for purchasing Consumable, Non-consumable and Subscription products
- Detailed documentation and an example project
- Supports transaction validation, pending ("ask to buy") transactions, cancelled and failed transactions
- Supports customer refunds and management of subscriptions
- Supports introdctory offers, in-app redeeming of offer codes and experimental support for promotional offers
- Provides detailed transaction information and history for non-consumables and subscriptions
- Support for direct App Store purchases of promoted in-app purchases
MIT license, copyright (c) 2022, 2023, 2024 Russell Archer. This software is provided "as-is" without warranty and may be freely used, copied, modified and redistributed, including as part of commercial software.
See License for details.
StoreHelper
uses Apple's StoreKit2
, which requires iOS 15 - 17, macOS 12 - 14 and Xcode 13 - 15.
Jump to the StoreHelper Quick Start guide.