Rename to LocalProduct to avoid StoreKit clash
Started happening with Xcode 13.
This commit is contained in:
parent
a90cf31974
commit
d1a1b555f8
|
@ -127,7 +127,7 @@
|
|||
0E5204C4259F675400CBAB56 /* TrustPolicy.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0EBE3A8F213C6F4000BFA2F5 /* TrustPolicy.swift */; };
|
||||
0E5204C5259F675400CBAB56 /* ProviderConnectionProfile.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0EBE3AA4213DC1B000BFA2F5 /* ProviderConnectionProfile.swift */; };
|
||||
0E5204C6259F675400CBAB56 /* Pool.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0ED31C0F20CF09A30027975F /* Pool.swift */; };
|
||||
0E5204C7259F675400CBAB56 /* Product.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0E569F1B259F2D8F0022DFB8 /* Product.swift */; };
|
||||
0E5204C7259F675400CBAB56 /* Feature.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0E569F1B259F2D8F0022DFB8 /* Feature.swift */; };
|
||||
0E5204C8259F675400CBAB56 /* PoolGroup.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0E533B152258E03B00EF94FC /* PoolGroup.swift */; };
|
||||
0E5204C9259F675400CBAB56 /* ConnectionService+Configurations.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0E2D11B9217DBEDE0096822C /* ConnectionService+Configurations.swift */; };
|
||||
0E5204CA259F675400CBAB56 /* ProfileNetworkSettings.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0EFB901722764689006405E4 /* ProfileNetworkSettings.swift */; };
|
||||
|
@ -157,7 +157,7 @@
|
|||
0E569F15259F2D3E0022DFB8 /* Issue.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0E569F14259F2D3E0022DFB8 /* Issue.swift */; };
|
||||
0E569F1C259F2D8F0022DFB8 /* GracefulVPN.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0E569F19259F2D8F0022DFB8 /* GracefulVPN.swift */; };
|
||||
0E569F1E259F2D8F0022DFB8 /* ProductManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0E569F1A259F2D8F0022DFB8 /* ProductManager.swift */; };
|
||||
0E569F20259F2D8F0022DFB8 /* Product.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0E569F1B259F2D8F0022DFB8 /* Product.swift */; };
|
||||
0E569F20259F2D8F0022DFB8 /* Feature.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0E569F1B259F2D8F0022DFB8 /* Feature.swift */; };
|
||||
0E569F2B259F2DB10022DFB8 /* Infrastructure+Name.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0E569F28259F2DB10022DFB8 /* Infrastructure+Name.swift */; };
|
||||
0E569F2C259F2DB10022DFB8 /* Infrastructure+Metadata.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0E569F29259F2DB10022DFB8 /* Infrastructure+Metadata.swift */; };
|
||||
0E569F2D259F2DB10022DFB8 /* InfrastructureFactory.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0E569F2A259F2DB10022DFB8 /* InfrastructureFactory.swift */; };
|
||||
|
@ -408,7 +408,7 @@
|
|||
0E569F14259F2D3E0022DFB8 /* Issue.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Issue.swift; sourceTree = "<group>"; };
|
||||
0E569F19259F2D8F0022DFB8 /* GracefulVPN.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = GracefulVPN.swift; sourceTree = "<group>"; };
|
||||
0E569F1A259F2D8F0022DFB8 /* ProductManager.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ProductManager.swift; sourceTree = "<group>"; };
|
||||
0E569F1B259F2D8F0022DFB8 /* Product.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Product.swift; sourceTree = "<group>"; };
|
||||
0E569F1B259F2D8F0022DFB8 /* Feature.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Feature.swift; sourceTree = "<group>"; };
|
||||
0E569F28259F2DB10022DFB8 /* Infrastructure+Name.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "Infrastructure+Name.swift"; sourceTree = "<group>"; };
|
||||
0E569F29259F2DB10022DFB8 /* Infrastructure+Metadata.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "Infrastructure+Metadata.swift"; sourceTree = "<group>"; };
|
||||
0E569F2A259F2DB10022DFB8 /* InfrastructureFactory.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = InfrastructureFactory.swift; sourceTree = "<group>"; };
|
||||
|
@ -1011,10 +1011,10 @@
|
|||
0ECEB109224FECEA00E9E551 /* DataUnit.swift */,
|
||||
0EC7F20420E24308004EA58E /* DebugLog.swift */,
|
||||
0ED38AE621404F100004D387 /* EndpointDataSource.swift */,
|
||||
0E569F1B259F2D8F0022DFB8 /* Feature.swift */,
|
||||
0E569F19259F2D8F0022DFB8 /* GracefulVPN.swift */,
|
||||
0E45E70F22BE108100F19312 /* OpenVPNOptions.swift */,
|
||||
0E89DFC4213DF7AE00741BA1 /* Preferences.swift */,
|
||||
0E569F1B259F2D8F0022DFB8 /* Product.swift */,
|
||||
0E569F1A259F2D8F0022DFB8 /* ProductManager.swift */,
|
||||
0EFB901722764689006405E4 /* ProfileNetworkSettings.swift */,
|
||||
0E89DFC7213E8FC500741BA1 /* SessionProxy+Communication.swift */,
|
||||
|
@ -1865,7 +1865,7 @@
|
|||
0E3152C0223FA03D00F61841 /* Utils.swift in Sources */,
|
||||
0E3152CB223FA04D00F61841 /* Pool.swift in Sources */,
|
||||
0E3CAFC0229AAE770008E5C8 /* Intents.intentdefinition in Sources */,
|
||||
0E569F20259F2D8F0022DFB8 /* Product.swift in Sources */,
|
||||
0E569F20259F2D8F0022DFB8 /* Feature.swift in Sources */,
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
};
|
||||
|
@ -1964,7 +1964,7 @@
|
|||
0E5204CD259F675400CBAB56 /* Infrastructure+Name.swift in Sources */,
|
||||
0E5204CC259F675400CBAB56 /* HostConnectionProfile.swift in Sources */,
|
||||
0E5204B7259F674000CBAB56 /* AppConstants.swift in Sources */,
|
||||
0E5204C7259F675400CBAB56 /* Product.swift in Sources */,
|
||||
0E5204C7259F675400CBAB56 /* Feature.swift in Sources */,
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
};
|
||||
|
|
|
@ -64,7 +64,7 @@ extension UIColor {
|
|||
}
|
||||
|
||||
extension UIViewController {
|
||||
func presentPurchaseScreen(forProduct product: Product, delegate: PurchaseViewControllerDelegate? = nil) {
|
||||
func presentPurchaseScreen(forProduct product: LocalProduct, delegate: PurchaseViewControllerDelegate? = nil) {
|
||||
let nav = StoryboardScene.Purchase.initialScene.instantiate()
|
||||
let vc = nav.topViewController as? PurchaseViewController
|
||||
// vc?.feature = product
|
||||
|
|
|
@ -32,7 +32,7 @@ import SwiftyBeaver
|
|||
private let log = SwiftyBeaver.self
|
||||
|
||||
class DonationViewController: UITableViewController, StrongTableHost {
|
||||
private var donationList: [Product] = []
|
||||
private var donationList: [LocalProduct] = []
|
||||
|
||||
private var productsByIdentifier: [String: SKProduct] = [:]
|
||||
|
||||
|
@ -65,7 +65,7 @@ class DonationViewController: UITableViewController, StrongTableHost {
|
|||
return
|
||||
}
|
||||
|
||||
donationList.append(contentsOf: Product.allDonations.filter { productsByIdentifier[$0.rawValue] != nil })
|
||||
donationList.append(contentsOf: LocalProduct.allDonations.filter { productsByIdentifier[$0.rawValue] != nil })
|
||||
model.set(.donation, count: donationList.count, forSection: .oneTime)
|
||||
|
||||
if isPurchasing {
|
||||
|
|
|
@ -230,7 +230,7 @@ extension WizardProviderViewController: AccountViewControllerDelegate {
|
|||
// MARK: -
|
||||
|
||||
extension WizardProviderViewController: PurchaseViewControllerDelegate {
|
||||
func purchaseController(_ purchaseController: PurchaseViewController, didPurchase product: Product?) {
|
||||
func purchaseController(_ purchaseController: PurchaseViewController, didPurchase product: LocalProduct?) {
|
||||
guard let metadata = selectedMetadata else {
|
||||
return
|
||||
}
|
||||
|
|
|
@ -32,13 +32,13 @@ import Convenience
|
|||
private let log = SwiftyBeaver.self
|
||||
|
||||
protocol PurchaseViewControllerDelegate: AnyObject {
|
||||
func purchaseController(_ purchaseController: PurchaseViewController, didPurchase product: Product?)
|
||||
func purchaseController(_ purchaseController: PurchaseViewController, didPurchase product: LocalProduct?)
|
||||
}
|
||||
|
||||
class PurchaseViewController: UITableViewController, StrongTableHost {
|
||||
private var isLoading = true
|
||||
|
||||
var feature: Product?
|
||||
var feature: LocalProduct?
|
||||
|
||||
weak var delegate: PurchaseViewControllerDelegate?
|
||||
|
||||
|
@ -162,7 +162,7 @@ class PurchaseViewController: UITableViewController, StrongTableHost {
|
|||
guard let weakSelf = self else {
|
||||
return
|
||||
}
|
||||
let product = Product(rawValue: skProduct.productIdentifier)
|
||||
let product = LocalProduct(rawValue: skProduct.productIdentifier)
|
||||
weakSelf.delegate?.purchaseController(weakSelf, didPurchase: product)
|
||||
}
|
||||
}
|
||||
|
|
|
@ -91,7 +91,7 @@ extension NSAlert {
|
|||
}
|
||||
|
||||
extension NSViewController {
|
||||
func presentPurchaseScreen(forProduct product: Product, delegate: PurchaseViewControllerDelegate? = nil) {
|
||||
func presentPurchaseScreen(forProduct product: LocalProduct, delegate: PurchaseViewControllerDelegate? = nil) {
|
||||
let vc = StoryboardScene.Purchase.initialScene.instantiate()
|
||||
// vc.feature = product
|
||||
vc.delegate = delegate
|
||||
|
|
|
@ -580,7 +580,7 @@ class StatusMenu: NSObject {
|
|||
|
||||
private func addDonations(fromProducts products: [SKProduct], to menu: NSMenu) {
|
||||
products.sorted { $0.price.decimalValue < $1.price.decimalValue }.forEach {
|
||||
guard let p = Product(rawValue: $0.productIdentifier), p.isDonation, let price = $0.localizedPrice else {
|
||||
guard let p = LocalProduct(rawValue: $0.productIdentifier), p.isDonation, let price = $0.localizedPrice else {
|
||||
return
|
||||
}
|
||||
let title = "\($0.localizedTitle) (\(price))"
|
||||
|
|
|
@ -32,7 +32,7 @@ import Convenience
|
|||
private let log = SwiftyBeaver.self
|
||||
|
||||
protocol PurchaseViewControllerDelegate: AnyObject {
|
||||
func purchaseController(_ purchaseController: PurchaseViewController, didPurchase product: Product?)
|
||||
func purchaseController(_ purchaseController: PurchaseViewController, didPurchase product: LocalProduct?)
|
||||
}
|
||||
|
||||
class PurchaseViewController: NSViewController {
|
||||
|
@ -52,7 +52,7 @@ class PurchaseViewController: NSViewController {
|
|||
|
||||
@IBOutlet private weak var buttonRestore: NSButton!
|
||||
|
||||
var feature: Product?
|
||||
var feature: LocalProduct?
|
||||
|
||||
weak var delegate: PurchaseViewControllerDelegate?
|
||||
|
||||
|
@ -191,7 +191,7 @@ class PurchaseViewController: NSViewController {
|
|||
guard let weakSelf = self else {
|
||||
return
|
||||
}
|
||||
let product = Product(rawValue: skProduct.productIdentifier)
|
||||
let product = LocalProduct(rawValue: skProduct.productIdentifier)
|
||||
weakSelf.delegate?.purchaseController(weakSelf, didPurchase: product)
|
||||
|
||||
self?.dismiss(nil)
|
||||
|
|
|
@ -358,11 +358,11 @@ public class AppConstants {
|
|||
return ProcessInfo.processInfo.environment["FULL_VERSION"] != nil
|
||||
}
|
||||
|
||||
static let lastFullVersionBuild: (Int, Product) = (2016, .fullVersion_iOS)
|
||||
static let lastFullVersionBuild: (Int, LocalProduct) = (2016, .fullVersion_iOS)
|
||||
#else
|
||||
static let isBetaFullVersion = false
|
||||
|
||||
static let lastFullVersionBuild: (Int, Product) = (0, .fullVersion_macOS)
|
||||
static let lastFullVersionBuild: (Int, LocalProduct) = (0, .fullVersion_macOS)
|
||||
#endif
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
//
|
||||
// Product.swift
|
||||
// LocalProduct.swift
|
||||
// Passepartout
|
||||
//
|
||||
// Created by Davide De Rosa on 10/11/19.
|
||||
|
@ -26,7 +26,7 @@
|
|||
import Foundation
|
||||
import StoreKit
|
||||
|
||||
public struct Product: RawRepresentable, Equatable, Hashable {
|
||||
public struct LocalProduct: RawRepresentable, Equatable, Hashable {
|
||||
private static let bundleSubdomain = "ios"
|
||||
|
||||
private static let bundle = "com.algoritmico.\(bundleSubdomain).Passepartout"
|
||||
|
@ -39,19 +39,19 @@ public struct Product: RawRepresentable, Equatable, Hashable {
|
|||
|
||||
// MARK: Donations
|
||||
|
||||
public static let tinyDonation = Product(donationDescription: "Tiny")
|
||||
public static let tinyDonation = LocalProduct(donationDescription: "Tiny")
|
||||
|
||||
public static let smallDonation = Product(donationDescription: "Small")
|
||||
public static let smallDonation = LocalProduct(donationDescription: "Small")
|
||||
|
||||
public static let mediumDonation = Product(donationDescription: "Medium")
|
||||
public static let mediumDonation = LocalProduct(donationDescription: "Medium")
|
||||
|
||||
public static let bigDonation = Product(donationDescription: "Big")
|
||||
public static let bigDonation = LocalProduct(donationDescription: "Big")
|
||||
|
||||
public static let hugeDonation = Product(donationDescription: "Huge")
|
||||
public static let hugeDonation = LocalProduct(donationDescription: "Huge")
|
||||
|
||||
public static let maxiDonation = Product(donationDescription: "Maxi")
|
||||
public static let maxiDonation = LocalProduct(donationDescription: "Maxi")
|
||||
|
||||
public static let allDonations: [Product] = [
|
||||
public static let allDonations: [LocalProduct] = [
|
||||
.tinyDonation,
|
||||
.smallDonation,
|
||||
.mediumDonation,
|
||||
|
@ -61,24 +61,24 @@ public struct Product: RawRepresentable, Equatable, Hashable {
|
|||
]
|
||||
|
||||
private init(donationDescription: String) {
|
||||
self.init(rawValue: "\(Product.donationsBundle).\(donationDescription)")!
|
||||
self.init(rawValue: "\(LocalProduct.donationsBundle).\(donationDescription)")!
|
||||
}
|
||||
|
||||
// MARK: Features
|
||||
|
||||
public static let allProviders = Product(featureId: "all_providers")
|
||||
public static let allProviders = LocalProduct(featureId: "all_providers")
|
||||
|
||||
public static let trustedNetworks = Product(featureId: "trusted_networks")
|
||||
public static let trustedNetworks = LocalProduct(featureId: "trusted_networks")
|
||||
|
||||
public static let siriShortcuts = Product(featureId: "siri")
|
||||
public static let siriShortcuts = LocalProduct(featureId: "siri")
|
||||
|
||||
public static let fullVersion_iOS = Product(featureId: "full_version")
|
||||
public static let fullVersion_iOS = LocalProduct(featureId: "full_version")
|
||||
|
||||
public static let fullVersion_macOS = Product(featureId: "full_mac_version")
|
||||
public static let fullVersion_macOS = LocalProduct(featureId: "full_mac_version")
|
||||
|
||||
public static let fullVersion = Product(featureId: "full_multi_version")
|
||||
public static let fullVersion = LocalProduct(featureId: "full_multi_version")
|
||||
|
||||
public static let allFeatures: [Product] = [
|
||||
public static let allFeatures: [LocalProduct] = [
|
||||
.allProviders,
|
||||
.trustedNetworks,
|
||||
.siriShortcuts,
|
||||
|
@ -88,37 +88,37 @@ public struct Product: RawRepresentable, Equatable, Hashable {
|
|||
]
|
||||
|
||||
private init(featureId: String) {
|
||||
self.init(rawValue: "\(Product.featuresBundle).\(featureId)")!
|
||||
self.init(rawValue: "\(LocalProduct.featuresBundle).\(featureId)")!
|
||||
}
|
||||
|
||||
// MARK: Providers
|
||||
|
||||
// public static var allProviders: [Product] {
|
||||
// public static var allProviders: [LocalProduct] {
|
||||
// return InfrastructureFactory.shared.allMetadata.map {
|
||||
// return Product(providerMetadata: $0)
|
||||
// return LocalProduct(providerMetadata: $0)
|
||||
// }
|
||||
// }
|
||||
|
||||
fileprivate init(providerMetadata: Infrastructure.Metadata) {
|
||||
self.init(rawValue: "\(Product.providersBundle).\(providerMetadata.inApp ?? providerMetadata.name)")!
|
||||
self.init(rawValue: "\(LocalProduct.providersBundle).\(providerMetadata.inApp ?? providerMetadata.name)")!
|
||||
}
|
||||
|
||||
// MARK: All
|
||||
|
||||
public static var all: [Product] {
|
||||
public static var all: [LocalProduct] {
|
||||
return allDonations + allFeatures// + allProviders
|
||||
}
|
||||
|
||||
public var isDonation: Bool {
|
||||
return rawValue.hasPrefix(Product.donationsBundle)
|
||||
return rawValue.hasPrefix(LocalProduct.donationsBundle)
|
||||
}
|
||||
|
||||
public var isFeature: Bool {
|
||||
return rawValue.hasPrefix(Product.featuresBundle)
|
||||
return rawValue.hasPrefix(LocalProduct.featuresBundle)
|
||||
}
|
||||
|
||||
public var isProvider: Bool {
|
||||
return rawValue.hasPrefix(Product.providersBundle)
|
||||
return rawValue.hasPrefix(LocalProduct.providersBundle)
|
||||
}
|
||||
|
||||
// MARK: RawRepresentable
|
||||
|
@ -131,7 +131,7 @@ public struct Product: RawRepresentable, Equatable, Hashable {
|
|||
|
||||
// MARK: Equatable
|
||||
|
||||
public static func ==(lhs: Product, rhs: Product) -> Bool {
|
||||
public static func ==(lhs: LocalProduct, rhs: LocalProduct) -> Bool {
|
||||
return lhs.rawValue == rhs.rawValue
|
||||
}
|
||||
|
||||
|
@ -143,12 +143,12 @@ public struct Product: RawRepresentable, Equatable, Hashable {
|
|||
}
|
||||
|
||||
public extension Infrastructure.Metadata {
|
||||
var product: Product {
|
||||
return Product(providerMetadata: self)
|
||||
var product: LocalProduct {
|
||||
return LocalProduct(providerMetadata: self)
|
||||
}
|
||||
}
|
||||
|
||||
public extension Product {
|
||||
public extension LocalProduct {
|
||||
func matchesStoreKitProduct(_ skProduct: SKProduct) -> Bool {
|
||||
return skProduct.productIdentifier == rawValue
|
||||
}
|
|
@ -44,12 +44,12 @@ public class ProductManager: NSObject {
|
|||
|
||||
public let isBetaFullVersion: Bool
|
||||
|
||||
public let lastFullVersionBuild: (Int, Product)
|
||||
public let lastFullVersionBuild: (Int, LocalProduct)
|
||||
|
||||
public init(
|
||||
locksBetaFeatures: Bool,
|
||||
isBetaFullVersion: Bool,
|
||||
lastFullVersionBuild: (Int, Product)
|
||||
lastFullVersionBuild: (Int, LocalProduct)
|
||||
) {
|
||||
self.locksBetaFeatures = locksBetaFeatures
|
||||
self.isBetaFullVersion = isBetaFullVersion
|
||||
|
@ -63,15 +63,15 @@ public class ProductManager: NSObject {
|
|||
|
||||
public let cfg: Configuration
|
||||
|
||||
private let inApp: InApp<Product>
|
||||
private let inApp: InApp<LocalProduct>
|
||||
|
||||
private var purchasedAppBuild: Int?
|
||||
|
||||
private var purchasedFeatures: Set<Product>
|
||||
private var purchasedFeatures: Set<LocalProduct>
|
||||
|
||||
private var purchaseDates: [Product: Date]
|
||||
private var purchaseDates: [LocalProduct: Date]
|
||||
|
||||
private var cancelledPurchases: Set<Product>
|
||||
private var cancelledPurchases: Set<LocalProduct>
|
||||
|
||||
private var refreshRequest: SKReceiptRefreshRequest?
|
||||
|
||||
|
@ -108,7 +108,7 @@ public class ProductManager: NSObject {
|
|||
}
|
||||
|
||||
public func listProducts(completionHandler: (([SKProduct]?, Error?) -> Void)?) {
|
||||
let products = Product.all
|
||||
let products = LocalProduct.all
|
||||
guard !products.isEmpty else {
|
||||
completionHandler?(nil, nil)
|
||||
return
|
||||
|
@ -122,13 +122,13 @@ public class ProductManager: NSObject {
|
|||
})
|
||||
}
|
||||
|
||||
public func product(withIdentifier identifier: Product) -> SKProduct? {
|
||||
public func product(withIdentifier identifier: LocalProduct) -> SKProduct? {
|
||||
return inApp.product(withIdentifier: identifier)
|
||||
}
|
||||
|
||||
public func featureProducts(including: [Product]) -> [SKProduct] {
|
||||
public func featureProducts(including: [LocalProduct]) -> [SKProduct] {
|
||||
return inApp.products.filter {
|
||||
guard let p = Product(rawValue: $0.productIdentifier) else {
|
||||
guard let p = LocalProduct(rawValue: $0.productIdentifier) else {
|
||||
return false
|
||||
}
|
||||
guard including.contains(p) else {
|
||||
|
@ -141,9 +141,9 @@ public class ProductManager: NSObject {
|
|||
}
|
||||
}
|
||||
|
||||
public func featureProducts(excluding: [Product]) -> [SKProduct] {
|
||||
public func featureProducts(excluding: [LocalProduct]) -> [SKProduct] {
|
||||
return inApp.products.filter {
|
||||
guard let p = Product(rawValue: $0.productIdentifier) else {
|
||||
guard let p = LocalProduct(rawValue: $0.productIdentifier) else {
|
||||
return false
|
||||
}
|
||||
guard !excluding.contains(p) else {
|
||||
|
@ -192,7 +192,7 @@ public class ProductManager: NSObject {
|
|||
return purchasedFeatures.contains(.fullVersion)
|
||||
}
|
||||
|
||||
private func isEligible(forFeature feature: Product) -> Bool {
|
||||
private func isEligible(forFeature feature: LocalProduct) -> Bool {
|
||||
#if os(iOS)
|
||||
return isFullVersion() || purchasedFeatures.contains(feature)
|
||||
#else
|
||||
|
@ -204,7 +204,7 @@ public class ProductManager: NSObject {
|
|||
return isBeta || !purchasedFeatures.isEmpty
|
||||
}
|
||||
|
||||
public func verifyEligible(forFeature feature: Product) throws {
|
||||
public func verifyEligible(forFeature feature: LocalProduct) throws {
|
||||
if isBeta {
|
||||
if cfg.isBetaFullVersion {
|
||||
return
|
||||
|
@ -232,15 +232,15 @@ public class ProductManager: NSObject {
|
|||
}
|
||||
}
|
||||
|
||||
public func hasPurchased(_ product: Product) -> Bool {
|
||||
public func hasPurchased(_ product: LocalProduct) -> Bool {
|
||||
return purchasedFeatures.contains(product)
|
||||
}
|
||||
|
||||
public func isCancelledPurchase(_ product: Product) -> Bool {
|
||||
public func isCancelledPurchase(_ product: LocalProduct) -> Bool {
|
||||
return cancelledPurchases.contains(product)
|
||||
}
|
||||
|
||||
public func purchaseDate(forProduct product: Product) -> Date? {
|
||||
public func purchaseDate(forProduct product: LocalProduct) -> Date? {
|
||||
return purchaseDates[product]
|
||||
}
|
||||
|
||||
|
@ -273,7 +273,7 @@ public class ProductManager: NSObject {
|
|||
|
||||
log.debug("In-app receipts:")
|
||||
iapReceipts.forEach {
|
||||
guard let pid = $0.productIdentifier, let product = Product(rawValue: pid) else {
|
||||
guard let pid = $0.productIdentifier, let product = LocalProduct(rawValue: pid) else {
|
||||
return
|
||||
}
|
||||
if let cancellationDate = $0.cancellationDate {
|
||||
|
|
Loading…
Reference in New Issue