VpnHood.AppLib.Stores.AppStore.Native
8.0.7
dotnet add package VpnHood.AppLib.Stores.AppStore.Native --version 8.0.7
NuGet\Install-Package VpnHood.AppLib.Stores.AppStore.Native -Version 8.0.7
<PackageReference Include="VpnHood.AppLib.Stores.AppStore.Native" Version="8.0.7" />
<PackageVersion Include="VpnHood.AppLib.Stores.AppStore.Native" Version="8.0.7" />
<PackageReference Include="VpnHood.AppLib.Stores.AppStore.Native" />
paket add VpnHood.AppLib.Stores.AppStore.Native --version 8.0.7
#r "nuget: VpnHood.AppLib.Stores.AppStore.Native, 8.0.7"
#:package VpnHood.AppLib.Stores.AppStore.Native@8.0.7
#addin nuget:?package=VpnHood.AppLib.Stores.AppStore.Native&version=8.0.7
#tool nuget:?package=VpnHood.AppLib.Stores.AppStore.Native&version=8.0.7
VpnHood.AppLib.Stores.AppStore.Native
Formerly VpnHood.AppLib.Ios.StoreKitNative: the id and the namespace changed in 2026-09 so that no
VpnHood package id starts with an OS. The namespace is the package id.
StoreKit 2 for .NET iOS, self-contained in one NuGet:
VpnHoodStoreKit.xcframework— a tiny Swift facade exposing StoreKit 2's Swift-async API over a C ABI (@_cdeclfunctions + JSON strings + one completion callback). Prebuilt and committed, so consumers never need a Swift toolchain.- The C# binding —
NativeStoreKitBridge(P/Invoke over__Internal), theIStoreKitBridgeinterface, and theStoreKitProduct/StoreKitPurchaseDTOs.
The two sides are a matched pair: change the contract in both or not at all. That is why they live in the same repository and ship as one atomically versioned package.
| C function | StoreKit 2 |
|---|---|
vhsk_load_products |
Product.products(for:) + intro-offer eligibility |
vhsk_purchase |
product.purchase(options: [.appAccountToken(uuid)]) |
vhsk_current_entitlement |
Transaction.currentEntitlements (newest) |
vhsk_show_manage_subscriptions |
AppStore.showManageSubscriptions(in: scene) |
Why a facade?
Microsoft.iOS does not bind StoreKit 2's Swift-async API. This package is the
documented seam: plain C functions taking/returning JSON, completion via a C
callback, statically linked into the app binary (DllImport "__Internal").
Usage
<PackageReference Include="VpnHood.AppLib.Stores.AppStore.Native" Version="x.y.z" />
IStoreKitBridge bridge = new NativeStoreKitBridge();
var products = await bridge.LoadProducts(["my.product.id"], cancellationToken);
The xcframework is embedded in the NuGet and linked into the main executable
automatically; no NativeReference is needed in the consuming project.
Requires net11.0-ios, minimum OS version 15.0.
Building
Day-to-day (C#-only changes) needs no Mac — the xcframework is committed.
Rebuilding the native facade (only when StoreKitBridge.swift changes) needs a
Mac with Xcode 15+, or the build-xcframework GitHub workflow:
cd VpnHood.AppLib.Stores.AppStore.Native/swift && ./build-xcframework.sh
See swift/README.md for design notes.
Publishing
Every push to main bumps pub/PubVersion.json, packs, and publishes to
nuget.org (.github/workflows/publish-nuget.yml). Consumers pin an exact
version and upgrade deliberately — the package intentionally changes rarely.
License
| Product | Versions Compatible and additional computed target framework versions. |
|---|---|
| .NET | net11.0-ios26.5 is compatible. |
-
net11.0-ios26.5
- No dependencies.
NuGet packages (1)
Showing the top 1 NuGet packages that depend on VpnHood.AppLib.Stores.AppStore.Native:
| Package | Downloads |
|---|---|
|
VpnHood.AppLib.Stores.AppStore
VpnHood App Store billing (StoreKit 2 via the VpnHoodStoreKit Swift facade) and Sign in with Apple |
GitHub repositories
This package is not used by any popular GitHub repositories.
| Version | Downloads | Last Updated |
|---|---|---|
| 8.0.7 | 104 | 9/23/2026 |