実証アプリ: 君斗りんくのWEBサイト健康診断(2026-06)
キット: web-ios-android テンプレ / リポ: web-health-check-app
関連: 💬 LINE botの無応答ゼロ化の仕組み(同じ「1回で通す・止めない」思想をLINE bot側に適用した知見)
app.config.json(Bundle ID / パッケージ名 / ascAppId / 連絡先)appDataUsages は 404)ascAppId を config にios-appstore-release.yml → ビルド → IPA → スクショ30枚 → appstore-submit.mjsWAITING_FOR_REVIEWasc-set-availability.yml または npm run asc:set-availability:*workflow_dispatch で brand=reverse-hack + IOS_APPSTORE_PROFILE_RH_BASE64会社ロゴ文字は小サイズで潰れる → 紺地 + 白抜きルーペ+チェック(generate-app-icon.mjs)
§4.8: 第三者/ソーシャルログイン(Google・X(Twitter)・Facebook 等)で主アカウントを作る/認証するアプリは、
同等の選択肢として Sign in with Apple(SIWA) を併設しなければならない。server.url 連動型でも
ログイン画面は本番Webそのものなので、アプリ内に出るログインボタンが §4.8 の対象になる。
partnership_program_website(applyIOSGoogleHide() + CSS + MutationObserver の3層)。app.config.json に
appleSiwaServiceId を予約 → Clerk→Apple Developer 設定後 siwaEnabled:true。
Google OAuth は埋め込み WebView を UA で検出して拒否(403 disallowed_useragent)。
X(Twitter) OAuth も同方針。Bパターンは SIWA 併設に加え、必要なら
@capacitor/browser で OAuth を SFSafariViewController に逃がす。
x.com / *.twitter.com / *.clerk.com / *.clerk.accounts.dev)が
遮断されアプリ内ログインが必ず失敗する。capacitor.config の server.allowNavigation に必ず足す。出典: _docs/apple-reject-knowledge-base.md §4.8(リバースハック実通過の返信文つき)/
kimito.link(X専用=Bパターンの実適用)。
playAppId + assetlinks 用 SHA-256 を AI に渡すbundleRelease → play-publish.mjsgenerate-play-assets.mjs / listing: play-set-listing.mjsplay-setup-production.mjs / play-submit-review.mjsplayVersionCode を必ず increment(例: 6→7)app.config.reverse-hack.json + パッケージ別 assetlinks fingerprintbuild-zip.ps1 + publish-cws.ps1 の2コマンド。
審査に送るところまでコマンドで完了します(ダッシュボードを開く必要なし)chrome.enabled: false パターン)📷 手順 → Chrome 追体験
Chrome 拡張の申請をAIに頼んだら、「ダッシュボードへのログインと提出ボタンは代行できません」 と断られました。過去に何度もやってもらっていたのに、です。3回言われて、ようやく原因が分かりました。
AIは2つの別々の事実を混同していました。
「画面を操作できない」と「提出できない」は別の話でした。
実際にはコマンド1本(npm run publish:cws)で審査キューに入ります。
| ファイル送信 | 掲載文の入力 | 審査に送る | |
|---|---|---|---|
| Chrome | 自動 | 手動 | 自動 |
| Google Play | 自動 | 自動 | 手動 |
Play は掲載文まで自動で入れられるのに、最後の「審査に送信」だけは人間がボタンを押します。 Chrome はその逆で、審査送信は自動なのに掲載文の貼り替えだけ手動です。 「片方でこうだったから、もう片方も同じはず」が通じません。
ls scripts/ | grep -i publish の1行で済む)_docs/chrome-web-store-submission-playbook.md はその結果ですSCREENSHOT_UPLOADS_IN_PROGRESSretry-ios-submit.mjs)gh run watchAIに調査させると、コードを読んで「たぶんここが原因」と推論します。 それらしい答えが返るので、つい信じて修正に進みます。 でも読んだファイルが、実際には使われていないことがあります。
3回とも、コードは十分に読み込んだ上で外しています。 解決したのは、実際に送信されている中身を1回だけ丸ごと覗いたときでした。 想像していた構造と全く違い、指示が16,956文字あって肝心の入力データは末尾にありました。
grep で確認する
「性能の高いものに変えれば直る」は、原因を特定する前にやると費用だけ増えます。
詳細は _docs/runtime-truth-verification-knowledge-base.md に残しました。
| 用途 | Secret 名 |
|---|---|
| iOS 署名 | IOS_DIST_CERT_* / IOS_APPSTORE_PROFILE_BASE64 / IOS_APPSTORE_PROFILE_RH_BASE64 / APPLE_TEAM_ID |
| ASC API | APPSTORE_CONNECT_KEY_ID / ISSUER_ID / API_KEY_P8_BASE64 |
| Android | ANDROID_KEYSTORE_* / GOOGLE_PLAY_SA_JSON_BASE64 |
| Chrome | .env.cws(リポジトリ外・gitignore) |
りんく(案内役): AIにぜんぶを1人でやらせると、「できたつもり」で間違えることがあるんだ。
だから、係を3人に分けたよ。
reality-checker)store-guard)harvester)
こん太: 「失敗してもだいじょうぶ! きろく係がノートに書けば、二度目はないんだ!」/
「けんさ係は作った本人と別の人だから、遠慮なくダメ出ししてくれるよ!」
たぬ姉: 係は増やしすぎちゃダメ。3人で足りるのに10人にすると、
だれが何の係かわからなくなるからね。
世界では「AIの係の人を230人つくった」道具(agency-agents)が話題だけど、
うちはこの家の暮らしに本当にいる3人だけを選んで置いた ——
考え方は借りて、数は借りない、という話。
置き場: ~/.claude/agents/(正本は ai-hub/agents/・設計は
ai-hub-DESIGN.md 追補H)。Claude Code が名前で呼ぶと係が出てくる。
りんく(案内役): 「君斗りんくのAI返信秘書」をお店に出したとき、Play Console の
入力欄(11項目・配信国の選択・広告IDの確認・審査に出すボタンの手前まで)は、ぜんぶ
ブラウザを動かせるAIが自分で画面をクリックして埋めたよ。人がキーボードで打ったのは、
ほとんど無いんだ。
こん太: 「めんどうな入力ぜんぶAIまかせにできるの、すごくラクだね! ぼくらは最後の
『よし出そう!』ってボタンを押すだけでいいんだ!」
たぬ姉: ただし最後の一押しは、いまも人がやる約束。取り消せないボタンを
AIまかせにしないの。これは「AIがサボってる」んじゃなくて、わざと人に残してるんだよ。
不具合を直すとき、いちばん時間を食うのは修正そのものではありません。 AIが「実機でどうなっているか分からない」ので、毎回あなたに見てもらう往復です。 「開いて、そこを押して、どう見えるか教えてください」——これが1日に何度も起きます。
直し方は、アプリ自身に自分の状態を数字で申告させることでした。 画面を見なくても、コマンド1回で今の状態が1枚のテキストで出てきます。
これで、調査の往復から人が外れました。 「目視をお願いして説明を待つ」が「コマンド1回・数秒」になっています。
考え方の全体はキットの説明書(AIが読む用)に入っています。 新しいアプリを作るときは、作り始める前に読ませてください。 後から計器を足すのは、作りながら足すより何倍も高くつきます。