Skip to content
Open
Show file tree
Hide file tree
Changes from 7 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
41 changes: 41 additions & 0 deletions Sources/Purchasing/Offering.swift
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@

import Foundation

// swiftlint:disable file_length
/**
* An offering is a collection of ``Package``s, and they let you control which products
* are shown to users without requiring an app update.
Expand Down Expand Up @@ -178,6 +179,25 @@ import Foundation

// swiftlint:disable cyclomatic_complexity

/// Initialize an ``Offering`` given a list of ``Package``s.
@objc
public convenience init(
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I wonder, should we deprecate these constructors? Not sure if we want to push devs into just a single constructor... Maybe we should even try to make the "main" constructor internal to avoid these issues but we would need to keep the current ones public for backwards compatibility

identifier: String,
serverDescription: String,
metadata: [String: Any] = [:],
availablePackages: [Package]
) {
self.init(
identifier: identifier,
serverDescription: serverDescription,
metadata: metadata,
paywall: nil,
paywallComponents: nil,
availablePackages: availablePackages,
webCheckoutUrl: nil
)
}

/// Initialize an ``Offering`` given a list of ``Package``s.
@objc
public convenience init(
Expand All @@ -198,6 +218,27 @@ import Foundation
)
}

/// Initialize an ``Offering`` given a list of ``Package``s.
public convenience init(
identifier: String,
serverDescription: String,
metadata: [String: Any] = [:],
paywall: PaywallData? = nil,
paywallComponents: PaywallComponents? = nil,
availablePackages: [Package]
) {
self.init(
identifier: identifier,
serverDescription: serverDescription,
metadata: metadata,
paywall: paywall,
paywallComponents: paywallComponents,
draftPaywallComponents: nil,
availablePackages: availablePackages,
webCheckoutUrl: nil
)
}

/// Initialize an ``Offering`` given a list of ``Package``s.
public convenience init(
identifier: String,
Expand Down
34 changes: 34 additions & 0 deletions Sources/Purchasing/Package.swift
Original file line number Diff line number Diff line change
Expand Up @@ -118,6 +118,23 @@ import Foundation
/// The url to purchase this package on the web
@objc public let webCheckoutUrl: URL?

/// Initialize a ``Package``.
@objc
public convenience init(
identifier: String,
packageType: PackageType,
storeProduct: StoreProduct,
offeringIdentifier: String
) {
self.init(
identifier: identifier,
packageType: packageType,
storeProduct: storeProduct,
presentedOfferingContext: .init(offeringIdentifier: offeringIdentifier),
webCheckoutUrl: nil
)
}

/// Initialize a ``Package``.
@objc
public convenience init(
Expand All @@ -136,6 +153,23 @@ import Foundation
)
}

/// Initialize a ``Package``.
@objc
public init(
identifier: String,
packageType: PackageType,
storeProduct: StoreProduct,
presentedOfferingContext: PresentedOfferingContext
) {
self.identifier = identifier
self.packageType = packageType
self.storeProduct = storeProduct
self.presentedOfferingContext = presentedOfferingContext
self.webCheckoutUrl = nil

super.init()
}

/// Initialize a ``Package``.
@objc
public init(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -32,3 +32,52 @@ func checkOfferingAPI() {

print(off!, ident, sDesc, aPacks, lPack!, annPack!, smPack!, thmPack!, twmPack!, mPack!, wPack!, pPack!, package!)
}

private func checkCreateOfferingAPI(package: Package) {
_ = Offering(
identifier: "",
serverDescription: "",
availablePackages: [package]
)
_ = Offering(
identifier: "",
serverDescription: "",
availablePackages: [package],
webCheckoutUrl: URL(string: "https://revenuecat.com")
)
_ = Offering(
identifier: "",
serverDescription: "",
metadata: [String: Any](),
availablePackages: [package]
)
_ = Offering(
identifier: "",
serverDescription: "",
metadata: [String: Any](),
availablePackages: [package],
webCheckoutUrl: URL(string: "https://revenuecat.com")
)
_ = Offering(
identifier: "",
serverDescription: "",
metadata: [String: Any](),
paywall: Optional<PaywallData>.none,
availablePackages: [package]
)
_ = Offering(
identifier: "",
serverDescription: "",
paywall: Optional<PaywallData>.none,
availablePackages: [package],
webCheckoutUrl: URL(string: "https://revenuecat.com")
)
_ = Offering(
identifier: "",
serverDescription: "",
metadata: [String: Any](),
paywall: Optional<PaywallData>.none,
availablePackages: [package],
webCheckoutUrl: URL(string: "https://revenuecat.com")
)
}
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,13 @@ func checkPackageAPI(pack: Package! = nil) {
}

private func checkCreatePackageAPI(product: StoreProduct) {
_ = Package(
identifier: "",
packageType: PackageType.annual,
storeProduct: product,
offeringIdentifier: ""
)

_ = Package(
identifier: "",
packageType: PackageType.annual,
Expand Down
5 changes: 5 additions & 0 deletions Tests/APITesters/AllAPITests/ObjcAPITester/RCOfferingAPI.m
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,11 @@ + (void)checkAPI {
RCPackage *ok = [o objectForKeyedSubscript:@""];
NSDictionary<NSString *, id> *md = o.metadata;

o = [[RCOffering alloc] initWithIdentifier:@""
serverDescription:@""
metadata:@{}
availablePackages:a];

o = [[RCOffering alloc] initWithIdentifier:@""
serverDescription:@""
metadata:@{}
Expand Down
5 changes: 5 additions & 0 deletions Tests/APITesters/AllAPITests/ObjcAPITester/RCPackageAPI.m
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,11 @@ + (void)checkAPI {
storeProduct:storeProduct
offeringIdentifier:oid
webCheckoutUrl:[NSURL URLWithString:@"https://revenuecat.com"]];

package = [[RCPackage alloc] initWithIdentifier:i
packageType:RCPackageTypeAnnual
storeProduct:storeProduct
offeringIdentifier:oid];
}

+ (void)checkEnums {
Expand Down
18 changes: 18 additions & 0 deletions Tests/APITesters/AllAPITests/SwiftAPITester/OfferingAPI.swift
Original file line number Diff line number Diff line change
Expand Up @@ -46,19 +46,37 @@ func checkOfferingAPI() {
}

private func checkCreateOfferingAPI(package: Package) {
_ = Offering(
identifier: "",
serverDescription: "",
availablePackages: [package]
)
_ = Offering(
identifier: "",
serverDescription: "",
availablePackages: [package],
webCheckoutUrl: URL(string: "https://revenuecat.com")
)
_ = Offering(
identifier: "",
serverDescription: "",
metadata: [String: Any](),
availablePackages: [package]
)
_ = Offering(
identifier: "",
serverDescription: "",
metadata: [String: Any](),
availablePackages: [package],
webCheckoutUrl: URL(string: "https://revenuecat.com")
)
_ = Offering(
identifier: "",
serverDescription: "",
metadata: [String: Any](),
paywall: Optional<PaywallData>.none,
availablePackages: [package]
)
_ = Offering(
identifier: "",
serverDescription: "",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,13 @@ func checkPackageAPI(pack: Package! = nil) {
}

private func checkCreatePackageAPI(product: StoreProduct) {
_ = Package(
identifier: "",
packageType: PackageType.annual,
storeProduct: product,
offeringIdentifier: ""
)

_ = Package(
identifier: "",
packageType: PackageType.annual,
Expand Down