Skip to content
Draft
Show file tree
Hide file tree
Changes from all 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
3 changes: 2 additions & 1 deletion Examples/MagicWeather/Project.swift
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ import ProjectDescriptionHelpers
let project = Project(
name: "MagicWeatherApp",
organizationName: .revenueCatOrgName,
packages: .projectPackages,
settings: .appProject,
targets: [
.target(
Expand Down Expand Up @@ -34,4 +35,4 @@ let project = Project(
settings: .appTarget
)
]
)
)
3 changes: 2 additions & 1 deletion Examples/MagicWeatherSwiftUI/Project.swift
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ import ProjectDescriptionHelpers
let project = Project(
name: "MagicWeatherSwiftUI",
organizationName: .revenueCatOrgName,
packages: .projectPackages,
settings: .appProject,
targets: [
.target(
Expand Down Expand Up @@ -34,4 +35,4 @@ let project = Project(
settings: .appTarget
)
],
)
)
3 changes: 2 additions & 1 deletion Examples/PurchaseTester/Project.swift
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,7 @@ let allDestinations = destinations + [.appleWatch]
let project = Project(
name: "PurchaseTester",
organizationName: .revenueCatOrgName,
packages: .projectPackages,
settings: .appProject,
targets: [
.target(
Expand Down Expand Up @@ -115,4 +116,4 @@ let project = Project(
)
)
]
)
)
3 changes: 2 additions & 1 deletion Examples/rc-maestro/Project.swift
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ import Foundation
let project = Project(
name: "Maestro",
organizationName: .revenueCatOrgName,
packages: .projectPackages,
settings: .appProject,
targets: [
.target(
Expand Down Expand Up @@ -53,4 +54,4 @@ let project = Project(
)
)
]
)
)
1 change: 1 addition & 0 deletions Examples/testCustomEntitlementsComputation/Project.swift
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ let allDestinations: Destinations = [
let project = Project(
name: "testCustomEntitlementsComputation",
organizationName: .revenueCatOrgName,
packages: .projectPackages,
settings: .appProject,
targets: [
.target(
Expand Down
1 change: 1 addition & 0 deletions Projects/APITesters/Project.swift
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@ let allDeploymentTargets: DeploymentTargets = .multiplatform(
let project = Project(
name: "APITesters",
organizationName: .revenueCatOrgName,
packages: .projectPackages,
settings: .framework,
targets: [
.target(
Expand Down
1 change: 1 addition & 0 deletions Projects/PaywallValidationTester/Project.swift
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@ let allDeploymentTargets: DeploymentTargets = .multiplatform(
let project = Project(
name: "PaywallValidationTester",
organizationName: .revenueCatOrgName,
packages: .projectPackages,
settings: .appProject,
targets: [
.target(
Expand Down
1 change: 1 addition & 0 deletions Projects/PaywallsTester/Project.swift
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@ let allDeploymentTargets: DeploymentTargets = .multiplatform(
let project = Project(
name: "PaywallsTester",
organizationName: .revenueCatOrgName,
packages: .projectPackages,
settings: .appProject,
targets: [
.target(
Expand Down
1 change: 1 addition & 0 deletions Projects/RevenueCatUI/Project.swift
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@ let allDeploymentTargets: DeploymentTargets = .multiplatform(
let project = Project(
name: "RevenueCatUI",
organizationName: .revenueCatOrgName,
packages: .projectPackages,
settings: .framework,
targets: [
.target(
Expand Down
6 changes: 3 additions & 3 deletions Tests/BackendIntegrationTests/Constants.swift
Original file line number Diff line number Diff line change
Expand Up @@ -10,12 +10,12 @@ import Foundation

enum Constants {

static let apiKey = "REVENUECAT_API_KEY"
static let loadShedderApiKey = "REVENUECAT_LOAD_SHEDDER_API_KEY"
static let apiKey = "rGogYWEdzrENUEzEoYXZNUkzoPEbEvfb"
static let loadShedderApiKey = "appl_aRfhwrmSlzrSrQagvIipFKcFLKv"
static let customEntitlementComputationApiKey = "REVENUECAT_CUSTOM_ENTITLEMENT_COMPUTATION_API_KEY"

// Server URL for the tests. If set to empty string, we'll use the default URL.
static let proxyURL = "REVENUECAT_PROXY_URL"
static let proxyURL = ""

static let userDefaultsSuiteName = "BackendIntegrationTests"
static let storeKitConfigFileName = "RevenueCat_IntegrationPurchaseTesterConfiguration"
Expand Down
2 changes: 1 addition & 1 deletion Tuist/Package.resolved

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

43 changes: 34 additions & 9 deletions Tuist/ProjectDescriptionHelpers/Environment.swift
Original file line number Diff line number Diff line change
@@ -1,18 +1,43 @@
import ProjectDescription

public enum DependencyMode {
/// The dependency is a local Swift Package Manager package.
case localSwiftPackage

/// The dependency is a local Xcode project. Tuist's default behavior.
case localXcodeProject

/// The dependency is a remote Swift Package Manager package.
case remoteSwiftPackage

/// The dependency is a remote Xcode project.
case remoteXcodeProject
}

extension Environment {
/// Returns whether the current environment is local.
/// This is determined by the `rcLocal` environment variable, defaulting to `true` if not set.
///
/// Returns the dependency mode for RevenueCat/RevenueCatUI.
///
/// Example usage:
/// ```bash
/// # Generate project with local environment (default)
/// # Generate project with local Swift Package dependency (default)
/// tuist generate
///
/// # Generate project with non-local environment
/// TUIST_RC_LOCAL=false tuist generate
///
/// # Generate project with Xcode project dependency (instead of Swift Package)
/// TUIST_RC_XCODE_PROJECT=true tuist generate
///
/// # Generate project with remote dependency (instead of local dependency)
/// TUIST_RC_REMOTE=true tuist generate
/// ```
public static var local: Bool {
Environment.rcLocal.getBoolean(default: true)
public static var dependencyMode: DependencyMode {
// Note: Environment variable names are prefixed with TUIST_ automatically, therefore:
// rcRemote reads TUIST_RC_REMOTE
// rcXcodeProject reads TUIST_RC_XCODE_PROJECT
let remote = Environment.rcRemote.getBoolean(default: false)
let xcodeProject = Environment.rcXcodeProject.getBoolean(default: false)
if remote {
return xcodeProject ? .remoteXcodeProject : .remoteSwiftPackage
} else {
return xcodeProject ? .localXcodeProject : .localSwiftPackage
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
import ProjectDescription

extension Array<ProjectDescription.Package> {

public static var projectPackages: [ProjectDescription.Package] {
if Environment.dependencyMode == .localSwiftPackage {
return [.package(path: "../..")]
} else if Environment.dependencyMode == .remoteSwiftPackage {
return [.package(url: "https://github.com/RevenueCat/purchases-ios", .branch("main"))]
} else {
return []
}
}
}
104 changes: 65 additions & 39 deletions Tuist/ProjectDescriptionHelpers/TargetDependencies.swift
Original file line number Diff line number Diff line change
@@ -1,29 +1,78 @@
import ProjectDescription

extension TargetDependency {
/// Returns a RevenueCat dependency that can be either local or external
/// - Parameter local: If true, returns a local project dependency. If false, returns an external dependency
/// from spm
/// Returns the RevenueCat dependency based on the dependency mode
/// - Returns: A TargetDependency for RevenueCat
public static var revenueCat: TargetDependency {
if Environment.local {
.project(
target: "RevenueCat",
path: .relativeToRoot("Projects/RevenueCat")
)
} else {
.revenueCatLocal
switch Environment.dependencyMode {
case .localSwiftPackage:
return .revenueCatSwiftPackageDependency
case .remoteSwiftPackage:
return .revenueCatSwiftPackageDependency
case .remoteXcodeProject:
return .revenueCatRemoteXcodeProjectDependency
case .localXcodeProject:
return .revenueCatXcodeProjectDependency
}
}

/// Returns a local RevenueCat dependency from SPM
/// - Returns: A TargetDependency for RevenueCat from external source
public static var revenueCatLocal: TargetDependency {
.external(
name: "RevenueCat"
)
/// Returns the RevenueCatUI dependency based on the dependency mode
/// - Returns: A TargetDependency for RevenueCatUI
public static var revenueCatUI: TargetDependency {
switch Environment.dependencyMode {
case .localSwiftPackage:
return .revenueCatUISwiftPackageDependency
case .remoteSwiftPackage:
return .revenueCatUISwiftPackageDependency
case .remoteXcodeProject:
return .revenueCatUIRemoteXcodeProjectDependency
case .localXcodeProject:
return .revenueCatUIXcodeProjectDependency
}
}

// RevenueCat

/// Returns the remote RevenueCat dependency as Tuist's XcodeProj-based dependency
static var revenueCatRemoteXcodeProjectDependency: TargetDependency {
.external(name: "RevenueCat")
}

/// Returns the remote RevenueCat Swift Package Manager dependency
static var revenueCatSwiftPackageDependency: TargetDependency {
.package(product: "RevenueCat", type: .runtime)
}

/// Returns the Xcode project RevenueCat dependency
/// - Returns: A TargetDependency for RevenueCat from Xcode project
static var revenueCatXcodeProjectDependency: TargetDependency {
.project(
target: "RevenueCat",
path: .relativeToRoot("Projects/RevenueCat"))
}

// RevenueCatUI

/// Returns the remote RevenueCat dependency as Tuist's XcodeProj-based dependency
static var revenueCatUIRemoteXcodeProjectDependency: TargetDependency {
.external(name: "RevenueCatUI")
}

/// Returns the remote RevenueCat Swift Package Manager dependency
static var revenueCatUISwiftPackageDependency: TargetDependency {
.package(product: "RevenueCatUI", type: .runtime)
}

/// Returns the Xcode project RevenueCatUI dependency
/// - Returns: A TargetDependency for RevenueCat from Xcode project
static var revenueCatUIXcodeProjectDependency: TargetDependency {
.project(
target: "RevenueCat",
path: .relativeToRoot("Projects/RevenueCatUI"))
}

// Custom Entitlement Computation

/// Returns a RevenueCat dependency with custom entitlement computation enabled
/// - Returns: A TargetDependency for RevenueCat_CustomEntitlementComputation
public static var revenueCatCustomEntitlementComputation: TargetDependency {
Expand All @@ -33,29 +82,6 @@ extension TargetDependency {
)
}

/// Returns a RevenueCatUI dependency that can be either local or external
/// - Parameter local: If true, returns a local project dependency. If false, returns an external dependency
/// from spm
/// - Returns: A TargetDependency for RevenueCatUI
public static var revenueCatUI: TargetDependency {
if Environment.local {
.project(
target: "RevenueCatUI",
path: .relativeToRoot("Projects/RevenueCatUI")
)
} else {
.revenueCatUILocal
}
}

/// Returns a local RevenueCatUI dependency from SPM
/// - Returns: A TargetDependency for RevenueCatUI from external source
public static var revenueCatUILocal: TargetDependency {
.external(
name: "RevenueCatUI"
)
}

/// Returns a ReceiptParser dependency
/// - Returns: A TargetDependency for ReceiptParser
public static var receiptparser: TargetDependency {
Expand Down
2 changes: 1 addition & 1 deletion Workspace.swift
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ var projects: [Path] = [
"./Projects/PaywallValidationTester"
]

if Environment.local {
if Environment.dependencyMode == .localXcodeProject {
projects.append("./Projects/RevenueCat")
projects.append("./Projects/RevenueCatUI")
} else {
Expand Down