Skip to content
Development
Skill

/update-store

ストア情報の更新自動化 — スクリーンショット撮影(シミュレーター × モック画面 × Marionette MCP)とメタデータテキスト更新。ストア更新、スクショ更新、App Store / Google Play のメタデータ更新、リリースノート作成の際に使用すること。

From plugin
ccpocket
1k18 skills2 agents2 MCP
Install
$ npx -y skills add K9i-0/ccpocket --skill update-store --agent claude-code

How it fires

How this skill gets triggered: by you, by Claude, or both.

  • Fires itselfAuto-invocation. Claude auto-loads it when your prompt matches the work.Auto-invocation is when the right skill fires by itself at the right moment, driven by a FLOW.md router and a hook, instead of you invoking it by name. It is the difference between a skill being installed and a skill actually getting used.Read the full definition →
  • You can call itInvoke it directly when you want it.
  • Slash command/update-store

Context preview

The summary Claude sees to decide when to auto-load this skill.

ストア情報の更新自動化 — スクリーンショット撮影(シミュレーター × モック画面 × Marionette MCP)とメタデータテキスト更新。ストア更新、スクショ更新、App Store / Google Play のメタデータ更新、リリースノート作成の際に使用すること。

SKILL.md

update-store.SKILL.md
name: update-store
description: ストア情報の更新自動化 — スクリーンショット撮影(シミュレーター × モック画面 × Marionette MCP)とメタデータテキスト更新。ストア更新、スクショ更新、App Store / Google Play のメタデータ更新、リリースノート作成の際に使用すること。

Update Store

ストアスクリーンショットの自動撮影・合成と、メタデータテキスト(description, release_notes等)の更新を行う。

前提

  • デバッグモードのアプリにはストアスクショ用のカスタムエクステンション(`ccpocket.navigateToStoreScenario`)が登録済み
  • Marionette MCPの`call_custom_extension`が使用可能
  • ImageMagickがインストール済み(`compose.sh`で使用)
  • **sim-tap.swift**: 同梱のSwiftスクリプト(`scripts/sim-tap.swift`)。macOSアクセシビリティAPIでSimulatorのネイティブダイアログ(通知許可等)をラベル指定でタップできる

ワークフロー

Step 1: バージョン確認 & 変更分析

# 最新リリースタグ
git tag -l 'ios/v*' --sort=-v:refname | head -1

# 現在のバージョン
grep '^version:' apps/mobile/pubspec.yaml

# 前回リリースからの変更コミット
git log $(git tag -l 'ios/v*' --sort=-v:refname | head -1)..HEAD --oneline -- apps/mobile/

CHANGELOGの最新セクションも確認:

head -80 CHANGELOG.md

変更内容を分析し、UI変更があったかどうかを判断する。

Step 2: 更新対象の選択

AskUserQuestion(multiSelect)で更新対象を確認する。 変更分析結果に基づいて推奨をdescriptionに含める。

**iPhone スクリーンショット(8シナリオ):**

| Key | シナリオ名 | 内容 | テーマ | |-----|-----------|------|--------| | `01_session_list` | Session List (Recent) | ホーム画面(名前付きセッション) | ライト | | `02_approval_list` | Session List | 承認待ち一覧(3セッション) | ライト | | `03_multi_question` | Multi-Question Approval | 質問UI(3問) | ライト | | `04_markdown_input` | Markdown Input | Markdown箇条書き入力 | ライト | | `05_image_attach` | Image Attach | 画像添付UI | ライト | | `06_git_diff` | Git Diff | Diff表示画面 | ライト | | `07_new_session` | New Session | 新規セッションシート | ライト | | `08_dark_theme` | Session List | 承認待ち一覧(ダークモード訴求) | ダーク |

**iPad スクリーンショット(5シナリオ):**

| Key | シナリオ名 | 内容 | テーマ | |-----|-----------|------|--------| | `01_workspace_overview` | Workspace Overview | 左一覧 + 中央チャット + 右Git | ライト | | `02_workspace_explorer` | Workspace Explorer | 左一覧 + 中央チャット + 右Explorer | ライト | | `03_approval_context` | Approval In Context | 左一覧 + 中央承認UI | ライト | | `04_approval_queue` | Approval Queue | 複数の承認待ちセッションを同時に確認 | ライト | | `05_dark_workspace` | Dark Workspace | 3-pane ワークスペースのダークテーマ訴求 | ダーク |

**メタデータテキスト:**

| ファイル | 対象 | |---------|------| | `fastlane/metadata/en-US/release_notes.txt` | iOS リリースノート (EN) | | `fastlane/metadata/ja/release_notes.txt` | iOS リリースノート (JA) | | `fastlane/metadata/en-US/description.txt` | App Store 説明文 (EN) | | `fastlane/metadata/ja/description.txt` | App Store 説明文 (JA) | | `fastlane/metadata/en-US/promotional_text.txt` | プロモーションテキスト (EN) | | `fastlane/metadata/android/en-US/full_description.txt` | Play Store 説明文 (EN) | | `fastlane/metadata/android/ja-JP/full_description.txt` | Play Store 説明文 (JA) | | `fastlane/metadata/android/en-US/changelogs/default.txt` | Play Store リリースノート (EN) | | `fastlane/metadata/android/ja-JP/changelogs/default.txt` | Play Store リリースノート (JA) |

上記のファイルパスは `apps/mobile/` からの相対パス。

Step 3: メタデータテキスト更新(選択された場合)

CHANGELOGの内容をベースに:

  • **release_notes** — CHANGELOG最新セクションを簡潔にまとめる
  • **description** — 新機能に応じて追記・修正
  • **promotional_text** — キャッチコピーを更新

更新後、AskUserQuestionで内容確認を挟む。

Step 4: iPhone スクリーンショット撮影(選択された場合)

4-1. デバイス確認 & シミュレーター起動

xcrun simctl list devices available | grep -E "iPhone 17|iPad Pro.*13"

**ソフトウェアキーボードを無効化**(全デバイス共通、セッション冒頭で1回実行):

defaults write com.apple.iphonesimulator ConnectHardwareKeyboard -bool true

これによりソフトウェアキーボードが表示されなくなり、日本語キーボードがスクショに映り込む問題を防止する。

iPhone / iPad ともに **既存シミュレーターを再利用するのがデフォルト**。毎回 `erase` すると通知・音声認識・マイク等のネイティブダイアログが再出現し、スクショフローが不安定になる。通常はアプリの再起動と向き調整だけで十分。

iPhone 17 Proシミュレーターを起動し、ライトモードに設定:

xcrun simctl boot "iPhone 17 Pro" 2>/dev/null || true
xcrun simctl ui booted appearance light

**英語ロケール設定**(ストアスクショは en-US 基準のため):

# iPhone・iPad の両デバイスIDで実行
for ID in <iPhone_ID> <iPad_ID>; do
  xcrun simctl spawn $ID defaults write -g AppleLanguages "(en-US)"
  xcrun simctl spawn $ID defaults write -g AppleLocale "en_US"
done

# 反映には再起動が必要
for ID in <iPhone_ID> <iPad_ID>; do
  xcrun simctl shutdown $ID
done
sleep 2
for ID in <iPhone_ID> <iPad_ID>; do
  xcrun simctl boot $ID
done

これによりアプリ内の標準コンポーネント(DatePicker、システムダイアログ等)も英語化される。 アプリ内文言はカスタムエクステンション `ccpocket.setLocale` で別途 `en` に切り替える。

**ステータスバーを Apple 純正風に固定**(9:41 / WiFi / 100% 充電 / キャリア非表示):

for ID in <iPhone_ID> <iPad_ID>; do
  xcrun simctl status_bar $ID override \
    --time "9:41" \
    --dataNetwork wifi \
    --wifiMode active \
    --wifiBars 3 \
    --cellularMode notSupported \
    --batteryState charged \
    --batteryLevel 100
done

**iPad の日付について(既知の制限)**: iPad のステータスバーには時刻に加えて日付(例: `Tue Apr 21`)が表示されるが、`xcrun simctl status_bar --time` は **時刻部分のみ反映**で日付は変更不可(Xcode 26.1 時点で ISO 日付を渡してもエラーになる)。

Apple 純正アプリのスクショは `Apr 1` 等になっているが、現状はシミュレーターのシステム日付がそのまま出る。完全一致が必要な場合のみ、シミュレーター内 `Settings > General > Date & Time > Set Automatically OFF` で手動設定する。通常は許容して進める。

参考:

  • [Apple Developer Forums - Can't change time in Xcode Simulator](https://developer.apple.com/forums/thread/720610)
  • [ControlRoom Issue #205](https://github.com/twostraws/ControlRoom/issues/205)

4-2. アプリ起動 & Marionette接続

dart-mcp `launch_app` でアプリを起動:

root: /Users/k9i-mini/Workspace/ccpocket/apps/mobile
device: <iPhone 17 Pro の device ID>

起動後、dart-mcp `list_running_apps` でDTD URIを取得し、`connect_dart_tooling_daemon` で接続。

dart-mcp `get_app_logs` でVM Service URIを取得し、marionette `connect` で接続。

4-3. 各シナリオのスクショ撮影

**テーマ設定**: アプリ起動後、カスタムエクステンションでテーマを切り替える(01〜07はライトテーマ):

  • marionette `call_custom_extension`: `ccpocket.setTheme` / `{ "theme": "light" }`
  • 値: `light`, `dark`, `system`

**言語設定**: 必要に応じてカスタムエクステンションで言語を切り替える:

  • marionette `call_custom_extension`: `ccpocket.setLocale` / `{ "locale": "en" }`
  • 値: `en`, `ja`, `zh`, `""` (システムデフォルト)

選択された各シナリオに対して:

1. **遷移**: marionette `call_custom_extension`

  • extension: `ccpocket.navigateToStoreScenario`
  • params: `{ "scenario": "<シナリオ名>" }`

2. **待機**: 2-3秒(描画完了を待つ。New SessionやImage Attachなど複雑なUIは3秒推奨)

3. **撮影**:

   xcrun simctl io booted screenshot apps/mobile/fastlane/screenshots/en-US/<key>.png

4. **戻る**: marionette `

Read more
Ships withccpocket

CC Pocket is a mobile and desktop app for controlling Codex and Claude coding-agent sessions.

Get the whole plugin

Other skills on ccpocket.