К основному содержанию
скилл CX Codex

asc-ad-hoc-distribution — скилл для Claude Code: установка

Готовит и публикует ad hoc сборки iOS на S3 для зарегистрированных устройств в обход TestFlight. Помогает генерировать ссылки на установку прямо из архива.

Установить в Claude Code · Через Skills CLI (Vercel) Все способы и платформы ↓
npx skills add rorkai/app-store-connect-cli-skills --skill asc-ad-hoc-distribution -a claude-code
Открыть на GitHub

Что делает asc-ad-hoc-distribution

Скилл автоматизирует процесс ad hoc дистрибуции iOS-приложений через CLI-команду asc distribute. Для работы из .xcarchive он выполняет цепочку plan -> apply -> resume -> verify. На этапе plan утилита проверяет валидность сертификатов и устройств без внесения изменений. Публикация в хранилище запускается только после подтверждения 64-значного хэша плана.

Сборка не взлетит, если в проекте есть App Clips, расширения или компоненты Watch: первая версия поддерживает строго один главный таргет приложения. Для работы понадобятся права в App Store Connect, локальный сертификат PKCS#12, файл со списком UDID устройств и доступ к S3-совместимому бакету. Скилл не создаёт бакеты сам и не устанавливает приложение на телефон принудительно, а лишь отдаёт проверенную ссылку для скачивания.

Какие задачи решает

  • создать приватную ссылку на установку iOS-сборки из .xcarchive
  • зарегистрировать новые тестовые устройства в App Store Connect
  • синхронизировать ad hoc профили обеспечения и Bundle ID
  • опубликовать IPA-пакет в собственном S3-совместимом бакете

Примеры запросов агенту

  • Создай план ad hoc дистрибуции для архива .asc/artifacts/App.xcarchive по конфигу .asc/distribution/config.json
  • Примени утверждённый план дистрибуции с хэшем из plan.json и выведи статус
  • Проверь состояние текущего запуска дистрибуции через asc distribute status

Как установить asc-ad-hoc-distribution

1Через Skills CLI (Vercel)

npx skills add rorkai/app-store-connect-cli-skills --skill asc-ad-hoc-distribution -a claude-code

2Вручную: положить файлы

~/.claude/skills/asc-ad-hoc-distribution/SKILL.md

Папка скилла целиком; для одного проекта — .claude/skills/asc-ad-hoc-distribution/

По шагам, с командами для каждой платформы: Как установить скилл в Claude Code: пять способов

Вопросы о asc-ad-hoc-distribution

Как установить asc-ad-hoc-distribution в Claude Code?

Выполните команду npx skills add rorkai/app-store-connect-cli-skills --skill asc-ad-hoc-distribution -a claude-code в терминале.

Что делает скилл asc-ad-hoc-distribution?

Он автоматизирует ad hoc распространение iOS-сборок на зарегистрированные устройства без использования TestFlight, загружая артефакты в S3-совместимое хранилище.

Какие ограничения есть у первой версии плана дистрибуции?

План завершится ошибкой, если в .xcarchive есть расширения, App Clips или приложения для Apple Watch: поддерживается только один основной таргет.

Исходный текст

SKILL.md · MIT
---
name: asc-ad-hoc-distribution
description: 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.
---

# 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:

```bash
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:

```json
{"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:

```json
{
  "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:

```bash
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

```bash
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:

```bash
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`:

```bash
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`:

```bash
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.

© rorkai · MIT · rorkai/app-store-connect-cli-skills

Похожие скиллы

Всё по теме «Мобильная разработка» →
asc-metrics appeeky Разбирает фактические данные из App Store Connect через Appeeky: скачивания, подписки, выручку и конверсию пробных периодов. CX Codex +1 2 500установок limrun-xcode-bazel limrun-inc Собирает Bazel-проекты для Apple на удалённых Mac-воркерах Limrun и ставит приложение на удалённый симулятор. Нужен, если проект уже работает на lim xcode rbe. CX Codex +1 43 100установок limrun-xcode limrun-inc Собирает и тестирует iOS-проекты на удалённом Xcode через lim xcode build, run и test — с Linux, Windows или из контейнера. CX Codex +1 43 100установок xcode-build-orchestrator AvdLee Ведёт оптимизацию сборки Xcode в два этапа: сначала замеряет и предлагает план, потом правит код после вашего одобрения. CX Codex +1 3 600установок ios-simulator-skill conorluddy 30 Python-скриптов для сборки, тестирования и управления iOS-приложениями в симуляторе. Навигация по accessibility-дереву вместо скриншотов, работа с логами, симуляция GPS и внешнего вида — всё через структурированные данные. CX Codex +1 2 400установок developing-ios-apps daymade Скилл для сборки и выкладки iOS и macOS приложений: XcodeGen, SwiftUI, SPM, подпись, нотаризация и CI. Пригодится, когда Xcode падает на подписи или rpath. CX Codex +1 1 500установок

Из того же набора24

asc-crash-triage Скилл собирает через утилиту asc крэши из TestFlight, отзывы бета-тестеров и диагностику зависаний iOS-сборок, формируя понятный отчёт. CX Codex +1 6 400установок asc-aso-audit Проверяет метаданные App Store в папке ./metadata на ошибки ASO: дубли ключей, пробелы после запятых и пустые поля. CX Codex +1 6 200установок asc-revenuecat-catalog-sync Сверяет каталог подписок и встроенных покупок App Store Connect с продуктами RevenueCat. Нужен перед запуском или при устранении расхождений между каталогами. CX Codex +1 6 100установок asc-wall-submit Скилл оформляет заявку в Wall of Apps репозитория App-Store-Connect-CLI: сухой прогон, затем подтверждение и план пул-реквеста. CX Codex +1 5 800установок asc-whats-new-writer Скилл готовит локализованные заметки «Что нового» из Git-коммитов, списка изменений или свободного описания. Пригодится для подготовки текста к обновлению приложения в App Store. CX Codex +1 5 700установок asc-screenshot-resize Скилл готовит скриншоты для загрузки в App Store Connect: выбирает актуальные размеры, меняет файлы и проверяет результат перед отправкой. CX Codex +1 5 100установок asc-apple-ads Скилл учит агента работать с Apple Ads через CLI asc: кампании, таргетинг, отчёты и рекомендации. Пригодится, если реклама в App Store уже идёт. CX Codex +1 3 000установок asc-analytics-reports Скилл скачивает все сегменты аналитических отчётов App Store Connect через CLI asc и проверяет их по размеру и MD5 до анализа. CX Codex +1 863установок

Спонсоры проекта

Компании, которые помогают держать аналитику открытой