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

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

Готовит macOS-приложение к распространению вне App Store: архивирует, экспортирует с Developer ID и отправляет на нотарификацию Apple.

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

Что делает asc-notarization

Скилл ведёт через сборку архива xcodebuild, экспорт с методом developer-id, проверку подписи и упаковку .app в ZIP. Затем он отправляет файл через asc notarization, помогает проверить статус и получить журнал ошибок.

Перед началом нужны установленный Xcode с настроенными инструментами командной строки, авторизация asc и сертификат Developer ID Application в локальной связке ключей. Это повод сначала проверить идентификатор подписи: без него экспорт и нотарификация остановятся.

После успешной нотарификации можно прикрепить билет командой xcrun stapler staple, чтобы приложение работало офлайн. Для .dmg билет прикрепляют после создания образа, а для .pkg нужен отдельный сертификат Developer ID Installer.

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

  • заархивировать macOS-приложение через xcodebuild
  • экспортировать сборку с подписью Developer ID
  • проверить подпись приложения и вложенный код
  • отправить ZIP на нотарификацию Apple
  • получить журнал причин отказа

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

  • «Подготовь архив моего macOS-приложения и экспортируй его с Developer ID.»
  • «Проверь подпись /tmp/YourAppExport/YourApp.app перед отправкой.»
  • «Отправь /tmp/YourAppExport/YourApp.zip на нотарификацию и дождись результата.»

Как установить asc-notarization

1Через Skills CLI (Vercel)

npx skills add rorkai/app-store-connect-cli-skills --skill asc-notarization -a claude-code

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

~/.claude/skills/asc-notarization/SKILL.md

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

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

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

asc-shots-pipeline Автоматизирует сборку iOS-приложения, снимки в симуляторе, оформление рамками и загрузку через asc. Нужен для сценариев захвата экранов по плану. CX Codex +1 6 900установок asc-localize-metadata Скачивает описание, ключевые слова, заголовки и список новшеств из App Store Connect, переводит на нужные языки через LLM и загружает обратно. CX Codex +1 7 000установок asc-subscription-localization Массово заполняет названия и описания подписок или встроенных покупок в App Store Connect через утилиту asc. Избавляет от ручного кликанья по десяткам языков. CX Codex +1 6 800установок asc-workflow Описывает сценарии App Store Connect в .asc/workflow.json и запускает их через asc workflow run с проверкой, выходами шагов и продолжением после сбоя. CX Codex +1 6 700установок 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установок

Похожие

packaging-notarization официальный OpenAI Скилл помогает проверить архив macOS-приложения, подпись и готовность к нотариальному заверению. Пригодится перед распространением приложения или при разборе сбоев, возникающих только после сборки. CX Codex GP ChatGPT 56установок fix-codesign-error официальный OpenAI Разбирает сбой подписи или entitlements на macOS и показывает минимальный путь починки. Пригодится, когда сборка не запускается или не проходит проверку. CX Codex GP ChatGPT ★ 7 596звёзд репо macos-spm-app-packaging Dimillian Скилл помогает собрать macOS-приложение на SwiftPM без проекта Xcode: от скелета до подписи, нотаризации и appcast. CX Codex +1 1 400установок asc-metrics appeeky Разбирает фактические данные из App Store Connect через Appeeky: скачивания, подписки, выручку и конверсию пробных периодов. CX Codex +1 2 500установок developing-ios-apps daymade Скилл для сборки и выкладки iOS и macOS приложений: XcodeGen, SwiftUI, SPM, подпись, нотаризация и CI. Пригодится, когда Xcode падает на подписи или rpath. CX Codex +1 1 500установок axiom-build CharlesWiltgen Маршрутизирует сбои сборки iOS и macOS, зависания симулятора и ошибки Xcode до разбора кода приложения. CX Codex +1 1 300установок

Рядом в теме «Мобильная разработка»

Всё по теме «Мобильная разработка» →

Вопросы о asc-notarization

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

Выполните npx skills add rorkai/app-store-connect-cli-skills --skill asc-notarization -a claude-code, затем повторите npx skills add rorkai/app-store-connect-cli-skills --skill asc-notarization -a claude-code. Скилл находится в ~/.claude/skills/asc-notarization/SKILL.md.

Что делает asc-notarization?

Скилл описывает процесс архивации и экспорта macOS-приложения, проверки Developer ID-подписи, отправки файла на нотарификацию и проверки результата через asc.

Что требуется для нотарификации .pkg?

Для .pkg нужен сертификат Developer ID Installer, отдельный от Developer ID Application. Пакет подписывают через productsign, после чего отправляют командой asc notarization submit.

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

SKILL.md · MIT
---
name: asc-notarization
description: Archive, export, and notarize macOS apps using xcodebuild and asc. Use when you need to prepare a macOS app for distribution outside the App Store with Developer ID signing and Apple notarization.
---

# macOS Notarization

Use this skill when you need to notarize a macOS app for distribution outside the App Store.

## Preconditions
- Xcode installed and command line tools configured.
- Auth is configured (`asc auth login` or `ASC_*` env vars).
- A Developer ID Application certificate in the local keychain.
- The app's Xcode project builds for macOS.

## Preflight: Verify Signing Identity

Before archiving, confirm a valid Developer ID Application identity exists:

```bash
security find-identity -v -p codesigning | grep "Developer ID Application"
```

If no identity is found, create one at https://developer.apple.com/account/resources/certificates/add (the App Store Connect API does not support creating Developer ID certificates).

### Inspect Trust Settings

If `codesign` or `xcodebuild` fails with "Invalid trust settings" or "errSecInternalComponent", the certificate may have custom trust overrides that break the chain:

```bash
# Check for custom trust settings
security dump-trust-settings 2>&1 | grep -A1 "Developer ID"
```

These errors do not by themselves prove a trust override is the cause. Inspect the affected certificate before proposing a repair. Changing trust settings requires explicit authorization for that certificate; do not remove trust overrides or re-sign an arbitrary app as a diagnostic step.

## Step 1: Archive

```bash
xcodebuild archive \
  -scheme "YourMacScheme" \
  -configuration Release \
  -archivePath /tmp/YourApp.xcarchive \
  -destination "generic/platform=macOS"
```

## Step 2: Export with Developer ID

Create an ExportOptions plist for Developer ID distribution:

```xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>method</key>
    <string>developer-id</string>
    <key>signingStyle</key>
    <string>automatic</string>
    <key>teamID</key>
    <string>YOUR_TEAM_ID</string>
</dict>
</plist>
```

Export the archive:

```bash
xcodebuild -exportArchive \
  -archivePath /tmp/YourApp.xcarchive \
  -exportPath /tmp/YourAppExport \
  -exportOptionsPlist ExportOptions.plist
```

This produces a `.app` bundle signed with Developer ID Application and a secure timestamp.

### Verify the Export

Verify the exported app's existing signature and nested code, then display its signing details:

```bash
codesign --verify --deep --strict --verbose=2 "/tmp/YourAppExport/YourApp.app" && \
  codesign --display --verbose=4 "/tmp/YourAppExport/YourApp.app" 2>&1
```

Confirm:
- The verification command exits successfully; displaying signing details alone does not validate the signature
- The Authority chain is Developer ID Application → Developer ID Certification Authority → Apple Root CA, with the expected TeamIdentifier
- A Timestamp is present

Stop before packaging or uploading if verification fails or the signing identity is unexpected. Diagnose the failure and rebuild or re-export the intended app before checking again. These checks do not modify the bundle and do not establish notarization acceptance.

Do not add `--sign` or `--force` to verification. [Apple's code-signing guidance](https://developer.apple.com/library/archive/technotes/tn2206/) distinguishes recursive verification with `--deep` from signing with `--deep --force`, which forcibly re-signs nested code.

## Step 3: Create a ZIP for Notarization

```bash
ditto -c -k --keepParent "/tmp/YourAppExport/YourApp.app" "/tmp/YourAppExport/YourApp.zip"
```

## Step 4: Submit for Notarization

### Fire-and-forget
```bash
asc notarization submit --file "/tmp/YourAppExport/YourApp.zip"
```

### Wait for result
```bash
asc notarization submit --file "/tmp/YourAppExport/YourApp.zip" --wait
```

### Custom polling
```bash
asc notarization submit --file "/tmp/YourAppExport/YourApp.zip" --wait --poll-interval 30s --timeout 1h
```

## Step 5: Check Results

### Status
```bash
asc notarization status --id "SUBMISSION_ID" --output table
```

### Developer Log (for failures)
```bash
asc notarization log --id "SUBMISSION_ID"
```

Fetch the log URL to see detailed issues:
```bash
curl -sL "LOG_URL" | python3 -m json.tool
```

### List Previous Submissions
```bash
asc notarization list --output table
asc notarization list --limit 5 --output table
```

## Step 6: Staple (Optional)

After notarization succeeds, staple the ticket so the app works offline:

```bash
xcrun stapler staple "/tmp/YourAppExport/YourApp.app"
```

For DMG or PKG distribution, staple after creating the container:
```bash
# Create DMG
hdiutil create -volname "YourApp" -srcfolder "/tmp/YourAppExport/YourApp.app" -ov -format UDZO "/tmp/YourApp.dmg"
xcrun stapler staple "/tmp/YourApp.dmg"
```

## Supported File Formats

| Format | Use Case |
|--------|----------|
| `.zip`  | Simplest; zip a signed `.app` bundle |
| `.dmg`  | Disk image for drag-and-drop install |
| `.pkg`  | Installer package (requires Developer ID Installer certificate) |

## PKG Notarization

To notarize `.pkg` files, you need a **Developer ID Installer** certificate (separate from Developer ID Application). This certificate type is not available through the App Store Connect API — create it at https://developer.apple.com/account/resources/certificates/add.

Sign the package:
```bash
productsign --sign "Developer ID Installer: YOUR NAME (TEAM_ID)" unsigned.pkg signed.pkg
```

Then submit:
```bash
asc notarization submit --file signed.pkg --wait
```

## Troubleshooting

### "Invalid trust settings" during export
Custom trust overrides are one possible cause. Use the read-only inspection in Preflight, identify the affected certificate, and obtain authorization before changing its trust settings.

### "The binary is not signed with a valid Developer ID certificate"
The app was signed with a Development or App Store certificate. Re-export with `method: developer-id` in ExportOptions.plist.

### "The signature does not include a secure timestamp"
Add `--timestamp` to manual `codesign` calls, or use `xcodebuild -exportArchive` which adds timestamps automatically.

### Upload timeout for large files
Set a longer upload timeout:
```bash
ASC_UPLOAD_TIMEOUT=5m asc notarization submit --file ./LargeApp.zip --wait
```

### Notarization returns "Invalid" but signing looks correct
Fetch the developer log for specific issues:
```bash
asc notarization log --id "SUBMISSION_ID"
```

Common causes: unsigned nested binaries, missing hardened runtime, embedded libraries without timestamps.

## Notes
- The `asc notarization` commands use the Apple Notary API v2, not `xcrun notarytool`.
- Authentication uses the same API key as other `asc` commands.
- Files are uploaded directly to Apple's S3 bucket with streaming (no full-file buffering).
- Files over 5 GB use multipart upload automatically.
- Always use `--help` to verify flags: `asc notarization submit --help`.

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

Смотрите также

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

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