Community程式設計與開發github.com

new-app-info

建構 Apple 在 App Review 回覆「我們需要更多資訊以更好理解此 App」時要求的資訊包。涵蓋所有六項必要項目。

new-app-info 是什麼?

此技能(skill)會自動建立 Apple App Store 審查所需的「附加資訊包」。當開發者收到 Apple 審查團隊要求提供更多資訊時,只需貼上 Apple 的訊息,或輸入「/new-app-info」、「我們被拒絕了,他們需要更多資訊」等觸發詞,此技能就會掃描專案程式碼,逐一回答 Apple 要求的六項內容:實體裝置螢幕錄影(提供拍攝清單)、App 目的與目標受眾、設定與主要功能(含登入憑證或範例檔案)、使用的外部服務、地區差異,以及受監管產業或第三方素材授權。它支援 iOS 平台(Flutter、React Native、原生開發),能讀取連接 iPhone 的 iOS 版本並檢查是否為最新,同時執行 Apple 的「預防常見問題」檢查。所有答案均來自 App 本身的程式碼(帳號、使用者生成內容、應用程式內購買、SDK、語系、螢幕截圖封鎖、資料刪除等),最終輸出一個 Markdown 檔案,並指示使用者將回覆貼到 App Review Information → Notes 中。

相容平台~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/jamesisbuilding/App-Building-Skills/tree/main/skills/new-app-info

Installed? Explore more 程式設計與開發 skills: steipete/bluebubbles, steipete/eightctl, steipete/blucli · View all 6 →

在你喜歡的 AI 中提問

開啟一個已預先載入此 Agent Skill 的新對話。

說明文件

new-app-info 是做什麼的?

將 Apple 的「我們需要更多資訊」要求轉換成一個檔案。使用者在 App Store Connect 中以該回覆回覆,並將其貼到 App Review Information 的 Notes 欄位中,以便未來提交時都已包含此資訊。螢幕錄影是唯一需要使用者自行產生的部分。

Apple 要求的六個項目

每個資訊包都會回答所有六個項目,編號為 1–6,依此順序排列,即使 Apple 的訊息遺漏或措辭不同。如果 Apple 的訊息新增或變更了某個項目,請遵循 Apple 的版本並註明差異。

#Apple 要求的內容回答方式
1在實體裝置上錄製的螢幕錄影,裝置需執行最新作業系統。必須從啟動 App 開始,展示典型使用者流程,包括(如果 App 有):帳號註冊、登入與帳號刪除;使用者生成內容及其檢舉與封鎖功能;以及存取付費內容或功能第 1 部分(拍攝清單)+ 回覆 §1
2App 的目的與目標受眾:它解決的問題與提供的價值回覆 §2
3設定與存取主要功能的說明,包括任何必要的登入憑證或範例檔案回覆 §3
4用於核心功能的外部服務、工具或平台(資料提供者、身分驗證、支付處理、AI 服務)回覆 §4
5功能或內容的任何地區差異,或確認 App 在所有地區運作方式相同回覆 §5
6對於高度監管的產業或受保護的第三方素材:證明授權的文件或憑證回覆 §6

嚴格規則

  1. 螢幕錄影必須在實體裝置上進行,使用最新作業系統,以正常速度一次不間斷拍攝,從點擊 App 圖示開始。 切勿提供模擬器錄影或加速剪輯作為提交內容。您無法操控使用者的手機,因此錄影需由使用者自行完成;您的工作是提供拍攝清單。
  2. 僅聲明建置檔案中存在的內容。 每個功能、服務和語言都必須來自程式碼,而非來自計劃或備註。
  3. 不適用也是一種答案。 用一句話說明原因(例如:「此 App 沒有帳號註冊或登入功能」)。
  4. 帳號: 如果使用者可以建立帳號,則必須提供帳號刪除功能,且必須出現在錄影中;如果缺少此功能,請將其回報為阻礙。如果有登入功能,第 3 項需要示範用憑證(每種帳號類型一組):告知使用者在 App Store Connect 中輸入這些憑證。切勿在檔案中寫入真實密碼。
  5. 切勿在 App Store Connect 中發送、提交或編輯任何內容。 使用者貼上回覆並附加影片。
  6. 盡可能從儲存庫或裝置填入所有佔位符。列出尚未填入的項目及應填入的內容。

步驟 1:閱讀 Apple 的訊息

如果使用者貼上了 Apple 的訊息,請檢查其編號項目與上表的對應關係,並記錄哪些錄影條件(帳號、使用者生成內容、付費內容)適用於此 App。

步驟 2:以程式碼為基礎

讀取已提交版本中的程式碼,而非工作副本(先鎖定該版本,如步驟 6 → 審查建置,步驟 0 所述)。工作副本通常是功能分支,包含未發佈的功能,向 Apple 描述這些功能相當於聲稱他們未擁有的建置。使用 git grep <pattern> <commit> -- <paths> 和 git show <commit>:<path>。

在每次搜尋中排除 build、Pods、.dart_tool、node_modules 和 .git。

項目查找位置
1, 3:啟動後的主要流程Router 和畫面;入門引導;核心迴圈
1, 3:帳號、登入、刪除firebase_auth、sign_in_with_apple、supabase、Auth、login、signUp、deleteAccount、delete.*data
1:使用者生成內容發文、留言、聊天、上傳;report、block、flag
1, 3:付費內容purchases_flutter、revenuecat、StoreKit、product_id、付費牆畫面。找出哪些功能被限制、任何免費試用、付費牆可能出現的時機,以及「還原購買」的位置
1:螢幕截圖封鎖no_screenshot、isSecureTextEntry 技巧、UIScreen.capturedDidChange、FLAG_SECURE。被封鎖的畫面在錄影中會顯示為空白,因此回覆必須說明原因
2:目的與受眾App Store 商店文案、品牌或語音文件、README、發佈檢查清單、入門引導文案(.arb、.strings、strings.xml)
3:範例檔案檔案匯入、文件選擇器、QR 碼/條碼掃描、App 需要的硬體
4:外部服務依賴項(pubspec.yaml、Podfile、package.json、Gradle)和建置定義(--dart-define、金鑰檔案、發佈腳本)。對於每個服務:說明其功能以及取得的資料。僅列出發佈建置實際啟用的 SDK
5:地區已發布的語系;地區檢查(locale、countryCode、region);特定地區的價格、功能或內容
6:受監管或受保護健康、醫療、金融、賭博、法律或兒童相關的內容與聲明;授權內容、音樂、圖片、字型及其授權
聯絡方式設定、隱私權文件及網站檔案中的支援電子郵件
平台IPHONEOS_DEPLOYMENT_TARGET、TARGETED_DEVICE_FAMILY(僅限 iPhone,或包含 iPad)

檢查第 4 項中的分析用詞是否與儲存庫中的隱私權政策一致。如果不一致,或您無法確認 App Store Connect 的 App 隱私權答案,請標記出來。

步驟 3:裝置與作業系統(第 1 項)

  1. xcrun devicectl list devices 會顯示已配對的裝置。使用使用者可取得的 iPhone。
  2. xcrun devicectl device info details --device <id> | grep -i osVersion 會顯示其 iOS 版本。
  3. 搜尋網路以取得最新的 iOS 版本。如果手機版本落後,請告知:使用者需在錄影前前往「設定」→「一般」→「軟體更新」更新,然後您重新讀取版本。手機的作業系統需由使用者自行更新。
  4. 如果沒有配對的手機,請留下 [iOS 版本] 並告知使用者到何處尋找(「設定」→「一般」→「關於本機」)。

步驟 4:預防常見問題

檢查 Apple 的每個常見問題,並將結果回報給使用者。這些檢查是為使用者進行的,並非回覆的一部分。

指導方針檢查內容
2.1 錯誤與崩潰錄影使用提交版本的 TestFlight 建置,在實體裝置上進行。查看 TARGETED_DEVICE_FAMILY:如果支援 iPad,請告知使用者也在 iPad 上測試
2.1 存取 App登入 → 示範用憑證已在 App Store Connect 中輸入,每種帳號類型一組,且仍可使用
2.3.3 螢幕截圖列出商店螢幕截圖(例如 app-store-assets/*screenshots*)。標記任何看起來僅為標題藝術、啟動畫面或登入畫面的截圖
3.1.1 應用程式內購買程式碼中的每個產品 ID 都已在 App Store Connect 中設定並附加到此提交。列出 ID 供使用者檢查
3.2 其他商業模式如果 App 專為單一企業、組織或其員工設計,請標記需要不同的發行選項(自訂 App 或非公開發行)

步驟 5:寫入檔案

如果 app-store-assets 資料夾存在,則寫入 app-store-assets/new-app-info.md,否則寫入 ./new-app-info.md。保持此格式(完整範例請參閱 examples/seven-minute-math/new-app-info.md):

# App Review 資訊 — <App 名稱>

在 App Store Connect 中回覆時貼上第 2 部分並附加錄影。然後將第 2 部分貼到 App Review Information → Notes,以便未來提交時都已包含此資訊。
<尚有未填入的佔位符(如果有的話)。>

## 第 1 部分 — 螢幕錄影(第 1 項;請自行錄製)
原因:實體裝置、最新作業系統、一次拍攝、正常速度、從點擊圖示開始。
設定(預設:從 Mac 安裝的發佈建置;請參閱「審查建置」下方):
建立沙盒測試人員(App Store Connect → Users and Access → Sandbox → Test Accounts);
從手機刪除 App;您建置並安裝審查建置;在控制中心開啟螢幕錄影並關閉麥克風;開啟勿擾模式;使用沙盒測試人員登入 Apple 的購買表單(出現「Sandbox」字樣是正常的)。
拍攝清單,依序編號:點擊圖示 → 入門引導 → 端到端的典型流程 → 結果 → 每個適用的錄影條件(註冊、登入、刪除帳號;發文、檢舉、封鎖;付費牆、沙盒購買、解鎖的功能、還原購買)→ 使用者如何刪除其資料 → 停止。
任何會顯示為空白的畫面(因螢幕截圖封鎖)及其原因。

## 第 2 部分 — 回覆(請貼上此內容)
問候語,以及錄影所用的裝置與 iOS 版本。
**1. 螢幕錄影** … **6. 受監管產業 / 第三方素材**:每個項目以粗體標題呈現。
結尾行附上支援電子郵件。

撰寫方式:

  • §1:錄影內容、哪些錄影條件不適用及其原因,以及任何空白畫面。
  • §2:對象、問題、App 解決方式、價值。三到四句話。
  • §3:開始使用所需條件(憑證請輸入在 App Store Connect,切勿寫入檔案),然後以簡短列表說明主要功能,區分免費與付費,以及付費牆出現時機。
  • §4:每個服務以一個項目符號說明其功能。然後一行說明 App 未使用的服務(AI、資料提供者、身分驗證)(若屬實)。
  • §5:語言及任何地區差異,或「在所有地區運作方式相同」。
  • §6:文件,或「不適用」並附上原因。
  • 簡潔、基於事實且有禮貌。勿使用行銷語言。

步驟 6:端到端影片(第 1 項)

審查建置

錄製審查中的確切版本的發佈建置,透過 Mac 直接安裝到手機上。您負責建置與安裝,使用者負責錄影。

  1. 鎖定提交的版本。 詢問使用者在 App Store Connect 中顯示的、正在審查的提交的版本與建置號碼(例如 1.0.0 (1)),除非使用者已提供。找到產生該版本的 commit:一個發佈標籤、發佈分支或主分支、包含「shipped to the App Store」等訊息的 commit,或 pubspec.yaml/Info.plist 中設定該版本與建置號碼的 commit。如果有兩個可能的 commit,請詢問使用者應使用哪一個。絕不能從工作副本建置: 工作副本通常位於功能分支上,包含未提交的變更,Apple 尚未見過這些變更。請改在隔離的 worktree 中建置(git worktree add --detach <scratch>/review-build <commit>)。使用 cp 將任何被 git 忽略的關鍵檔案(例如 keys.json)複製到其中,無需讀取其內容。告知使用者正在建置哪個 commit,以及哪些在新分支上的內容不會出現在影片中。
  2. 尋找專案正常的裝置建置方式(執行腳本、tool/*.sh、Makefile、Fastlane)。移除所有模擬購買的旗標,例如 DUMMY_PURCHASES、MOCK、FAKE、USE_TEST_STORE、RevenueCat test_ 金鑰或 StoreKit 設定檔。模擬購買永遠不會顯示 Apple 的購買表單,審查人員看到付費功能在未經購買表單的情況下解鎖,可能會將其視為規避應用程式內購買的方式(3.1.1)。僅透過前綴檢查購買金鑰是否為正式商店金鑰(例如 grep -q '"REVENUECAT_IOS_KEY": "appl_');切勿印出金鑰值。
  3. 以發佈模式建置,絕不能用除錯模式:除錯模式的 Flutter 和 React Native 建置無法從主畫面圖示開啟,而 Apple 要求錄影從那裡開始。Flutter:flutter build ios --release,使用專案常用的定義,但移除模擬用的定義。
  4. 檢查建置的 App 是否與提交相符: /usr/libexec/PlistBuddy -c "Print CFBundleShortVersionString" -c "Print CFBundleVersion" build/ios/iphoneos/Runner.app/Info.plist 必須列印出提交的版本與建置號碼。如果不相符,請停止並告知使用者。
  5. 要求使用者先從手機刪除 App(這會清除手機上的資料,因此由使用者決定是否執行),然後安裝:xcrun devicectl device install app --device <id> build/ios/iphoneos/Runner.app。
  6. 從 Mac 安裝的建置會透過 Apple 的沙盒進行購買,因此使用者需要一個沙盒測試人員來登入購買表單。同一建置號碼的 TestFlight 安裝也可行(使用自己的 Apple ID 購買是免費的),且能保證是 Apple 擁有的確切二進位檔。如果使用者偏好,可使用此方式。

錄影與檢查

在錄影完成並檢查之前,資訊包不算完成。使用者錄製影片;您引導他們完成。在聊天中,提供第 1 部分的設定(包括沙盒測試人員)以及附有編號的拍攝清單。要求使用者將檔案透過 AirDrop 傳送到 app-store-assets/review-recording/,並在檔案就緒時通知您。然後:

  1. ffprobe -v error -show_entries format=duration:stream=width,height,codec_name -of default=nw=1 <file>。檢查解析度是否符合真實 iPhone 螢幕(而非模擬器視窗或裁剪過的編輯),且持續時間是否涵蓋整個流程。
  2. 製作一個聯絡表單,每 10 秒一張畫面:ffmpeg -i <file> -vf "fps=1/10,scale=240:-1,tile=8x8" -frames:v 1 <dir>/contact.png。同時單獨儲存第一張畫面。讀取兩者。
  3. 依序檢查:第一張畫面顯示主畫面或正在點擊的 App 圖示;拍攝清單中的每個步驟都已依序執行;使用者已正確示範註冊、登入、帳號刪除、發文、檢舉、封鎖、付費牆、還原購買;最後顯示停止錄影。檢查錄影中沒有模擬器視窗、開發者工具、快轉或剪輯的跡象。
  4. 錄影中的操作順序應與拍攝清單相符。如果不符,請要求使用者重新錄製,並解釋原因。
  5. 驗證錄影檔案大小合理:對於 10–15 分鐘的 1080p 影片,通常為 100–200 MB。如果太小,可能暗示問題。

完成

在檔案準備就緒後,告知使用者:「您的 App Review 資訊包已準備就緒。請前往 App Store Connect → App Review Information,將第 2 部分貼到 Notes 欄位,然後點擊『回覆並附加影片』,上傳螢幕錄影。未來提交時,此資訊會自動隨附。」

Individual skills in this repo

This repo contains 6 individual skills — each has its own dedicated page.

app-icon-design

Create, revise, and audit app icons using Apple's Human Interface Guidelines, with a clear visual identity and production-ready deliverables.

app-keyword-research

Validate an app idea against the App Store before building it. Turns the idea into search phrases, measures demand (App Store autocomplete) and competition (current top-10 apps) for each, ranks keywords by opportunity, and maps which apps own the market. Use when the user wants keyword research, ASO, "is there demand for…", "who are the competitors for…", "what should we call it / which keywords", or to validate or compare app ideas.

app-offer

Designs one opinionated "Grand Slam Offer" for any app idea, new or already shipped, by running Alex Hormozi's $100M Offers method adapted to app stores. It covers the market and niche, the commodity check, a value-equation audit, the problem inventory, delivery vehicles, the trimmed value stack, pricing and tiers, scarcity, urgency, bonuses, the guarantee, naming, the paywall per placement, the onboarding fast win, a test plan and a ship plan. It works within App Store and Google Play rules. For a shipped app it reads the code and notes first and produces a before/after. Use it when the user says "/app-offer", "run app-offer on <idea>", "make a grand slam offer for my app", "Hormozi my app", "price my app" or "design my paywall offer", or asks how to package, price, name, guarantee or paywall an app. It writes offer/grand-slam-offer.md (or ./<app-slug>-grand-slam-offer.md for a new idea).

brand-reference-pack

Build or refresh a shortform brand reference pack for any app from its real surfaces — website, App Store listing and reviews, socials, the live app (driven end to end on the simulator) and its code tokens — plus a status check of the upstream foundations (ICP, voice of customer, brand voice). Produces the context that content formats and design decisions are made from, as markdown, tokens.json and a PDF. Use for "build a brand pack for <app>", "refresh the brand pack", "capture the site/app/socials for shortform", "/brand-reference-pack".

deep-work

Timekeeper and scribe for the user's own timeboxed build session, default 90 min, also 1h / 1.5h / 2h (Orient, Build, Verify, Harden, Close, scaled to the block). Use when the user says "start a session", "deep work", "90 min block", "work block", or invokes /deep-work. Subcommands: status, park <note>, close, abort.

reel-motion-graphics

Turn a script or concept into an on-brand 9:16 explainer reel (luxury tech, warm sand on near-black, glassmorphism, CSS 3D, Bodoni + Instrument Sans) built in HyperFrames, with the animation above the fold and the presenter's talking head below. Use when the user gives a script, transcript, paper summary or concept and asks for a reel, motion graphics, an animated explainer or "the same style as the upcycling reel". Produces a HyperFrames project, a rendered MP4 and a live artifact player.

相關技能