Skip to content

AGENTS.md update 2026 June#7133

Draft
cursor[bot] wants to merge 1 commit into
mainfrom
cursor/purchases-ios-guardrails-84a9
Draft

AGENTS.md update 2026 June#7133
cursor[bot] wants to merge 1 commit into
mainfrom
cursor/purchases-ios-guardrails-84a9

Conversation

@cursor

@cursor cursor Bot commented Jul 3, 2026

Copy link
Copy Markdown

Checklist

  • N/A — config/docs-only change, no new code

Motivation

Recurring review feedback in June 2026 PRs highlighted patterns that can be caught earlier with linting and clearer agent guidelines.

Description

Summary

Analyzed 900 comments across 138 PRs from June 1–30 2026 in RevenueCat/purchases-ios. Sources: 22 human reviewers (ajpallares, rickvdl, tonidero, facumenzella, vegaro, fire-at-will, alexrepty, polmiro, peterporfy, MonikaMateska, AlvaroBrey, JayShortway, davedelong, MarkVillacampa, and others) and 5 bots (cursor[bot], emerge-tools[bot], github-actions[bot], socket-security[bot], dependabot[bot]).

New guidelines added

Guideline Why (PR review frequency)
no_hardcoded_logger_strings SwiftLint rule Inline string literals in Logger calls flagged in 4+ PRs; reviewers asked to use *Strings.swift enum pattern
Prefer tightest access control 10 comments across 5 PRs asked for private/internal instead of wider visibility
Avoid default parameter values on internal inits 4 comments across 4 PRs — defaults let callers silently omit args
Don't add code nothing in the PR uses 24 comments across 10 PRs about unused code or premature introductions
Don't write redundant Codable implementations 5 comments across 3 PRs — reviewers asked to drop manual init(from:)/encode(to:) when synthesized is identical
Avoid duplicating constants 15 comments across 12 PRs — same value defined in multiple places

Test plan

  • SwiftLint regex validated locally (Python regex test for the no_hardcoded_logger_strings pattern).
  • 37 pre-existing violations baselined in swiftlint-baseline.json.
  • Full SwiftLint run requires Swift toolchain (SourceKit); will be verified by CI.
Open in Web View Automation 

- Add no_hardcoded_logger_strings SwiftLint rule to enforce *Strings.swift pattern
- Baseline 37 pre-existing Logger string literal violations
- Add 6 AGENTS.md guardrails: access control, default params, unused code,
  redundant Codable, duplicate constants, log string centralization

Co-authored-by: Cesar de la Vega <vegaro@users.noreply.github.com>
@vegaro vegaro added the pr:other label Jul 3, 2026 — with Cursor
Comment thread AGENTS.md
- **Never commit API keys or secrets** — do not stage or commit API keys, tokens, credentials, or any sensitive data
- **Prefer the tightest access control** — default to `private`; only widen to `internal`/`public`/`@_spi` when callers outside the current scope actually need it. Every reviewer-requested visibility reduction is a missed opportunity to get it right the first time.
- **Avoid default parameter values on internal initializers** — they let callers silently omit arguments. Make every parameter explicit so the compiler catches missing values, especially when new parameters are added later.
- **Don't add code that nothing in the PR uses** — unused types, methods, or properties that "will be needed later" should be introduced in the PR that actually uses them. This keeps PRs reviewable and avoids dead code.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

This one might contradict PRs with 300 lines or less. I would remove it

Comment thread AGENTS.md
- **Avoid default parameter values on internal initializers** — they let callers silently omit arguments. Make every parameter explicit so the compiler catches missing values, especially when new parameters are added later.
- **Don't add code that nothing in the PR uses** — unused types, methods, or properties that "will be needed later" should be introduced in the PR that actually uses them. This keeps PRs reviewable and avoids dead code.
- **Don't write redundant `Codable` implementations** — if the synthesized `init(from:)` or `encode(to:)` does what you need, omit the manual version. Custom implementations that just repeat the default add maintenance cost.
- **Avoid duplicating constants** — if a value already exists as a constant elsewhere, reference that single source of truth instead of defining a second copy. Duplicate literals are easy to miss when one copy changes.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

This one feels vague. Sometimes duplication in favor of better semantics make sense to me. What do you think? 🤔

Comment thread swiftlint-baseline.json
@@ -1 +1,1397 @@
[{"text":"public enum CustomerCenterAction {","violation":{"ruleDescription":"","ruleIdentifier":"no_new_public_enums","ruleName":"No new public enums in consumer-facing APIs","location":{"file":"RevenueCatUI\/CustomerCenter\/Data\/CustomerCenterAction.swift","line":16,"character":1},"severity":"error","reason":"Adding a new `public enum` to the SDK's consumer-facing surface (including `@_spi(Experimental)`) is not allowed. Adding a case to an existing `public enum` is a source-breaking change for any consumer with an exhaustive `switch`. Use a struct with static constants instead."}},{"text":"public enum CustomerCenterManagementOption {","violation":{"ruleIdentifier":"no_new_public_enums","ruleDescription":"","ruleName":"No new public enums in consumer-facing APIs","reason":"Adding a new `public enum` to the SDK's consumer-facing surface (including `@_spi(Experimental)`) is not allowed. Adding a case to an existing `public enum` is a source-breaking change for any consumer with an exhaustive `switch`. Use a struct with static constants instead.","severity":"error","location":{"file":"RevenueCatUI\/CustomerCenter\/Data\/CustomerCenterManagementOption.swift","line":20,"character":1}}},{"text":"public enum EmergeRenderingMode: Int {","violation":{"reason":"Adding a new `public enum` to the SDK's consumer-facing surface (including `@_spi(Experimental)`) is not allowed. Adding a case to an existing `public enum` is a source-breaking change for any consumer with an exhaustive `switch`. Use a struct with static constants instead.","ruleIdentifier":"no_new_public_enums","ruleDescription":"","ruleName":"No new public enums in consumer-facing APIs","severity":"error","location":{"file":"RevenueCatUI\/Helpers\/EmergeRenderingMode.swift","line":9,"character":1}}},{"text":"public enum PaywallPresentationMode {","violation":{"severity":"error","ruleIdentifier":"no_new_public_enums","ruleDescription":"","ruleName":"No new public enums in consumer-facing APIs","location":{"character":1,"line":23,"file":"RevenueCatUI\/View+PresentPaywall.swift"},"reason":"Adding a new `public enum` to the SDK's consumer-facing surface (including `@_spi(Experimental)`) is not allowed. Adding a case to an existing `public enum` is a source-breaking change for any consumer with an exhaustive `switch`. Use a struct with static constants instead."}},{"text":"@objc(RCAttributionNetwork) public enum AttributionNetwork: Int {","violation":{"ruleDescription":"","ruleName":"No new public enums in consumer-facing APIs","reason":"Adding a new `public enum` to the SDK's consumer-facing surface (including `@_spi(Experimental)`) is not allowed. Adding a case to an existing `public enum` is a source-breaking change for any consumer with an exhaustive `switch`. Use a struct with static constants instead.","severity":"error","location":{"line":20,"character":29,"file":"Sources\/Attribution\/AttributionNetwork.swift"},"ruleIdentifier":"no_new_public_enums"}},{"text":" public enum Algorithm: String, Codable, Sendable {","violation":{"ruleName":"No new public enums in consumer-facing APIs","ruleDescription":"","severity":"error","ruleIdentifier":"no_new_public_enums","location":{"file":"Sources\/Caching\/Checksum.swift","line":43,"character":5},"reason":"Adding a new `public enum` to the SDK's consumer-facing surface (including `@_spi(Experimental)`) is not allowed. Adding a case to an existing `public enum` is a source-breaking change for any consumer with an exhaustive `switch`. Use a struct with static constants instead."}},{"text":"public enum CustomerCenterPresentationMode {","violation":{"ruleName":"No new public enums in consumer-facing APIs","reason":"Adding a new `public enum` to the SDK's consumer-facing surface (including `@_spi(Experimental)`) is not allowed. Adding a case to an existing `public enum` is a source-breaking change for any consumer with an exhaustive `switch`. Use a struct with static constants instead.","location":{"line":17,"file":"Sources\/CustomerCenter\/CustomerCenterPresentationMode.swift","character":1},"ruleIdentifier":"no_new_public_enums","ruleDescription":"","severity":"error"}},{"text":"@objc(RCPurchasesErrorCode) public enum ErrorCode: Int, Error {","violation":{"severity":"error","location":{"file":"Sources\/Generated\/ErrorCode.swift","line":17,"character":29},"ruleDescription":"","reason":"Adding a new `public enum` to the SDK's consumer-facing surface (including `@_spi(Experimental)`) is not allowed. Adding a case to an existing `public enum` is a source-breaking change for any consumer with an exhaustive `switch`. Use a struct with static constants instead.","ruleIdentifier":"no_new_public_enums","ruleName":"No new public enums in consumer-facing APIs"}},{"text":" public enum Environment: String {","violation":{"location":{"line":73,"file":"Sources\/LocalReceiptParsing\/BasicTypes\/AppleReceipt.swift","character":5},"severity":"error","ruleDescription":"","ruleName":"No new public enums in consumer-facing APIs","ruleIdentifier":"no_new_public_enums","reason":"Adding a new `public enum` to the SDK's consumer-facing surface (including `@_spi(Experimental)`) is not allowed. Adding a case to an existing `public enum` is a source-breaking change for any consumer with an exhaustive `switch`. Use a struct with static constants instead."}},{"text":" public enum ProductType: Int {","violation":{"reason":"Adding a new `public enum` to the SDK's consumer-facing surface (including `@_spi(Experimental)`) is not allowed. Adding a case to an existing `public enum` is a source-breaking change for any consumer with an exhaustive `switch`. Use a struct with static constants instead.","ruleDescription":"","location":{"file":"Sources\/LocalReceiptParsing\/BasicTypes\/InAppPurchase.swift","line":159,"character":5},"severity":"error","ruleName":"No new public enums in consumer-facing APIs","ruleIdentifier":"no_new_public_enums"}},{"text":"@objc(RCLogLevel) public enum LogLevel: Int, CustomStringConvertible, CaseIterable, Sendable {","violation":{"ruleIdentifier":"no_new_public_enums","ruleDescription":"","ruleName":"No new public enums in consumer-facing APIs","severity":"error","reason":"Adding a new `public enum` to the SDK's consumer-facing surface (including `@_spi(Experimental)`) is not allowed. Adding a case to an existing `public enum` is a source-breaking change for any consumer with an exhaustive `switch`. Use a struct with static constants instead.","location":{"file":"Sources\/LocalReceiptParsing\/Helpers\/LoggerType.swift","character":19,"line":59}}},{"text":" public enum Error: Swift.Error {","violation":{"reason":"Adding a new `public enum` to the SDK's consumer-facing surface (including `@_spi(Experimental)`) is not allowed. Adding a case to an existing `public enum` is a source-breaking change for any consumer with an exhaustive `switch`. Use a struct with static constants instead.","ruleDescription":"","severity":"error","ruleIdentifier":"no_new_public_enums","ruleName":"No new public enums in consumer-facing APIs","location":{"file":"Sources\/LocalReceiptParsing\/ReceiptParsingError.swift","character":5,"line":21}}},{"text":"public enum RCPaymentMode {}","violation":{"ruleIdentifier":"no_new_public_enums","ruleDescription":"","reason":"Adding a new `public enum` to the SDK's consumer-facing surface (including `@_spi(Experimental)`) is not allowed. Adding a case to an existing `public enum` is a source-breaking change for any consumer with an exhaustive `switch`. Use a struct with static constants instead.","severity":"error","location":{"character":1,"line":754,"file":"Sources\/Misc\/Obsoletions.swift"},"ruleName":"No new public enums in consumer-facing APIs"}},{"text":"public enum RCBackendErrorCode {}","violation":{"ruleName":"No new public enums in consumer-facing APIs","severity":"error","ruleDescription":"","ruleIdentifier":"no_new_public_enums","location":{"file":"Sources\/Misc\/Obsoletions.swift","line":778,"character":1},"reason":"Adding a new `public enum` to the SDK's consumer-facing surface (including `@_spi(Experimental)`) is not allowed. Adding a case to an existing `public enum` is a source-breaking change for any consumer with an exhaustive `switch`. Use a struct with static constants instead."}},{"text":"public enum StoreKitVersion: Int {","violation":{"ruleDescription":"","ruleName":"No new public enums in consumer-facing APIs","ruleIdentifier":"no_new_public_enums","reason":"Adding a new `public enum` to the SDK's consumer-facing surface (including `@_spi(Experimental)`) is not allowed. Adding a case to an existing `public enum` is a source-breaking change for any consumer with an exhaustive `switch`. Use a struct with static constants instead.","severity":"error","location":{"character":1,"file":"Sources\/Misc\/StoreKitVersion.swift","line":18}}},{"text":"public enum CacheFetchPolicy: Int {","violation":{"ruleIdentifier":"no_new_public_enums","ruleName":"No new public enums in consumer-facing APIs","location":{"character":1,"file":"Sources\/Networking\/Caching\/CacheFetchPolicy.swift","line":16},"reason":"Adding a new `public enum` to the SDK's consumer-facing surface (including `@_spi(Experimental)`) is not allowed. Adding a case to an existing `public enum` is a source-breaking change for any consumer with an exhaustive `switch`. Use a struct with static constants instead.","severity":"error","ruleDescription":""}},{"text":" public enum LocalizationData: Codable, Equatable, Sendable {","violation":{"ruleDescription":"","reason":"Adding a new `public enum` to the SDK's consumer-facing surface (including `@_spi(Experimental)`) is not allowed. Adding a case to an existing `public enum` is a source-breaking change for any consumer with an exhaustive `switch`. Use a struct with static constants instead.","ruleIdentifier":"no_new_public_enums","ruleName":"No new public enums in consumer-facing APIs","location":{"line":61,"file":"Sources\/Networking\/Responses\/RevenueCatUI\/PaywallComponentsData.swift","character":5},"severity":"error"}},{"text":" public enum ConditionValue: Codable, Sendable, Hashable, Equatable {","violation":{"severity":"error","location":{"file":"Sources\/Paywalls\/Components\/Common\/ComponentOverrides.swift","line":93,"character":5},"ruleIdentifier":"no_new_public_enums","ruleName":"No new public enums in consumer-facing APIs","reason":"Adding a new `public enum` to the SDK's consumer-facing surface (including `@_spi(Experimental)`) is not allowed. Adding a case to an existing `public enum` is a source-breaking change for any consumer with an exhaustive `switch`. Use a struct with static constants instead.","ruleDescription":""}},{"text":" public enum EqualityOperator: String, Codable, Sendable, Hashable, Equatable {","violation":{"ruleName":"No new public enums in consumer-facing APIs","location":{"file":"Sources\/Paywalls\/Components\/Common\/ComponentOverrides.swift","line":141,"character":5},"ruleDescription":"","severity":"error","reason":"Adding a new `public enum` to the SDK's consumer-facing surface (including `@_spi(Experimental)`) is not allowed. Adding a case to an existing `public enum` is a source-breaking change for any consumer with an exhaustive `switch`. Use a struct with static constants instead.","ruleIdentifier":"no_new_public_enums"}},{"text":" public enum ArrayOperator: String, Codable, Sendable, Hashable, Equatable {","violation":{"reason":"Adding a new `public enum` to the SDK's consumer-facing surface (including `@_spi(Experimental)`) is not allowed. Adding a case to an existing `public enum` is a source-breaking change for any consumer with an exhaustive `switch`. Use a struct with static constants instead.","ruleName":"No new public enums in consumer-facing APIs","ruleDescription":"","location":{"character":5,"file":"Sources\/Paywalls\/Components\/Common\/ComponentOverrides.swift","line":150},"severity":"error","ruleIdentifier":"no_new_public_enums"}},{"text":" public enum ComponentType: String, Codable, Sendable {","violation":{"reason":"Adding a new `public enum` to the SDK's consumer-facing surface (including `@_spi(Experimental)`) is not allowed. Adding a case to an existing `public enum` is a source-breaking change for any consumer with an exhaustive `switch`. Use a struct with static constants instead.","ruleName":"No new public enums in consumer-facing APIs","ruleDescription":"","location":{"character":5,"file":"Sources\/Paywalls\/Components\/Common\/PaywallComponentBase.swift","line":37},"severity":"error","ruleIdentifier":"no_new_public_enums"}},{"text":" public enum Action: Codable, Sendable, Hashable, Equatable {","violation":{"ruleName":"No new public enums in consumer-facing APIs","ruleIdentifier":"no_new_public_enums","severity":"error","reason":"Adding a new `public enum` to the SDK's consumer-facing surface (including `@_spi(Experimental)`) is not allowed. Adding a case to an existing `public enum` is a source-breaking change for any consumer with an exhaustive `switch`. Use a struct with static constants instead.","location":{"file":"Sources\/Paywalls\/Components\/PaywallButtonComponent.swift","line":133,"character":9},"ruleDescription":""}},{"text":" public enum Destination: Codable, Sendable, Hashable, Equatable {","violation":{"ruleDescription":"","ruleIdentifier":"no_new_public_enums","severity":"error","ruleName":"No new public enums in consumer-facing APIs","location":{"file":"Sources\/Paywalls\/Components\/PaywallButtonComponent.swift","line":186,"character":9},"reason":"Adding a new `public enum` to the SDK's consumer-facing surface (including `@_spi(Experimental)`) is not allowed. Adding a case to an existing `public enum` is a source-breaking change for any consumer with an exhaustive `switch`. Use a struct with static constants instead."}},{"text":" public enum URLMethod: String, Codable, Sendable, Hashable, Equatable {","violation":{"ruleName":"No new public enums in consumer-facing APIs","severity":"error","ruleIdentifier":"no_new_public_enums","location":{"character":9,"line":262,"file":"Sources\/Paywalls\/Components\/PaywallButtonComponent.swift"},"reason":"Adding a new `public enum` to the SDK's consumer-facing surface (including `@_spi(Experimental)`) is not allowed. Adding a case to an existing `public enum` is a source-breaking change for any consumer with an exhaustive `switch`. Use a struct with static constants instead.","ruleDescription":""}},{"text":" public enum AutoAdvanceTransitionType: String, PaywallComponentBase {","violation":{"reason":"Adding a new `public enum` to the SDK's consumer-facing surface (including `@_spi(Experimental)`) is not allowed. Adding a case to an existing `public enum` is a source-breaking change for any consumer with an exhaustive `switch`. Use a struct with static constants instead.","ruleName":"No new public enums in consumer-facing APIs","ruleIdentifier":"no_new_public_enums","severity":"error","ruleDescription":"","location":{"character":9,"file":"Sources\/Paywalls\/Components\/PaywallCarouselComponent.swift","line":35}}},{"text":" public enum Position: String, Codable, Sendable, Hashable, Equatable {","violation":{"ruleIdentifier":"no_new_public_enums","ruleName":"No new public enums in consumer-facing APIs","severity":"error","reason":"Adding a new `public enum` to the SDK's consumer-facing surface (including `@_spi(Experimental)`) is not allowed. Adding a case to an existing `public enum` is a source-breaking change for any consumer with an exhaustive `switch`. Use a struct with static constants instead.","ruleDescription":"","location":{"character":13,"line":42,"file":"Sources\/Paywalls\/Components\/PaywallCarouselComponent.swift"}}},{"text":" public enum CountdownStyle: Codable, Sendable, Hashable, Equatable {","violation":{"reason":"Adding a new `public enum` to the SDK's consumer-facing surface (including `@_spi(Experimental)`) is not allowed. Adding a case to an existing `public enum` is a source-breaking change for any consumer with an exhaustive `switch`. Use a struct with static constants instead.","ruleName":"No new public enums in consumer-facing APIs","ruleIdentifier":"no_new_public_enums","ruleDescription":"","severity":"error","location":{"character":9,"file":"Sources\/Paywalls\/Components\/PaywallCountdownComponent.swift","line":111}}},{"text":" public enum CountFrom: String, Codable, Sendable, Hashable, Equatable {","violation":{"ruleName":"No new public enums in consumer-facing APIs","ruleDescription":"","location":{"file":"Sources\/Paywalls\/Components\/PaywallCountdownComponent.swift","line":162,"character":9},"reason":"Adding a new `public enum` to the SDK's consumer-facing surface (including `@_spi(Experimental)`) is not allowed. Adding a case to an existing `public enum` is a source-breaking change for any consumer with an exhaustive `switch`. Use a struct with static constants instead.","ruleIdentifier":"no_new_public_enums","severity":"error"}},{"text":" public enum Action: String, Codable, Sendable, Hashable, Equatable {","violation":{"ruleIdentifier":"no_new_public_enums","ruleName":"No new public enums in consumer-facing APIs","severity":"error","location":{"character":9,"file":"Sources\/Paywalls\/Components\/PaywallPurchaseButtonComponent.swift","line":23},"ruleDescription":"","reason":"Adding a new `public enum` to the SDK's consumer-facing surface (including `@_spi(Experimental)`) is not allowed. Adding a case to an existing `public enum` is a source-breaking change for any consumer with an exhaustive `switch`. Use a struct with static constants instead."}},{"text":" public enum Method: Codable, Sendable, Hashable, Equatable, CustomStringConvertible {","violation":{"ruleName":"No new public enums in consumer-facing APIs","severity":"error","ruleDescription":"","location":{"character":9,"file":"Sources\/Paywalls\/Components\/PaywallPurchaseButtonComponent.swift","line":29},"ruleIdentifier":"no_new_public_enums","reason":"Adding a new `public enum` to the SDK's consumer-facing surface (including `@_spi(Experimental)`) is not allowed. Adding a case to an existing `public enum` is a source-breaking change for any consumer with an exhaustive `switch`. Use a struct with static constants instead."}},{"text":" public enum Overflow: String, PaywallComponentBase {","violation":{"reason":"Adding a new `public enum` to the SDK's consumer-facing surface (including `@_spi(Experimental)`) is not allowed. Adding a case to an existing `public enum` is a source-breaking change for any consumer with an exhaustive `switch`. Use a struct with static constants instead.","ruleIdentifier":"no_new_public_enums","ruleDescription":"","ruleName":"No new public enums in consumer-facing APIs","severity":"error","location":{"line":21,"character":9,"file":"Sources\/Paywalls\/Components\/PaywallStackComponent.swift"}}},{"text":" public enum TabControlType: String, Codable, Sendable, Hashable, Equatable {","violation":{"ruleIdentifier":"no_new_public_enums","location":{"line":136,"file":"Sources\/Paywalls\/Components\/PaywallTabsComponent.swift","character":13},"reason":"Adding a new `public enum` to the SDK's consumer-facing surface (including `@_spi(Experimental)`) is not allowed. Adding a case to an existing `public enum` is a source-breaking change for any consumer with an exhaustive `switch`. Use a struct with static constants instead.","severity":"error","ruleDescription":"","ruleName":"No new public enums in consumer-facing APIs"}},{"text":" public enum IconAlignment: String, Sendable, Codable, Equatable, Hashable {","violation":{"ruleIdentifier":"no_new_public_enums","location":{"line":151,"file":"Sources\/Paywalls\/Components\/PaywallTimelineComponent.swift","character":9},"reason":"Adding a new `public enum` to the SDK's consumer-facing surface (including `@_spi(Experimental)`) is not allowed. Adding a case to an existing `public enum` is a source-breaking change for any consumer with an exhaustive `switch`. Use a struct with static constants instead.","severity":"error","ruleDescription":"","ruleName":"No new public enums in consumer-facing APIs"}},{"text":" public enum ColorScheme: String {","violation":{"ruleIdentifier":"no_new_public_enums","ruleName":"No new public enums in consumer-facing APIs","reason":"Adding a new `public enum` to the SDK's consumer-facing surface (including `@_spi(Experimental)`) is not allowed. Adding a case to an existing `public enum` is a source-breaking change for any consumer with an exhaustive `switch`. Use a struct with static constants instead.","severity":"error","location":{"file":"Sources\/Paywalls\/PaywallColor.swift","character":5,"line":25},"ruleDescription":""}},{"text":"public enum PaywallViewMode {","violation":{"ruleDescription":"","severity":"error","location":{"line":17,"file":"Sources\/Paywalls\/PaywallViewMode.swift","character":1},"ruleName":"No new public enums in consumer-facing APIs","ruleIdentifier":"no_new_public_enums","reason":"Adding a new `public enum` to the SDK's consumer-facing surface (including `@_spi(Experimental)`) is not allowed. Adding a case to an existing `public enum` is a source-breaking change for any consumer with an exhaustive `switch`. Use a struct with static constants instead."}},{"text":" public enum EntitlementVerificationMode: Int {","violation":{"reason":"Adding a new `public enum` to the SDK's consumer-facing surface (including `@_spi(Experimental)`) is not allowed. Adding a case to an existing `public enum` is a source-breaking change for any consumer with an exhaustive `switch`. Use a struct with static constants instead.","ruleDescription":"","location":{"line":408,"character":5,"file":"Sources\/Purchasing\/Configuration.swift"},"severity":"error","ruleName":"No new public enums in consumer-facing APIs","ruleIdentifier":"no_new_public_enums"}},{"text":"@objc(RCStore) public enum Store: Int {","violation":{"ruleDescription":"","ruleName":"No new public enums in consumer-facing APIs","ruleIdentifier":"no_new_public_enums","location":{"file":"Sources\/Purchasing\/EntitlementInfo.swift","character":16,"line":22},"reason":"Adding a new `public enum` to the SDK's consumer-facing surface (including `@_spi(Experimental)`) is not allowed. Adding a case to an existing `public enum` is a source-breaking change for any consumer with an exhaustive `switch`. Use a struct with static constants instead.","severity":"error"}},{"text":"@objc(RCPeriodType) public enum PeriodType: Int {","violation":{"ruleDescription":"","location":{"line":74,"file":"Sources\/Purchasing\/EntitlementInfo.swift","character":21},"severity":"error","reason":"Adding a new `public enum` to the SDK's consumer-facing surface (including `@_spi(Experimental)`) is not allowed. Adding a case to an existing `public enum` is a source-breaking change for any consumer with an exhaustive `switch`. Use a struct with static constants instead.","ruleIdentifier":"no_new_public_enums","ruleName":"No new public enums in consumer-facing APIs"}},{"text":"@objc(RCIntroEligibilityStatus) public enum IntroEligibilityStatus: Int {","violation":{"ruleIdentifier":"no_new_public_enums","severity":"error","reason":"Adding a new `public enum` to the SDK's consumer-facing surface (including `@_spi(Experimental)`) is not allowed. Adding a case to an existing `public enum` is a source-breaking change for any consumer with an exhaustive `switch`. Use a struct with static constants instead.","location":{"character":33,"file":"Sources\/Purchasing\/IntroEligibility.swift","line":24},"ruleDescription":"","ruleName":"No new public enums in consumer-facing APIs"}},{"text":"@objc(RCPackageType) public enum PackageType: Int {","violation":{"ruleName":"No new public enums in consumer-facing APIs","location":{"character":22,"file":"Sources\/Purchasing\/PackageType.swift","line":23},"severity":"error","reason":"Adding a new `public enum` to the SDK's consumer-facing surface (including `@_spi(Experimental)`) is not allowed. Adding a case to an existing `public enum` is a source-breaking change for any consumer with an exhaustive `switch`. Use a struct with static constants instead.","ruleIdentifier":"no_new_public_enums","ruleDescription":""}},{"text":"@objc(RCPurchaseOwnershipType) public enum PurchaseOwnershipType: Int {","violation":{"ruleName":"No new public enums in consumer-facing APIs","ruleIdentifier":"no_new_public_enums","location":{"file":"Sources\/Purchasing\/PurchaseOwnershipType.swift","character":32,"line":19},"severity":"error","ruleDescription":"","reason":"Adding a new `public enum` to the SDK's consumer-facing surface (including `@_spi(Experimental)`) is not allowed. Adding a case to an existing `public enum` is a source-breaking change for any consumer with an exhaustive `switch`. Use a struct with static constants instead."}},{"text":"public enum PurchasesAreCompletedBy: Int {","violation":{"ruleDescription":"","reason":"Adding a new `public enum` to the SDK's consumer-facing surface (including `@_spi(Experimental)`) is not allowed. Adding a case to an existing `public enum` is a source-breaking change for any consumer with an exhaustive `switch`. Use a struct with static constants instead.","ruleIdentifier":"no_new_public_enums","ruleName":"No new public enums in consumer-facing APIs","severity":"error","location":{"line":18,"character":1,"file":"Sources\/Purchasing\/Purchases\/PurchasesAreCompletedBy.swift"}}},{"text":" public enum ProductCategory: Int {","violation":{"reason":"Adding a new `public enum` to the SDK's consumer-facing surface (including `@_spi(Experimental)`) is not allowed. Adding a case to an existing `public enum` is a source-breaking change for any consumer with an exhaustive `switch`. Use a struct with static constants instead.","location":{"character":5,"file":"Sources\/Purchasing\/StoreKitAbstractions\/ProductType.swift","line":23},"ruleIdentifier":"no_new_public_enums","ruleDescription":"","ruleName":"No new public enums in consumer-facing APIs","severity":"error"}},{"text":" public enum ProductType: Int {","violation":{"reason":"Adding a new `public enum` to the SDK's consumer-facing surface (including `@_spi(Experimental)`) is not allowed. Adding a case to an existing `public enum` is a source-breaking change for any consumer with an exhaustive `switch`. Use a struct with static constants instead.","ruleIdentifier":"no_new_public_enums","ruleName":"No new public enums in consumer-facing APIs","severity":"error","ruleDescription":"","location":{"line":38,"character":5,"file":"Sources\/Purchasing\/StoreKitAbstractions\/ProductType.swift"}}},{"text":" public enum PaymentMode: Int {","violation":{"reason":"Adding a new `public enum` to the SDK's consumer-facing surface (including `@_spi(Experimental)`) is not allowed. Adding a case to an existing `public enum` is a source-breaking change for any consumer with an exhaustive `switch`. Use a struct with static constants instead.","ruleIdentifier":"no_new_public_enums","ruleName":"No new public enums in consumer-facing APIs","severity":"error","ruleDescription":"","location":{"line":35,"character":5,"file":"Sources\/Purchasing\/StoreKitAbstractions\/StoreProductDiscount.swift"}}},{"violation":{"reason":"Adding a new `public enum` to the SDK's consumer-facing surface (including `@_spi(Experimental)`) is not allowed. Adding a case to an existing `public enum` is a source-breaking change for any consumer with an exhaustive `switch`. Use a struct with static constants instead.","severity":"error","ruleIdentifier":"no_new_public_enums","ruleDescription":"","ruleName":"No new public enums in consumer-facing APIs","location":{"character":5,"line":51,"file":"Sources\/Purchasing\/StoreKitAbstractions\/StoreProductDiscount.swift"}},"text":" public enum DiscountType: Int {"},{"violation":{"reason":"Adding a new `public enum` to the SDK's consumer-facing surface (including `@_spi(Experimental)`) is not allowed. Adding a case to an existing `public enum` is a source-breaking change for any consumer with an exhaustive `switch`. Use a struct with static constants instead.","ruleIdentifier":"no_new_public_enums","ruleName":"No new public enums in consumer-facing APIs","ruleDescription":"","severity":"error","location":{"character":5,"file":"Sources\/Purchasing\/StoreKitAbstractions\/SubscriptionPeriod.swift","line":43}},"text":" public enum Unit: Int {"},{"violation":{"location":{"file":"Sources\/Security\/VerificationResult.swift","line":47,"character":1},"ruleIdentifier":"no_new_public_enums","ruleName":"No new public enums in consumer-facing APIs","ruleDescription":"","reason":"Adding a new `public enum` to the SDK's consumer-facing surface (including `@_spi(Experimental)`) is not allowed. Adding a case to an existing `public enum` is a source-breaking change for any consumer with an exhaustive `switch`. Use a struct with static constants instead.","severity":"error"},"text":"public enum VerificationResult: Int {"},{"violation":{"severity":"error","ruleIdentifier":"no_new_public_enums","reason":"Adding a new `public enum` to the SDK's consumer-facing surface (including `@_spi(Experimental)`) is not allowed. Adding a case to an existing `public enum` is a source-breaking change for any consumer with an exhaustive `switch`. Use a struct with static constants instead.","ruleDescription":"","location":{"character":30,"file":"Sources\/Support\/BeginRefundRequestHelper.swift","line":159},"ruleName":"No new public enums in consumer-facing APIs"},"text":"@objc(RCRefundRequestStatus) public enum RefundRequestStatus: Int, Sendable {"},{"violation":{"reason":"Adding a new `public enum` to the SDK's consumer-facing surface (including `@_spi(Experimental)`) is not allowed. Adding a case to an existing `public enum` is a source-breaking change for any consumer with an exhaustive `switch`. Use a struct with static constants instead.","severity":"error","ruleIdentifier":"no_new_public_enums","ruleName":"No new public enums in consumer-facing APIs","ruleDescription":"","location":{"line":49,"character":5,"file":"Sources\/Support\/PurchasesDiagnostics.swift"}},"text":" public enum ProductStatus: Sendable {"},{"violation":{"reason":"Adding a new `public enum` to the SDK's consumer-facing surface (including `@_spi(Experimental)`) is not allowed. Adding a case to an existing `public enum` is a source-breaking change for any consumer with an exhaustive `switch`. Use a struct with static constants instead.","ruleIdentifier":"no_new_public_enums","severity":"error","ruleName":"No new public enums in consumer-facing APIs","location":{"character":5,"file":"Sources\/Support\/PurchasesDiagnostics.swift","line":85},"ruleDescription":""},"text":" public enum SDKHealthCheckStatus: Sendable {"},{"violation":{"ruleName":"No new public enums in consumer-facing APIs","reason":"Adding a new `public enum` to the SDK's consumer-facing surface (including `@_spi(Experimental)`) is not allowed. Adding a case to an existing `public enum` is a source-breaking change for any consumer with an exhaustive `switch`. Use a struct with static constants instead.","location":{"line":121,"character":5,"file":"Sources\/Support\/PurchasesDiagnostics.swift"},"ruleDescription":"","ruleIdentifier":"no_new_public_enums","severity":"error"},"text":" public enum SDKHealthError: Swift.Error {"},{"violation":{"ruleName":"No new public enums in consumer-facing APIs","severity":"error","ruleDescription":"","location":{"file":"Sources\/Support\/PurchasesDiagnostics.swift","line":174,"character":5},"reason":"Adding a new `public enum` to the SDK's consumer-facing surface (including `@_spi(Experimental)`) is not allowed. Adding a case to an existing `public enum` is a source-breaking change for any consumer with an exhaustive `switch`. Use a struct with static constants instead.","ruleIdentifier":"no_new_public_enums"},"text":" public enum SDKHealthStatus: Sendable {"},{"violation":{"ruleIdentifier":"no_new_public_enums","ruleDescription":"","ruleName":"No new public enums in consumer-facing APIs","reason":"Adding a new `public enum` to the SDK's consumer-facing surface (including `@_spi(Experimental)`) is not allowed. Adding a case to an existing `public enum` is a source-breaking change for any consumer with an exhaustive `switch`. Use a struct with static constants instead.","location":{"line":186,"character":5,"file":"Sources\/Support\/PurchasesDiagnostics.swift"},"severity":"error"},"text":" public enum Error: Swift.Error {"},{"violation":{"ruleName":"No new public enums in consumer-facing APIs","ruleDescription":"","reason":"Adding a new `public enum` to the SDK's consumer-facing surface (including `@_spi(Experimental)`) is not allowed. Adding a case to an existing `public enum` is a source-breaking change for any consumer with an exhaustive `switch`. Use a struct with static constants instead.","ruleIdentifier":"no_new_public_enums","severity":"error","location":{"line":20,"character":27,"file":"Sources\/Support\/StoreMessageType.swift"}},"text":"@objc(RCStoreMessageType) public enum StoreMessageType: Int, CaseIterable, Sendable {"},{"violation":{"reason":"Adding a new `public enum` to the SDK's consumer-facing surface (including `@_spi(Experimental)`) is not allowed. Adding a case to an existing `public enum` is a source-breaking change for any consumer with an exhaustive `switch`. Use a struct with static constants instead.","ruleName":"No new public enums in consumer-facing APIs","ruleDescription":"","location":{"character":1,"file":"Sources\/WebPurchaseRedemption\/WebPurchaseRedemptionResult.swift","line":19},"ruleIdentifier":"no_new_public_enums","severity":"error"},"text":"public enum WebPurchaseRedemptionResult: Sendable {"}] No newline at end of file

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

What's this file for?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants