본문으로 건너뛰기
cccskills
무료GitHub에 공개

asc-ad-hoc-distribution

Prepare, publish, resume, and verify private iOS release-testing installs with asc distribute. Use when distributing an IPA to registered devices outside TestFlight, reconciling ad hoc profiles, publishing through caller-owned S3-compatible storage, or diagnosing a resumable private distribution run.

한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.

연동 도구AWS
설치 방법 보기

포함된 파일(1)

  • SKILL.md7.2 KB

SKILL.md(원문)

설치하기 전에 에이전트에게 전달되는 지시 내용을 확인할 수 있습니다.

ASC ad hoc distribution

Use the experimental asc distribute workflow to turn an existing iOS archive into a private, verified install link for registered devices. Use TestFlight or the App Store release skills instead when the build should go through Apple-hosted distribution.

Confirm the installed contract before acting:

asc distribute --help
asc distribute plan --help
asc distribute apply --help
asc distribute resume --help
asc distribute status --help
asc distribute verify --help

Choose the workflow

  • Use plan -> apply -> resume/status -> verify for an end-to-end, hash-authorized run starting from an .xcarchive.
  • Use inspect -> prepare -> publish only when the caller already owns the ad hoc IPA and wants to operate the lower-level boundaries separately.

Guardrails

  • Treat the distribution spec, devices file, PKCS#12 identity, password file, run state, and exact install-link artifact as private. Keep them out of Git and require owner-only permissions.
  • Never put S3 credentials or presigned URLs in the distribution spec, command output, logs, issues, or chat. Use ASC_S3_ACCESS_KEY_ID, ASC_S3_SECRET_ACCESS_KEY, and optional ASC_S3_SESSION_TOKEN, or the standard AWS SDK credential chain.
  • plan is read-only and may exit successfully with ready: false. Inspect the typed blockers and effects before continuing.
  • apply can register missing devices, create safe App IDs and successor ad hoc profiles, write local artifacts, and publish immutable objects. Run it only after the user authorizes the exact plan hash and effect inventory.
  • The orchestrated workflow supports private access to an existing S3-compatible bucket. It does not create buckets, change policies, delete old builds, install the app, or launch it.
  • Input drift, an immutable-object conflict, expired signing material, or an expired private link requires a new plan. Do not force the old run forward.

Preconditions

  • An existing iOS .xcarchive with one main app target. Embedded apps, extensions, Watch apps, and App Clips make the v1 plan not ready.
  • A local iOS distribution PKCS#12 identity and optional protected password file.
  • A protected strict-v1 devices file. For example:
{"schemaVersion":1,"devices":[{"name":"Test iPhone","udid":"DEVICE_UDID","platform":"IOS"}]}
  • App Store Connect authentication with access to devices, Bundle IDs, certificates, and profiles.
  • An existing S3-compatible bucket and valid credentials.

1. Create the private distribution spec

Relative paths resolve from the spec directory. The spec does not interpolate environment variables or accept credentials. A representative private config is:

{
  "schemaVersion": 1,
  "devicesFile": "devices.json",
  "signing": {
    "identity": {
      "format": "pkcs12",
      "path": "../signing/distribution.p12",
      "passwordFile": "../secrets/distribution-p12-password"
    },
    "minimumValidityDays": 7,
    "maxMutations": 32
  },
  "publication": {
    "endpoint": "https://objects.example.com",
    "downloadEndpoint": "https://downloads.example.com",
    "region": "auto",
    "bucket": "ios-builds",
    "prefix": "team/app",
    "addressingStyle": "path",
    "urlTtl": "24h",
    "downloadGrace": "1h",
    "verifyTimeout": "30s"
  },
  "metadata": {
    "title": "App",
    "channel": "pull-request-42",
    "sourceRevision": "abc123",
    "sourceUrl": "https://example.com/team/app/commit/abc123"
  }
}

passwordFile, certificateSha256, downloadEndpoint, and every metadata field are optional. An omitted password file means the PKCS#12 must use an empty password. Protect the config and secret inputs before planning:

chmod 600 ".asc/distribution/config.json" ".asc/distribution/devices.json"
chmod 600 ".asc/signing/distribution.p12" ".asc/secrets/distribution-p12-password"

2. Plan without mutation

asc distribute plan \
  --archive-path ".asc/artifacts/App.xcarchive" \
  --config ".asc/distribution/config.json" \
  --plan ".asc/distribution/plan.json" \
  --state-dir ".asc/distribution/runs" \
  --output json

Inspect ready, planHash, signing validity, destination, and the complete ordered effects inventory. Resolve blockers and create a new plan when ready is false. Do not infer readiness from exit code alone.

3. Apply the exact authorized plan

After approval of the exact effects, pass the full 64-character hash:

PLAN_HASH="$(jq -er '.planHash' ".asc/distribution/plan.json")"
asc distribute apply \
  --plan ".asc/distribution/plan.json" \
  --confirm "$PLAN_HASH" \
  --output json

Missing, malformed, or unequal confirmation is rejected before side effects. Success means publication and live fetch verification completed; it does not mean a device installed or launched the app.

4. Inspect, resume, and verify

Use the returned runId:

asc distribute status --run "RUN_ID" --state-dir ".asc/distribution/runs" --output json
asc distribute resume --run "RUN_ID" --state-dir ".asc/distribution/runs" --output json
asc distribute verify --run "RUN_ID" --state-dir ".asc/distribution/runs" --timeout 30s --output json

status is local-only and succeeds for running, recoverable, and blocked runs; branch on typed fields rather than prose. resume revalidates durable evidence before retrying and never blindly repeats a remote write. verify is read-only but performs live fetches. Add --device "DEVICE_SELECTOR" only when the user asks to observe the matching installed bundle, version, and build on a connected device; this observation does not prove IPA byte identity.

The exact private install URL is a bearer credential stored only in the owner-private link artifact reported by the completed run. Share it only with the intended tester through an approved private channel.

Lower-level IPA workflow

Use this lane when signing and export are already complete. Pass the exact bundleDir returned by prepare to publish:

asc distribute inspect --ipa ".asc/artifacts/App.ipa" --output json
asc distribute prepare --ipa ".asc/artifacts/App.ipa" --channel "pull-request-42" --output json
asc distribute publish \
  --bundle-dir ".asc/distribution/com.example.app/1.2-42-IPA_SHA_PREFIX" \
  --endpoint "https://objects.example.com" \
  --region "auto" \
  --bucket "ios-builds" \
  --prefix "team/app" \
  --receipt ".asc/publishes/app-1.2-42.json" \
  --link-path ".asc/publishes/app-1.2-42-link.json" \
  --output json

inspect omits raw device UDIDs unless --include-devices is explicitly needed. prepare never overwrites a bundle and reuses only an exact equivalent. Private publish is the default and writes exact presigned links only to the mode-0600 link artifact. Public publication is a separate explicit lane using --access public --public-base-url; it assumes anonymous reads are already configured and never changes storage policy.

리뷰

아직 리뷰가 없습니다. 사용해 본 소감을 남겨 주세요.

댓글

로그인 없이 쓸 수 있습니다. 사용 후기, 질문, 작동하지 않은 환경 등을 편하게 남겨 주세요.

아직 댓글이 없습니다. 첫 댓글을 남겨 보세요.

보내면 바로 공개됩니다. 이메일 주소나 전화번호 같은 개인 정보는 쓰지 마세요. URL은 2개까지입니다.

0 / 1,000자

이 양식은 reCAPTCHA로 보호되며 Google 개인정보처리방침 및 서비스 약관이 적용됩니다.

같은 저장소의 스킬

Collect, download, and verify App Store Connect Analytics reports with asc. Use when users need to discover analytics report requests, select report instances by processing date or granularity, download every segment, or verify downloaded files against Apple's size and MD5 metadata before analysis.

한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.

rorkai/app-store-connect-cli-skills1.1천2026년 10월 20일 업데이트

Create a new App Store Connect app record via browser automation. Use when there is no public API for app creation and you need an agent to drive the New App form.

한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.

rorkai/app-store-connect-cli-skills1.1천2026년 10월 20일 업데이트

Use when managing Apple Ads with asc, including OAuth profiles, ad-account discovery, Platform API v1 campaigns and targeting, reports, assets, recommendations, guarded mutations, raw requests, and Campaign Management API v5 migration.

한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.

rorkai/app-store-connect-cli-skills1.1천2026년 10월 20일 업데이트

Run an offline ASO audit on canonical App Store metadata under `./metadata` and surface keyword gaps using Astro MCP. Use after pulling metadata with `asc metadata pull`.

한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.

rorkai/app-store-connect-cli-skills1.1천2026년 10월 20일 업데이트

Track build processing, find latest builds, and clean up old builds with asc. Use when managing build retention or waiting on processing.

한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.

rorkai/app-store-connect-cli-skills1.1천2026년 10월 20일 업데이트

Guidance for using asc cli in this repo (flags, output formats, pagination, auth, and discovery). Use when asked to run or design asc commands or interact with App Store Connect via the CLI.

한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.

rorkai/app-store-connect-cli-skills1.1천2026년 10월 20일 업데이트

rorkai의 스킬 모두 보기

이 스킬의 문제 신고