# StoreKitHelper
**Repository Path**: mirrors_jaywcjlove/StoreKitHelper
## Basic Information
- **Project Name**: StoreKitHelper
- **Description**: A lightweight StoreKit2 wrapper designed specifically for SwiftUI, making it easier to implement in-app purchases.
- **Primary Language**: Unknown
- **License**: MIT
- **Default Branch**: main
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 0
- **Created**: 2025-03-16
- **Last Updated**: 2025-09-21
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
StoreKit Helper
===
[English](./README.zh.md)
专为 SwiftUI 设计的轻量级 StoreKit2 包装器,让应用内购买的实现更加简单。

## 文档
请参阅 [DevTutor](https://github.com/jaywcjlove/devtutor) 中详细的 `StoreKitHelper` [文档](https://github.com/jaywcjlove/devtutor),其中包括多个快速入门示例、自定义支付界面示例和 API 参考,提供全面的示例和指导。
## 使用方法
在 SwiftUI 应用程序的入口点创建并注入一个 `StoreContext` 实例,它负责加载产品列表和跟踪购买状态。
```swift
import StoreKitHelper
enum AppProduct: String, InAppProduct {
case lifetime = "focuscursor.lifetime"
case monthly = "focuscursor.monthly"
var id: String { rawValue }
}
@main struct DevTutorApp: App {
@StateObject var store = StoreContext(products: AppProduct.allCases)
var body: some Scene {
WindowGroup {
ContentView().environmentObject(store)
}
}
}
```
使用 `StoreKitHelperView` 直接显示应用内购买弹窗视图,并通过链式 API 配置各种参数。
```swift
struct PurchaseContent: View {
@EnvironmentObject var store: StoreContext
var body: some View {
StoreKitHelperView()
.frame(maxWidth: 300)
.frame(minWidth: 260)
// 弹窗被关闭时触发(例如用户点击关闭按钮)
.onPopupDismiss {
store.isShowingPurchasePopup = false
}
// 设置在购买界面中显示的内容区域
// (可包含功能描述、版本对比等)
.pricingContent {
AnyView(PricingContent())
}
.termsOfService {
// 点击【服务条款】按钮时触发的操作
}
.privacyPolicy {
// 点击【隐私政策】按钮时触发的操作
}
}
}
```
点击打开付费产品列表界面。
```swift
struct PurchaseButton: View {
@EnvironmentObject var store: StoreContext
var body: some View {
if store.hasNotPurchased == true {
PurchasePopupButton()
.sheet(isPresented: $store.isShowingPurchasePopup) {
/// 包含付费产品列表的弹窗
PurchaseContent()
}
}
}
}
```
您可以使用 `StoreContext` 中的 `hasNotPurchased` 属性来检查用户是否已购买,然后动态显示不同的界面内容。例如:
```swift
@EnvironmentObject var store: StoreContext
var body: some View {
if store.hasNotPurchased == true {
// 🧾 用户未购买 - 显示受限内容或提示购买
} else {
// ✅ 用户已购买 - 显示完整功能
}
}
```
### filteredProducts
这是一个简单的迁移解决方案:产品列表通过产品 ID 进行过滤,保留旧的产品 ID,这样现有用户不需要重新购买并可以恢复他们的购买,而新用户通过新的产品 ID 购买,实现平滑过渡。
```swift
enum AppProduct: String, InAppProduct {
/// 旧版本
case sponsor = "focuscursor.Sponsor"
case generous = "focuscursor.Generous"
/// 新版本
case monthly = "focuscursor.monthly"
case lifetime = "focuscursor.lifetime"
var id: String { rawValue }
}
StoreKitHelperView()
.filteredProducts() { productID, product in
if productID == AppProduct.sponsor.rawValue {
return false
}
if productID == AppProduct.generous.rawValue {
return false
}
return true
}
StoreKitHelperSelectionView()
.filteredProducts() { productID, product in
return true
}
```
## 许可证
基于 MIT 许可证授权。