Asc Analytics Reports

作者 rorkai9c7e769f09a1無授權條款1K 個星標收錄於 2026年10月8日更新於 2026年10月8日儲存庫3 天前更新

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.

僅含說明Data & Analytics
AI 產生的概覽

使用 asc CLI 收集 App Store Connect 分析報告區段,並依 Apple 的大小與 MD5 中繼資料驗證每個下載檔案。

功能
引導代理使用 asc CLI 檢查已安裝指令的契約、準備私有儲存空間、尋找或建立分析報告請求,並依處理日期與粒度探索報告執行個體。它會將所選執行個體的每個區段下載為壓縮的定位字元分隔檔案,並透過比對位元組數與轉為小寫的 MD5 摘要和中介資料進行驗證。接著回報報告數、執行個體數、預期區段數、已下載區段數與已驗證區段數,以及收集是否完整。此技能明確不解讀、彙總或呈現報告內容。
適用情境
當使用者需要探索 App Store Connect 分析報告請求、依處理日期或粒度選擇報告執行個體、下載全部區段,或在進入個別分析流程前依 Apple 的大小與 MD5 中介資料驗證下載檔案時使用。
執行需求
需要 asc CLI 3.5.0 或更新版本,並具備 analytics view、requests、request 與 download 子指令;需要已驗證的 asc 設定檔(建立請求需具備 Admin 授權的設定檔)、應用程式 ID,以及對 App Store Connect 的網路存取。使用 jq、wc、openssl、awk 等本機工具。不附帶指令碼,僅為說明文件。

asc analytics reports

Collect a complete set of analytics report segments and verify the compressed files before handing them to a separate analysis workflow. Do not interpret, aggregate, or present the report contents as part of this skill.

Guardrails

  • Treat report inventories, signed URLs, downloaded segments, and identifiers as confidential business data.
  • Prefer an existing request. Creating a request changes App Store Connect state and requires an Admin-authorized profile; obtain explicit user approval before running asc analytics request.
  • Never delete or replace a request as part of collection.
  • Use asc analytics download; do not fetch or persist signed segment URLs separately.
  • Store private files outside the source repository with owner-only permissions.
  • Do not claim the collection is complete if any expected segment is missing or fails verification.

1. Verify the CLI contract

Inspect the installed command before authentication or collection:

bash
asc analytics view --help

Continue only when help lists --processing-date, --granularity, --paginate, and --include-segments. These filters require asc 3.5.0 or newer. If either filter is absent, ask the user to upgrade. Do not substitute the deprecated --date flag because it uses legacy local matching rather than Apple's server-side processing-date filter.

2. Prepare private storage

Create a private temporary directory outside the repository before capturing JSON or downloading segments:

bash
umask 077ASC_ANALYTICS_DIR="$(mktemp -d "${TMPDIR:-/tmp}/asc-analytics.XXXXXX")"mkdir -m 700 "$ASC_ANALYTICS_DIR/segments"

Redirect command output and errors into this directory. Do not paste raw inventory JSON or error output into chat, commits, issues, or pull requests.

3. Find an existing request

Resolve the app ID and selected asc profile, then list every request:

bash
asc --profile "$PROFILE" analytics requests \  --app "$APP_ID" \  --paginate \  --output json \  > "$ASC_ANALYTICS_DIR/requests.json" \  2> "$ASC_ANALYTICS_DIR/requests.stderr"

Inspect the JSON structurally and select an existing usable request. Do not rely on --state when discovery works without it. If no usable request exists, stop and ask whether the user wants to create ONGOING or ONE_TIME_SNAPSHOT access. State the target app and profile before requesting approval. After approval, prefer --reuse-existing to avoid duplicates:

bash
asc --profile "$APPROVED_PROFILE" analytics request \  --app "$APP_ID" \  --access-type "$ACCESS_TYPE" \  --reuse-existing \  --output json \  > "$ASC_ANALYTICS_DIR/request.json" \  2> "$ASC_ANALYTICS_DIR/request.stderr"

Do not run that command without explicit approval. Read the returned request ID from the private JSON response before continuing:

bash
REQUEST_ID="$(jq -er '.requestId' "$ASC_ANALYTICS_DIR/request.json")"

When a request was created or reused with the approved profile, set ANALYTICS_PROFILE="$APPROVED_PROFILE". For an existing request discovered with the read-only profile, set ANALYTICS_PROFILE="$PROFILE". Use that same profile for every subsequent analytics view and analytics download call.

4. Discover and select report instances

First retrieve report and instance metadata without segment URLs:

bash
asc --profile "$ANALYTICS_PROFILE" analytics view \  --request-id "$REQUEST_ID" \  --paginate \  --output json \  > "$ASC_ANALYTICS_DIR/discovery.json" \  2> "$ASC_ANALYTICS_DIR/discovery.stderr"

Select an available processingDate and the granularity requested by the user. Accept DAILY, WEEKLY, and MONTHLY, individually or as a comma-separated list. Split the input on commas, trim each token, and normalize it to uppercase. Validate every token against that allowlist, including empty tokens. Report the invalid input and stop before running analytics view; never silently discard unsupported values or continue with an empty filter. After validation, remove duplicates and join the remaining values with commas. Treat processingDate as the date Apple processed the report, not necessarily the period represented by its rows.

Retrieve the filtered inventory, including all segment metadata:

bash
asc --profile "$ANALYTICS_PROFILE" analytics view \  --request-id "$REQUEST_ID" \  --processing-date "$PROCESSING_DATE" \  --granularity "$GRANULARITY" \  --paginate \  --include-segments \  --output json \  > "$ASC_ANALYTICS_DIR/inventory.json" \  2> "$ASC_ANALYTICS_DIR/inventory.stderr"

Always use --paginate; asc follows Apple-provided report and instance next links. Do not reconstruct, alter, or follow pagination URLs manually.

5. Download every segment

Parse inventory.json structurally. For every selected instance, enumerate all segments and retain each segment's exact ID, sizeInBytes, and checksum for verification. Do not print downloadUrl.

Download each segment by its request, instance, and segment IDs. Use a filename derived only from the segment ID and keep the compressed bytes intact. Analytics reports are tab-delimited text, so use .txt.gz rather than implying CSV:

bash
SEGMENT_FILE="$ASC_ANALYTICS_DIR/segments/$SEGMENT_ID.txt.gz"asc --profile "$ANALYTICS_PROFILE" analytics download \  --request-id "$REQUEST_ID" \  --instance-id "$INSTANCE_ID" \  --segment-id "$SEGMENT_ID" \  --output "$SEGMENT_FILE" \  > /dev/null \  2>> "$ASC_ANALYTICS_DIR/download.stderr"

Do not use --decompress before verification. If an instance has multiple segments, download every one; never treat the first segment as the whole report.

6. Verify the downloaded files

For each file, compare the compressed byte count with sizeInBytes and the lowercase MD5 digest with checksum. Use local system tools such as:

bash
actual_size="$(wc -c < "$SEGMENT_FILE" | tr -d ' ')"actual_md5="$(openssl dgst -md5 -r "$SEGMENT_FILE" | awk '{print tolower($1)}')"expected_md5="$(printf '%s' "$CHECKSUM" | tr '[:upper:]' '[:lower:]')"

Require actual_size to equal sizeInBytes and actual_md5 to equal expected_md5. On a mismatch, mark that segment failed, keep the raw error private, and do not claim a complete collection. asc analytics download refuses to overwrite an existing output, so retry the failed segment once to a new path such as $ASC_ANALYTICS_DIR/segments/$SEGMENT_ID.retry-1.txt.gz. Verify the retry independently and use it only if both checks pass. Keep the original failed file unless the user approves its deletion. Do not parse or analyze a file until verification succeeds.

7. Report the result

Return a concise summary containing:

  • the selected processing date and granularity values;
  • counts of reports, instances, expected segments, downloaded segments, and verified segments;
  • whether the collection is complete;
  • failed or missing segment IDs, if any, without signed URLs or report rows;
  • the private output directory when appropriate for the current user session.

Do not include analytics values, signed URLs, profile names, credentials, or raw rows in a public artifact. Keep the verified files for the user's next workflow. Ask before deleting the temporary directory or any downloaded evidence.

來源與署名

來源:rorkai/app-store-connect-cli-skills位於skills/asc-analytics-reports提交9c7e769

授權條款: 無授權條款

內容歸原作者所有。SourceWeft 從公開儲存庫中收錄這些內容。

檢舉或申請下架