validation

package
v1.260504.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: May 4, 2026 License: MIT Imports: 10 Imported by: 0

Documentation

Index

Constants

View Source
const (
	LimitDescription     = 4000
	LimitKeywords        = 100
	LimitWhatsNew        = 4000
	LimitPromotionalText = 170
	LimitName            = 30
	LimitSubtitle        = 30
)

App Store metadata character limits.

View Source
const AppleStandardEULAURL = "https://www.apple.com/legal/internet-services/itunes/dev/stdeula/"

Variables

This section is empty.

Functions

func HasTermsOfUseLink(description string) bool

HasTermsOfUseLink reports whether a description includes a functional Terms of Use / EULA link.

func KeywordFieldLength added in v1.260407.0

func KeywordFieldLength(value string) int

KeywordFieldLength returns the App Store Connect keyword field length in characters.

func NormalizeKeywordAuditTerms added in v1.260407.0

func NormalizeKeywordAuditTerms(terms []string) []string

NormalizeKeywordAuditTerms trims, de-duplicates, and sorts user-supplied terms.

func SortedUniqueNonEmptyStrings added in v1.260325.0

func SortedUniqueNonEmptyStrings(values []string) []string

SortedUniqueNonEmptyStrings trims, deduplicates, and sorts a string slice.

func ValidateKeywordField added in v1.260407.0

func ValidateKeywordField(value string) error

ValidateKeywordField returns an error when the keyword field exceeds ASC's character limit.

Types

type AgeRatingDeclaration

type AgeRatingDeclaration struct {
	Advertising            *bool
	Gambling               *bool
	HealthOrWellnessTopics *bool
	LootBox                *bool
	MessagingAndChat       *bool
	ParentalControls       *bool
	AgeAssurance           *bool
	UnrestrictedWebAccess  *bool
	UserGeneratedContent   *bool

	AlcoholTobaccoOrDrugUseOrReferences         *string
	Contests                                    *string
	GamblingSimulated                           *string
	GunsOrOtherWeapons                          *string
	MedicalOrTreatmentInformation               *string
	ProfanityOrCrudeHumor                       *string
	SexualContentGraphicAndNudity               *string
	SexualContentOrNudity                       *string
	HorrorOrFearThemes                          *string
	MatureOrSuggestiveThemes                    *string
	ViolenceCartoonOrFantasy                    *string
	ViolenceRealistic                           *string
	ViolenceRealisticProlongedGraphicOrSadistic *string

	KidsAgeBand               *string
	AgeRatingOverride         *string
	AgeRatingOverrideV2       *string
	KoreaAgeRatingOverride    *string
	DeveloperAgeRatingInfoURL *string
}

AgeRatingDeclaration represents age rating attributes for validation.

type AppInfoLocalization

type AppInfoLocalization struct {
	ID                string
	Locale            string
	Name              string
	Subtitle          string
	PrivacyPolicyURL  string
	PrivacyChoicesURL string
}

AppInfoLocalization represents app info metadata.

type BetaBuildLocalization

type BetaBuildLocalization struct {
	ID       string
	Locale   string
	WhatsNew string
}

BetaBuildLocalization represents a build localization (TestFlight "What to Test").

type BetaReviewDetails

type BetaReviewDetails struct {
	ID                  string
	ContactFirstName    string
	ContactLastName     string
	ContactEmail        string
	ContactPhone        string
	DemoAccountName     string
	DemoAccountPassword string
	DemoAccountRequired bool
	Notes               string
}

BetaReviewDetails represents TestFlight beta app review details.

type Build

type Build struct {
	ID                            string
	Version                       string
	ProcessingState               string
	Expired                       bool
	UsesNonExemptEncryption       *bool
	AppEncryptionDeclarationID    string
	AppEncryptionDeclarationState string
}

Build represents an attached build for a version.

type CheckResult

type CheckResult struct {
	ID           string   `json:"id"`
	Severity     Severity `json:"severity"`
	Message      string   `json:"message"`
	Remediation  string   `json:"remediation,omitempty"`
	Locale       string   `json:"locale,omitempty"`
	Field        string   `json:"field,omitempty"`
	ResourceType string   `json:"resourceType,omitempty"`
	ResourceID   string   `json:"resourceId,omitempty"`
}

CheckResult represents a single validation check result.

func PrivacyPublishStateAdvisory

func PrivacyPublishStateAdvisory(appID string) CheckResult

PrivacyPublishStateAdvisory returns a public-only advisory for App Privacy.

type DiagnosticStatus added in v1.260325.0

type DiagnosticStatus string

DiagnosticStatus captures the state of a subscription diagnostics row.

const (
	DiagnosticStatusYes        DiagnosticStatus = "yes"
	DiagnosticStatusNo         DiagnosticStatus = "no"
	DiagnosticStatusUnverified DiagnosticStatus = "unverified"
	DiagnosticStatusUnknown    DiagnosticStatus = "unknown"
	DiagnosticStatusOptional   DiagnosticStatus = "optional"
)

type IAP

type IAP struct {
	ID        string
	Name      string
	ProductID string
	Type      string
	State     string
}

IAP represents an in-app purchase for review-readiness validation.

type IAPInput

type IAPInput struct {
	AppID string
	IAPs  []IAP
}

IAPInput collects in-app purchase validation inputs.

type IAPReport

type IAPReport struct {
	AppID    string        `json:"appId"`
	IAPCount int           `json:"iapCount,omitempty"`
	Summary  Summary       `json:"summary"`
	Checks   []CheckResult `json:"checks"`
	Strict   bool          `json:"strict,omitempty"`
}

IAPReport is the top-level validate iap output.

func ValidateIAP

func ValidateIAP(input IAPInput, strict bool) IAPReport

ValidateIAP validates IAP review readiness and returns a report.

type Input

type Input struct {
	AppID                       string
	AppInfoID                   string
	VersionID                   string
	VersionString               string
	VersionState                string
	Platform                    string
	PrimaryLocale               string
	VersionLocalizations        []VersionLocalization
	AppInfoLocalizations        []AppInfoLocalization
	ReviewDetails               *ReviewDetails
	PrimaryCategoryID           string
	ContentRightsDeclaration    *string
	Build                       *Build
	PriceScheduleID             string
	PricingFetchSkipReason      string
	AvailabilityID              string
	AvailableTerritories        int
	AppAvailableTerritories     []string
	AvailabilityFetchSkipReason string
	PricingCoverageSkipReason   string
	ScreenshotSets              []ScreenshotSet
	Subscriptions               []Subscription
	SubscriptionFetchSkipReason string
	IAPs                        []IAP
	IAPFetchSkipReason          string
	AgeRatingDeclaration        *AgeRatingDeclaration
	ReleaseType                 string
	EarliestReleaseDate         string
	Copyright                   string
}

Input collects the validation inputs.

type KeywordAuditCheck added in v1.260407.0

type KeywordAuditCheck struct {
	ID                  string   `json:"id"`
	Severity            Severity `json:"severity"`
	Message             string   `json:"message"`
	Remediation         string   `json:"remediation,omitempty"`
	Locale              string   `json:"locale,omitempty"`
	Field               string   `json:"field,omitempty"`
	Keyword             string   `json:"keyword,omitempty"`
	MatchedTerm         string   `json:"matchedTerm,omitempty"`
	RelatedLocales      []string `json:"relatedLocales,omitempty"`
	UsedCharacters      int      `json:"usedBytes,omitempty"`
	RemainingCharacters int      `json:"remainingBytes,omitempty"`
}

KeywordAuditCheck represents one keyword-audit finding.

type KeywordAuditInput added in v1.260407.0

type KeywordAuditInput struct {
	AppID                string
	VersionID            string
	VersionString        string
	Platform             string
	BlockedTerms         []string
	VersionLocalizations []VersionLocalization
	AppInfoLocalizations []AppInfoLocalization
}

KeywordAuditInput describes the inputs for a keyword audit report.

type KeywordAuditLocale added in v1.260407.0

type KeywordAuditLocale struct {
	Locale                string `json:"locale"`
	VersionLocalizationID string `json:"versionLocalizationId,omitempty"`
	AppInfoLocalizationID string `json:"appInfoLocalizationId,omitempty"`
	KeywordField          string `json:"keywordField,omitempty"`
	KeywordCount          int    `json:"keywordCount"`
	// Legacy JSON field names are retained for compatibility with existing audit consumers.
	UsedCharacters      int    `json:"usedBytes"`
	RemainingCharacters int    `json:"remainingBytes"`
	Name                string `json:"name,omitempty"`
	Subtitle            string `json:"subtitle,omitempty"`
	Errors              int    `json:"errors"`
	Warnings            int    `json:"warnings"`
	Infos               int    `json:"infos"`
}

KeywordAuditLocale summarizes one audited locale.

type KeywordAuditReport added in v1.260407.0

type KeywordAuditReport struct {
	AppID         string               `json:"appId"`
	VersionID     string               `json:"versionId"`
	VersionString string               `json:"versionString,omitempty"`
	Platform      string               `json:"platform,omitempty"`
	BlockedTerms  []string             `json:"blockedTerms,omitempty"`
	Summary       Summary              `json:"summary"`
	Locales       []KeywordAuditLocale `json:"locales"`
	Checks        []KeywordAuditCheck  `json:"checks"`
	Strict        bool                 `json:"strict,omitempty"`
}

KeywordAuditReport is the top-level keyword-audit output.

func AuditKeywords added in v1.260407.0

func AuditKeywords(input KeywordAuditInput, strict bool) KeywordAuditReport

AuditKeywords builds a keyword-quality report across version localizations.

type MetadataLengthIssue

type MetadataLengthIssue struct {
	Field  string
	Length int
	Limit  int
	Unit   string
}

MetadataLengthIssue describes one over-limit metadata field.

func AppInfoLocalizationLengthIssues

func AppInfoLocalizationLengthIssues(loc AppInfoLocalization) []MetadataLengthIssue

AppInfoLocalizationLengthIssues returns over-limit fields for one app-info localization.

func KeywordFieldLengthIssue added in v1.260407.0

func KeywordFieldLengthIssue(value string) *MetadataLengthIssue

KeywordFieldLengthIssue returns an over-limit issue for keywords when present.

func VersionLocalizationLengthIssues

func VersionLocalizationLengthIssues(loc VersionLocalization) []MetadataLengthIssue

VersionLocalizationLengthIssues returns over-limit fields for one version localization.

type Remediation added in v1.260407.0

type Remediation struct {
	TotalActionable int               `json:"totalActionable"`
	Steps           []RemediationStep `json:"steps"`
}

Remediation summarizes actionable validation steps in priority order.

func BuildRemediation added in v1.260407.0

func BuildRemediation(checks []CheckResult, strict bool) Remediation

BuildRemediation derives an ordered remediation plan from validation checks.

type RemediationStep added in v1.260407.0

type RemediationStep struct {
	Order        int      `json:"order"`
	Blocking     bool     `json:"blocking"`
	Severity     Severity `json:"severity"`
	CheckID      string   `json:"checkId"`
	Message      string   `json:"message"`
	Remediation  string   `json:"remediation"`
	Locale       string   `json:"locale,omitempty"`
	Field        string   `json:"field,omitempty"`
	ResourceType string   `json:"resourceType,omitempty"`
	ResourceID   string   `json:"resourceId,omitempty"`
}

RemediationStep represents one actionable item derived from a validation check.

func RemediationSteps added in v1.260407.0

func RemediationSteps(checks []CheckResult, strict bool) []RemediationStep

RemediationSteps orders actionable remediation steps from most urgent to least urgent.

type Report

type Report struct {
	AppID         string        `json:"appId"`
	VersionID     string        `json:"versionId"`
	VersionString string        `json:"versionString,omitempty"`
	Platform      string        `json:"platform,omitempty"`
	Summary       Summary       `json:"summary"`
	Remediation   Remediation   `json:"remediation"`
	Checks        []CheckResult `json:"checks"`
	Strict        bool          `json:"strict,omitempty"`
}

Report is the top-level validation output.

func Validate

func Validate(input Input, strict bool) Report

Validate runs all validation rules and returns a report.

type ReviewDetails

type ReviewDetails struct {
	ID                  string
	ContactFirstName    string
	ContactLastName     string
	ContactEmail        string
	ContactPhone        string
	DemoAccountName     string
	DemoAccountPassword string
	DemoAccountRequired bool
	Notes               string
}

ReviewDetails represents App Store review details for a version.

type Screenshot

type Screenshot struct {
	ID       string
	FileName string
	Width    int
	Height   int
}

Screenshot represents a screenshot asset.

type ScreenshotSet

type ScreenshotSet struct {
	ID             string
	DisplayType    string
	Locale         string
	LocalizationID string
	Screenshots    []Screenshot
}

ScreenshotSet represents a screenshot set and its assets.

type Severity

type Severity string

Severity represents the validation severity level.

const (
	SeverityError   Severity = "error"
	SeverityWarning Severity = "warning"
	SeverityInfo    Severity = "info"
)

type Subscription

type Subscription struct {
	ID                           string
	Name                         string
	ProductID                    string
	State                        string
	GroupID                      string
	GroupName                    string
	HasImage                     bool
	ImageCheckSkipped            bool
	ImageCheckSkipReason         string
	ReviewScreenshotID           string
	ReviewScreenshotCheckSkipped bool
	ReviewScreenshotCheckReason  string
	AvailabilityID               string
	AvailabilityTerritories      []string
	AvailabilityCheckSkipped     bool
	AvailabilityCheckSkipReason  string

	// Deep diagnostics (populated when State is MISSING_METADATA).
	Localizations                 []SubscriptionLocalizationInfo
	LocalizationCheckSkipped      bool
	LocalizationCheckSkipReason   string
	GroupLocalizations            []SubscriptionGroupLocalizationInfo
	GroupLocalizationCheckSkipped bool
	GroupLocalizationCheckReason  string
	PriceCount                    int
	PriceTerritories              []string
	PriceCheckSkipped             bool
	PriceCheckSkipReason          string
	IntroductoryOfferCount        int
	IntroductoryOfferCheckSkipped bool
	IntroductoryOfferCheckReason  string
	PromotionalOfferCount         int
	PromotionalOfferCheckSkipped  bool
	PromotionalOfferCheckReason   string
	WinBackOfferCount             int
	WinBackOfferCheckSkipped      bool
	WinBackOfferCheckReason       string
}

Subscription represents an auto-renewable subscription for review-readiness validation.

type SubscriptionDiagnosticRow added in v1.260325.0

type SubscriptionDiagnosticRow struct {
	Key         string           `json:"key"`
	Label       string           `json:"label"`
	Status      DiagnosticStatus `json:"status"`
	Source      string           `json:"source"`
	Blocking    bool             `json:"blocking"`
	Evidence    string           `json:"evidence,omitempty"`
	Remediation string           `json:"remediation,omitempty"`
}

SubscriptionDiagnosticRow captures a single diagnostics row for a subscription.

type SubscriptionDiagnostics added in v1.260325.0

type SubscriptionDiagnostics struct {
	SubscriptionID string                      `json:"subscriptionId"`
	Name           string                      `json:"name,omitempty"`
	ProductID      string                      `json:"productId,omitempty"`
	State          string                      `json:"state,omitempty"`
	Conclusion     string                      `json:"conclusion"`
	Summary        string                      `json:"summary,omitempty"`
	Rows           []SubscriptionDiagnosticRow `json:"rows"`
}

SubscriptionDiagnostics is the detailed diagnostics output for a subscription.

type SubscriptionGroupLocalizationInfo

type SubscriptionGroupLocalizationInfo struct {
	Locale string
	Name   string
}

SubscriptionGroupLocalizationInfo holds per-locale metadata for a subscription group.

type SubscriptionLocalizationInfo

type SubscriptionLocalizationInfo struct {
	Locale      string
	Name        string
	Description string
}

SubscriptionLocalizationInfo holds per-locale metadata for a subscription.

type SubscriptionsInput

type SubscriptionsInput struct {
	AppID                     string
	Subscriptions             []Subscription
	AvailableTerritories      int
	AppAvailableTerritories   []string
	PricingCoverageSkipReason string
	AppBuildCount             int
	BuildCheckSkipped         bool
	BuildCheckSkipReason      string
}

SubscriptionsInput collects subscription validation inputs.

type SubscriptionsReport

type SubscriptionsReport struct {
	AppID             string                    `json:"appId"`
	SubscriptionCount int                       `json:"subscriptionCount,omitempty"`
	Summary           Summary                   `json:"summary"`
	Checks            []CheckResult             `json:"checks"`
	Diagnostics       []SubscriptionDiagnostics `json:"diagnostics,omitempty"`
	Strict            bool                      `json:"strict,omitempty"`
}

SubscriptionsReport is the top-level validate subscriptions output.

func ValidateSubscriptions

func ValidateSubscriptions(input SubscriptionsInput, strict bool) SubscriptionsReport

ValidateSubscriptions validates subscription review readiness and returns a report.

type Summary

type Summary struct {
	Errors   int `json:"errors"`
	Warnings int `json:"warnings"`
	Infos    int `json:"infos"`
	Blocking int `json:"blocking"`
}

Summary aggregates check counts by severity.

type TestFlightInput

type TestFlightInput struct {
	AppID            string
	AppPrimaryLocale string

	BuildID    string
	Build      *Build
	BuildAppID string

	BetaReviewDetails      *BetaReviewDetails
	BetaBuildLocalizations []BetaBuildLocalization
}

TestFlightInput collects the TestFlight validation inputs.

type TestFlightReport

type TestFlightReport struct {
	AppID        string        `json:"appId"`
	BuildID      string        `json:"buildId"`
	BuildVersion string        `json:"buildVersion,omitempty"`
	Summary      Summary       `json:"summary"`
	Checks       []CheckResult `json:"checks"`
	Strict       bool          `json:"strict,omitempty"`
}

TestFlightReport is the top-level validate testflight output.

func ValidateTestFlight

func ValidateTestFlight(input TestFlightInput, strict bool) TestFlightReport

ValidateTestFlight runs TestFlight validation rules and returns a report.

type VersionLocalization

type VersionLocalization struct {
	ID              string
	Locale          string
	Description     string
	Keywords        string
	WhatsNew        string
	PromotionalText string
	SupportURL      string
	MarketingURL    string
}

VersionLocalization represents version-level metadata.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL