[GH-ISSUE #76] Expand TestFlight distribution: beta review, beta details, recruitment, metrics #22

Closed
opened 2026-02-26 21:32:50 +03:00 by kerem · 2 comments
Owner

Originally created by @rudrankriyam on GitHub (Jan 24, 2026).
Original GitHub issue: https://github.com/rudrankriyam/App-Store-Connect-CLI/issues/76

Summary

Expand TestFlight distribution tooling: beta app review details/submissions, build beta details, recruitment criteria, and public link metrics.

Current State (verified)

ASC supports beta groups/testers, builds add/remove groups, and public-link flags on groups. There is no support for:

  • Beta App Review Details / Submissions
  • Build Beta Details
  • Beta recruitment criteria and options
  • Public link metrics usage

API Endpoints (App Store Connect OpenAPI)

Beta App Review

  • GET /v1/betaAppReviewDetails
  • GET|PATCH /v1/betaAppReviewDetails/{id}
  • GET /v1/betaAppReviewSubmissions
  • POST /v1/betaAppReviewSubmissions
  • GET /v1/betaAppReviewSubmissions/{id}

Build Beta Details

  • GET /v1/buildBetaDetails
  • GET|PATCH /v1/buildBetaDetails/{id}

Recruitment + Public Link Metrics

  • POST /v1/betaRecruitmentCriteria
  • PATCH|DELETE /v1/betaRecruitmentCriteria/{id}
  • GET /v1/betaRecruitmentCriterionOptions
  • GET /v1/betaGroups/{id}/metrics/publicLinkUsages
  • GET /v1/betaGroups/{id}/metrics/betaTesterUsages

Proposed CLI

asc testflight review get --app APP_ID
asc testflight review update --id REVIEW_ID --contact-email email --contact-phone phone --notes "..."
asc testflight review submit --build BUILD_ID --confirm

asc testflight beta-details get --build BUILD_ID
asc testflight beta-details update --id DETAIL_ID --external-testing true --auto-notify true

asc testflight recruitment options
asc testflight recruitment set --group GROUP_ID --criteria-id CRITERIA_ID

asc testflight metrics public-link --group GROUP_ID
asc testflight metrics testers --group GROUP_ID

Implementation Plan

  1. internal/asc/testflight_review.go
  • Types for beta app review details and submissions.
  • Client methods for get/update/details and create submission.
  1. internal/asc/build_beta_details.go
  • Types for build beta details and client methods.
  1. internal/asc/beta_recruitment.go
  • Types and client methods for recruitment criteria/options and group metrics.
  1. cmd/testflight_review.go (or extend cmd/testflight.go)
  • New subcommands with explicit flags and validation.
  1. Tests
  • CLI validation + HTTP client tests for endpoints above.

Acceptance Criteria

  • Can update beta app review details and submit builds for beta review.
  • Can read/update build beta details.
  • Can query recruitment options/metrics.
  • JSON output by default; table/markdown supported.
Originally created by @rudrankriyam on GitHub (Jan 24, 2026). Original GitHub issue: https://github.com/rudrankriyam/App-Store-Connect-CLI/issues/76 ## Summary Expand TestFlight distribution tooling: beta app review details/submissions, build beta details, recruitment criteria, and public link metrics. ## Current State (verified) ASC supports beta groups/testers, builds add/remove groups, and public-link flags on groups. There is **no** support for: - Beta App Review Details / Submissions - Build Beta Details - Beta recruitment criteria and options - Public link metrics usage ## API Endpoints (App Store Connect OpenAPI) Beta App Review - `GET /v1/betaAppReviewDetails` - `GET|PATCH /v1/betaAppReviewDetails/{id}` - `GET /v1/betaAppReviewSubmissions` - `POST /v1/betaAppReviewSubmissions` - `GET /v1/betaAppReviewSubmissions/{id}` Build Beta Details - `GET /v1/buildBetaDetails` - `GET|PATCH /v1/buildBetaDetails/{id}` Recruitment + Public Link Metrics - `POST /v1/betaRecruitmentCriteria` - `PATCH|DELETE /v1/betaRecruitmentCriteria/{id}` - `GET /v1/betaRecruitmentCriterionOptions` - `GET /v1/betaGroups/{id}/metrics/publicLinkUsages` - `GET /v1/betaGroups/{id}/metrics/betaTesterUsages` ## Proposed CLI ``` asc testflight review get --app APP_ID asc testflight review update --id REVIEW_ID --contact-email email --contact-phone phone --notes "..." asc testflight review submit --build BUILD_ID --confirm asc testflight beta-details get --build BUILD_ID asc testflight beta-details update --id DETAIL_ID --external-testing true --auto-notify true asc testflight recruitment options asc testflight recruitment set --group GROUP_ID --criteria-id CRITERIA_ID asc testflight metrics public-link --group GROUP_ID asc testflight metrics testers --group GROUP_ID ``` ## Implementation Plan 1) `internal/asc/testflight_review.go` - Types for beta app review details and submissions. - Client methods for get/update/details and create submission. 2) `internal/asc/build_beta_details.go` - Types for build beta details and client methods. 3) `internal/asc/beta_recruitment.go` - Types and client methods for recruitment criteria/options and group metrics. 4) `cmd/testflight_review.go` (or extend `cmd/testflight.go`) - New subcommands with explicit flags and validation. 5) Tests - CLI validation + HTTP client tests for endpoints above. ## Acceptance Criteria - Can update beta app review details and submit builds for beta review. - Can read/update build beta details. - Can query recruitment options/metrics. - JSON output by default; table/markdown supported.
kerem closed this issue 2026-02-26 21:32:50 +03:00
Author
Owner

@rudrankriyam commented on GitHub (Jan 24, 2026):

@cursor

Implementation Guide

Codebase Context

This feature expands TestFlight tooling. The existing cmd/testflight.go, cmd/beta_groups.go, cmd/beta_testers.go provide patterns to follow.

File Structure

1. internal/asc/testflight_review.go (~150-200 lines)

// Beta App Review Details
type BetaAppReviewDetailAttributes struct {
    ContactFirstName string `json:"contactFirstName,omitempty"`
    ContactLastName  string `json:"contactLastName,omitempty"`
    ContactPhone     string `json:"contactPhone,omitempty"`
    ContactEmail     string `json:"contactEmail,omitempty"`
    DemoAccountName  string `json:"demoAccountName,omitempty"`
    DemoAccountPassword string `json:"demoAccountPassword,omitempty"`
    DemoAccountRequired bool `json:"demoAccountRequired,omitempty"`
    Notes            string `json:"notes,omitempty"`
}

// Beta App Review Submission
type BetaAppReviewSubmissionAttributes struct {
    BetaReviewState string `json:"betaReviewState,omitempty"` // WAITING_FOR_REVIEW, IN_REVIEW, REJECTED, APPROVED
    SubmittedDate   string `json:"submittedDate,omitempty"`
}

// Response types
type BetaAppReviewDetailResponse = SingleResponse[BetaAppReviewDetailAttributes]
type BetaAppReviewSubmissionsResponse = Response[BetaAppReviewSubmissionAttributes]
type BetaAppReviewSubmissionResponse = SingleResponse[BetaAppReviewSubmissionAttributes]

2. internal/asc/build_beta_details.go (~100-150 lines)

// Build Beta Details
type BuildBetaDetailAttributes struct {
    AutoNotifyEnabled  bool   `json:"autoNotifyEnabled,omitempty"`
    InternalBuildState string `json:"internalBuildState,omitempty"`
    ExternalBuildState string `json:"externalBuildState,omitempty"`
}

// Response types
type BuildBetaDetailsResponse = Response[BuildBetaDetailAttributes]
type BuildBetaDetailResponse = SingleResponse[BuildBetaDetailAttributes]

3. internal/asc/beta_recruitment.go (~150-200 lines)

// Recruitment Criteria
type BetaRecruitmentCriteriaAttributes struct {
    LastModifiedDate string `json:"lastModifiedDate,omitempty"`
}

type BetaRecruitmentCriterionOptionAttributes struct {
    Identifier string `json:"identifier"`
    Name       string `json:"name"`
    Category   string `json:"category,omitempty"`
}

// Metrics
type PublicLinkUsageMetric struct {
    InstallCount int `json:"installCount"`
    // Add other metric fields as documented
}

type BetaTesterUsageMetric struct {
    // Tester usage metrics
}

// Response types
type BetaRecruitmentCriterionOptionsResponse = Response[BetaRecruitmentCriterionOptionAttributes]

4. internal/asc/client_testflight_review.go (~150-200 lines)

// Beta App Review Details
func (c *Client) GetBetaAppReviewDetails(ctx context.Context, appID string) (*BetaAppReviewDetailResponse, error)
func (c *Client) GetBetaAppReviewDetail(ctx context.Context, detailID string) (*BetaAppReviewDetailResponse, error)
func (c *Client) UpdateBetaAppReviewDetail(ctx context.Context, detailID string, attrs BetaAppReviewDetailUpdateAttributes) (*BetaAppReviewDetailResponse, error)

// Beta App Review Submissions
func (c *Client) GetBetaAppReviewSubmissions(ctx context.Context, opts ...BetaAppReviewSubmissionsOption) (*BetaAppReviewSubmissionsResponse, error)
func (c *Client) CreateBetaAppReviewSubmission(ctx context.Context, buildID string) (*BetaAppReviewSubmissionResponse, error)
func (c *Client) GetBetaAppReviewSubmission(ctx context.Context, submissionID string) (*BetaAppReviewSubmissionResponse, error)

// Build Beta Details
func (c *Client) GetBuildBetaDetails(ctx context.Context, opts ...BuildBetaDetailsOption) (*BuildBetaDetailsResponse, error)
func (c *Client) GetBuildBetaDetail(ctx context.Context, detailID string) (*BuildBetaDetailResponse, error)
func (c *Client) UpdateBuildBetaDetail(ctx context.Context, detailID string, attrs BuildBetaDetailUpdateAttributes) (*BuildBetaDetailResponse, error)

// Recruitment & Metrics
func (c *Client) GetBetaRecruitmentCriterionOptions(ctx context.Context) (*BetaRecruitmentCriterionOptionsResponse, error)
func (c *Client) CreateBetaRecruitmentCriteria(ctx context.Context, groupID string, optionIDs []string) error
func (c *Client) DeleteBetaRecruitmentCriteria(ctx context.Context, criteriaID string) error
func (c *Client) GetBetaGroupPublicLinkUsages(ctx context.Context, groupID string) (interface{}, error)  // metrics response
func (c *Client) GetBetaGroupTesterUsages(ctx context.Context, groupID string) (interface{}, error)

5. Extend cmd/testflight.go or create cmd/testflight_review.go (~250-300 lines)

// Beta Review subcommands
func TestFlightReviewCommand() *ffcli.Command  // Nested group
func TestFlightReviewGetCommand() *ffcli.Command     // --app APP_ID
func TestFlightReviewUpdateCommand() *ffcli.Command  // --id --contact-email --contact-phone --notes
func TestFlightReviewSubmitCommand() *ffcli.Command  // --build BUILD_ID --confirm

// Beta Details subcommands
func TestFlightBetaDetailsCommand() *ffcli.Command   // Nested group
func TestFlightBetaDetailsGetCommand() *ffcli.Command    // --build BUILD_ID
func TestFlightBetaDetailsUpdateCommand() *ffcli.Command // --id --external-testing true --auto-notify true

// Recruitment subcommands
func TestFlightRecruitmentCommand() *ffcli.Command   // Nested group
func TestFlightRecruitmentOptionsCommand() *ffcli.Command  // List available options
func TestFlightRecruitmentSetCommand() *ffcli.Command      // --group --criteria-id

// Metrics subcommands
func TestFlightMetricsCommand() *ffcli.Command       // Nested group
func TestFlightMetricsPublicLinkCommand() *ffcli.Command  // --group GROUP_ID
func TestFlightMetricsTestersCommand() *ffcli.Command     // --group GROUP_ID

6. Register new subcommands in TestFlightCommand()
Update cmd/testflight.go to include the new subcommand groups.

API Endpoints Reference

Beta App Review Details:
GET    /v1/betaAppReviewDetails                          → GetBetaAppReviewDetails (filter by app)
GET    /v1/betaAppReviewDetails/{id}                     → GetBetaAppReviewDetail
PATCH  /v1/betaAppReviewDetails/{id}                     → UpdateBetaAppReviewDetail

Beta App Review Submissions:
GET    /v1/betaAppReviewSubmissions                      → GetBetaAppReviewSubmissions
POST   /v1/betaAppReviewSubmissions                      → CreateBetaAppReviewSubmission
GET    /v1/betaAppReviewSubmissions/{id}                 → GetBetaAppReviewSubmission

Build Beta Details:
GET    /v1/buildBetaDetails                              → GetBuildBetaDetails
GET    /v1/buildBetaDetails/{id}                         → GetBuildBetaDetail
PATCH  /v1/buildBetaDetails/{id}                         → UpdateBuildBetaDetail

Recruitment:
GET    /v1/betaRecruitmentCriterionOptions               → GetBetaRecruitmentCriterionOptions
POST   /v1/betaRecruitmentCriteria                       → CreateBetaRecruitmentCriteria
PATCH  /v1/betaRecruitmentCriteria/{id}                  → UpdateBetaRecruitmentCriteria
DELETE /v1/betaRecruitmentCriteria/{id}                  → DeleteBetaRecruitmentCriteria

Metrics:
GET    /v1/betaGroups/{id}/metrics/publicLinkUsages      → GetBetaGroupPublicLinkUsages
GET    /v1/betaGroups/{id}/metrics/betaTesterUsages      → GetBetaGroupTesterUsages

CLI Usage Examples

# Get beta app review details for an app
asc testflight review get --app "123456789"

# Update review details
asc testflight review update --id "DETAIL_ID" --contact-email "dev@example.com" --notes "Test notes"

# Submit build for beta review
asc testflight review submit --build "BUILD_ID" --confirm

# Get build beta details
asc testflight beta-details get --build "BUILD_ID"

# Update build beta details
asc testflight beta-details update --id "DETAIL_ID" --external-testing true --auto-notify true

# List recruitment options
asc testflight recruitment options

# Get public link metrics
asc testflight metrics public-link --group "GROUP_ID"

Testing

  • Run make test && make lint
  • Test beta review submission requires --confirm
  • Test metrics output formatting
<!-- gh-comment-id:3795329899 --> @rudrankriyam commented on GitHub (Jan 24, 2026): @cursor ## Implementation Guide ### Codebase Context This feature expands TestFlight tooling. The existing `cmd/testflight.go`, `cmd/beta_groups.go`, `cmd/beta_testers.go` provide patterns to follow. ### File Structure **1. `internal/asc/testflight_review.go`** (~150-200 lines) ```go // Beta App Review Details type BetaAppReviewDetailAttributes struct { ContactFirstName string `json:"contactFirstName,omitempty"` ContactLastName string `json:"contactLastName,omitempty"` ContactPhone string `json:"contactPhone,omitempty"` ContactEmail string `json:"contactEmail,omitempty"` DemoAccountName string `json:"demoAccountName,omitempty"` DemoAccountPassword string `json:"demoAccountPassword,omitempty"` DemoAccountRequired bool `json:"demoAccountRequired,omitempty"` Notes string `json:"notes,omitempty"` } // Beta App Review Submission type BetaAppReviewSubmissionAttributes struct { BetaReviewState string `json:"betaReviewState,omitempty"` // WAITING_FOR_REVIEW, IN_REVIEW, REJECTED, APPROVED SubmittedDate string `json:"submittedDate,omitempty"` } // Response types type BetaAppReviewDetailResponse = SingleResponse[BetaAppReviewDetailAttributes] type BetaAppReviewSubmissionsResponse = Response[BetaAppReviewSubmissionAttributes] type BetaAppReviewSubmissionResponse = SingleResponse[BetaAppReviewSubmissionAttributes] ``` **2. `internal/asc/build_beta_details.go`** (~100-150 lines) ```go // Build Beta Details type BuildBetaDetailAttributes struct { AutoNotifyEnabled bool `json:"autoNotifyEnabled,omitempty"` InternalBuildState string `json:"internalBuildState,omitempty"` ExternalBuildState string `json:"externalBuildState,omitempty"` } // Response types type BuildBetaDetailsResponse = Response[BuildBetaDetailAttributes] type BuildBetaDetailResponse = SingleResponse[BuildBetaDetailAttributes] ``` **3. `internal/asc/beta_recruitment.go`** (~150-200 lines) ```go // Recruitment Criteria type BetaRecruitmentCriteriaAttributes struct { LastModifiedDate string `json:"lastModifiedDate,omitempty"` } type BetaRecruitmentCriterionOptionAttributes struct { Identifier string `json:"identifier"` Name string `json:"name"` Category string `json:"category,omitempty"` } // Metrics type PublicLinkUsageMetric struct { InstallCount int `json:"installCount"` // Add other metric fields as documented } type BetaTesterUsageMetric struct { // Tester usage metrics } // Response types type BetaRecruitmentCriterionOptionsResponse = Response[BetaRecruitmentCriterionOptionAttributes] ``` **4. `internal/asc/client_testflight_review.go`** (~150-200 lines) ```go // Beta App Review Details func (c *Client) GetBetaAppReviewDetails(ctx context.Context, appID string) (*BetaAppReviewDetailResponse, error) func (c *Client) GetBetaAppReviewDetail(ctx context.Context, detailID string) (*BetaAppReviewDetailResponse, error) func (c *Client) UpdateBetaAppReviewDetail(ctx context.Context, detailID string, attrs BetaAppReviewDetailUpdateAttributes) (*BetaAppReviewDetailResponse, error) // Beta App Review Submissions func (c *Client) GetBetaAppReviewSubmissions(ctx context.Context, opts ...BetaAppReviewSubmissionsOption) (*BetaAppReviewSubmissionsResponse, error) func (c *Client) CreateBetaAppReviewSubmission(ctx context.Context, buildID string) (*BetaAppReviewSubmissionResponse, error) func (c *Client) GetBetaAppReviewSubmission(ctx context.Context, submissionID string) (*BetaAppReviewSubmissionResponse, error) // Build Beta Details func (c *Client) GetBuildBetaDetails(ctx context.Context, opts ...BuildBetaDetailsOption) (*BuildBetaDetailsResponse, error) func (c *Client) GetBuildBetaDetail(ctx context.Context, detailID string) (*BuildBetaDetailResponse, error) func (c *Client) UpdateBuildBetaDetail(ctx context.Context, detailID string, attrs BuildBetaDetailUpdateAttributes) (*BuildBetaDetailResponse, error) // Recruitment & Metrics func (c *Client) GetBetaRecruitmentCriterionOptions(ctx context.Context) (*BetaRecruitmentCriterionOptionsResponse, error) func (c *Client) CreateBetaRecruitmentCriteria(ctx context.Context, groupID string, optionIDs []string) error func (c *Client) DeleteBetaRecruitmentCriteria(ctx context.Context, criteriaID string) error func (c *Client) GetBetaGroupPublicLinkUsages(ctx context.Context, groupID string) (interface{}, error) // metrics response func (c *Client) GetBetaGroupTesterUsages(ctx context.Context, groupID string) (interface{}, error) ``` **5. Extend `cmd/testflight.go`** or create `cmd/testflight_review.go` (~250-300 lines) ```go // Beta Review subcommands func TestFlightReviewCommand() *ffcli.Command // Nested group func TestFlightReviewGetCommand() *ffcli.Command // --app APP_ID func TestFlightReviewUpdateCommand() *ffcli.Command // --id --contact-email --contact-phone --notes func TestFlightReviewSubmitCommand() *ffcli.Command // --build BUILD_ID --confirm // Beta Details subcommands func TestFlightBetaDetailsCommand() *ffcli.Command // Nested group func TestFlightBetaDetailsGetCommand() *ffcli.Command // --build BUILD_ID func TestFlightBetaDetailsUpdateCommand() *ffcli.Command // --id --external-testing true --auto-notify true // Recruitment subcommands func TestFlightRecruitmentCommand() *ffcli.Command // Nested group func TestFlightRecruitmentOptionsCommand() *ffcli.Command // List available options func TestFlightRecruitmentSetCommand() *ffcli.Command // --group --criteria-id // Metrics subcommands func TestFlightMetricsCommand() *ffcli.Command // Nested group func TestFlightMetricsPublicLinkCommand() *ffcli.Command // --group GROUP_ID func TestFlightMetricsTestersCommand() *ffcli.Command // --group GROUP_ID ``` **6. Register new subcommands in TestFlightCommand()** Update `cmd/testflight.go` to include the new subcommand groups. ### API Endpoints Reference ``` Beta App Review Details: GET /v1/betaAppReviewDetails → GetBetaAppReviewDetails (filter by app) GET /v1/betaAppReviewDetails/{id} → GetBetaAppReviewDetail PATCH /v1/betaAppReviewDetails/{id} → UpdateBetaAppReviewDetail Beta App Review Submissions: GET /v1/betaAppReviewSubmissions → GetBetaAppReviewSubmissions POST /v1/betaAppReviewSubmissions → CreateBetaAppReviewSubmission GET /v1/betaAppReviewSubmissions/{id} → GetBetaAppReviewSubmission Build Beta Details: GET /v1/buildBetaDetails → GetBuildBetaDetails GET /v1/buildBetaDetails/{id} → GetBuildBetaDetail PATCH /v1/buildBetaDetails/{id} → UpdateBuildBetaDetail Recruitment: GET /v1/betaRecruitmentCriterionOptions → GetBetaRecruitmentCriterionOptions POST /v1/betaRecruitmentCriteria → CreateBetaRecruitmentCriteria PATCH /v1/betaRecruitmentCriteria/{id} → UpdateBetaRecruitmentCriteria DELETE /v1/betaRecruitmentCriteria/{id} → DeleteBetaRecruitmentCriteria Metrics: GET /v1/betaGroups/{id}/metrics/publicLinkUsages → GetBetaGroupPublicLinkUsages GET /v1/betaGroups/{id}/metrics/betaTesterUsages → GetBetaGroupTesterUsages ``` ### CLI Usage Examples ```bash # Get beta app review details for an app asc testflight review get --app "123456789" # Update review details asc testflight review update --id "DETAIL_ID" --contact-email "dev@example.com" --notes "Test notes" # Submit build for beta review asc testflight review submit --build "BUILD_ID" --confirm # Get build beta details asc testflight beta-details get --build "BUILD_ID" # Update build beta details asc testflight beta-details update --id "DETAIL_ID" --external-testing true --auto-notify true # List recruitment options asc testflight recruitment options # Get public link metrics asc testflight metrics public-link --group "GROUP_ID" ``` ### Testing - Run `make test && make lint` - Test beta review submission requires --confirm - Test metrics output formatting
Author
Owner

@cursor[bot] commented on GitHub (Jan 24, 2026):

Summary:

  • Added ASC types/client methods for beta review details/submissions, build beta details, recruitment criteria/options, and metrics endpoints with query options.
  • Added TestFlight CLI subcommands (review, beta-details, recruitment, metrics) with validation + table/markdown output support.
  • Added HTTP client tests for new endpoints plus CLI validation tests.

Tests:

  • make test && make lint

Notes:

  • testflight beta-details update --external-testing maps to externalBuildState values READY_FOR_TESTING/NOT_READY_FOR_TESTING (adjust if ASC expects different enum values).

View PR
Open in Cursor Open in Web

<!-- gh-comment-id:3795329997 --> @cursor[bot] commented on GitHub (Jan 24, 2026): Summary: - Added ASC types/client methods for beta review details/submissions, build beta details, recruitment criteria/options, and metrics endpoints with query options. - Added TestFlight CLI subcommands (review, beta-details, recruitment, metrics) with validation + table/markdown output support. - Added HTTP client tests for new endpoints plus CLI validation tests. Tests: - `make test && make lint` Notes: - `testflight beta-details update --external-testing` maps to `externalBuildState` values `READY_FOR_TESTING`/`NOT_READY_FOR_TESTING` (adjust if ASC expects different enum values). <a href="https://github.com/rudrankriyam/App-Store-Connect-CLI/pull/106"><picture><source media="(prefers-color-scheme: dark)" srcset="https://cursor.com/view-pr-dark.svg"><source media="(prefers-color-scheme: light)" srcset="https://cursor.com/view-pr-light.svg"><img alt="View PR" src="https://cursor.com/view-pr-light.svg"></picture></a> <a href="https://cursor.com/background-agent?bcId=bc-a31fa4eb-6758-4217-a21c-ff33e5978aab"><picture><source media="(prefers-color-scheme: dark)" srcset="https://cursor.com/open-in-cursor-dark.svg"><source media="(prefers-color-scheme: light)" srcset="https://cursor.com/open-in-cursor-light.svg"><img alt="Open in Cursor" src="https://cursor.com/open-in-cursor.svg"></picture></a>&nbsp;<a href="https://cursor.com/agents?id=bc-a31fa4eb-6758-4217-a21c-ff33e5978aab"><picture><source media="(prefers-color-scheme: dark)" srcset="https://cursor.com/open-in-web-dark.svg"><source media="(prefers-color-scheme: light)" srcset="https://cursor.com/open-in-web-light.svg"><img alt="Open in Web" src="https://cursor.com/open-in-web.svg"></picture></a>
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
starred/App-Store-Connect-CLI#22
No description provided.