Swiftpack.co - tikhop/Mercato as Swift Package

Swiftpack.co is a collection of thousands of indexed Swift packages. Search packages.
See all packages published by tikhop.
tikhop/Mercato 0.0.3
Lightweight StoreKit 2 Wrapper
⭐️ 58
🕓 1 year ago
iOS watchOS tvOS
.package(url: "https://github.com/tikhop/Mercato.git", from: "0.0.3")


License Platform Language

Mercato is a lightweight In-App Purchases (StoreKit 2) library for iOS, tvOS, watchOS, macOS, and Mac Catalyst.


Swift Package Manager

To integrate using Apple's Swift package manager, add the following as a dependency to your Package.swift:

.package(url: "https://github.com/tikhop/Mercato.git", .upToNextMajor(from: "0.0.1"))

Then, specify "Mercato" as a dependency of the Target in which you wish to use Mercato.

Lastly, run the following command:

swift package update


In progress...

Then, run the following command:

$ pod install

In any swift file you'd like to use Mercato, import the framework with import Mercato.


  • iOS 15.0 / OSX 12.0 / watchOS 8.0
  • Swift 5.5


Listen for transaction updates

Start transaction update listener as soon as your app launches so you don't miss a single transaction. This is important, for example, to handle transactions that may have occured after purchase returns, like an adult approving a child's purchase request or a purchase made on another device.

If your app has unfinished transactions, you receive them immediately after the app launches

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool
	Mercato.listenForTransactions(finishAutomatically: false) { transaction in
		//Deliver content to the user.
		//Finish transaction
		await transaction.finish()
	return true

Fetching products

	let productIds: Set<String> = ["com.test.product.1", "com.test.product.2", "com.test.product.3"]
	let products = try await Mercato.retrieveProducts(productIds: productIds)
	//Show products to the user
	//Handle errors

Purchase a product

try await Mercato.purchase(product: product, quantity: 1, finishAutomatically: false, appAccountToken: nil, simulatesAskToBuyInSandbox: false)

Offering in-app refunds

try await Mercato.beginRefundProcess(for: product, in: windowScene)

Restore completed transactions

In general users won't need to restore completed transactions when your app is reinstalled or downloaded on a new device. Everything should automatically be fetched by StoreKit and stay up to date. In the rare case that a user thinks they should have a transaction but you don't see it, you have to provide UI in your app that allows users to initiate the sync. It should be very rare that a user needs to initiate a sync manually. Automatic synchronization should cover the majority of cases.

try await Mercato.restorePurchases()

Essential Reading


Mercato is released under an MIT license. See LICENSE for more information.


Stars: 58
Last commit: 27 weeks ago
Advertisement: IndiePitcher.com - Cold Email Software for Startups

Release Notes

Swiftpack is being maintained by Petr Pavlik | @ptrpavlik | @swiftpackco | API | Analytics