App Store Submission Preflight
Read-only store preflight: assets, signing, permissions vs privacy policy, versions, blockers first. Read-only preflight before you submit an app to Google Play, Amazon Appstore, Microsoft Store, itch.io or the Apple App Store. Give it a repo path or description plus the target store. It returns a required-assets checklist, a signing/packaging readiness check (never asks for or prints keys, passwords or tokens), manifest-permission versus privacy-policy/data-safety consistency findings, a version/build-number check, and a numbered submission runbook with typical rejection reasons to pre-empt. Items are tagged STABLE or VERIFY TODAY. Never builds, signs or submits, and never guarantees approval.
Example input
Use the App Store Submission Preflight on this sample Android project (I wrote it for this demo, project folder notely/). Target: Google Play, this is an update; the live versionCode is 7. Files:
--- app/src/main/AndroidManifest.xml ---
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.notely">
<uses-permission android:name="android.permission.READ_CONTACTS" />
<application
android:label="Notely"
android:icon="@mipmap/ic_launcher"
android:debuggable="true">
<meta-data android:name="privacy_policy_url" android:value="https://notely.app/privacy" />
<meta-data android:name="store_listing_privacy_url" android:value="https://notely.app/legal/privacy-policy" />
</application>
</manifest>
--- app/build.gradle ---
android {
defaultConfig {
applicationId "com.example.notely"
versionCode 7
versionName "1.0.7"
}
signingConfigs {
release {
storeFile file("../release.jks")
storePassword "NOT-A-REAL-PASSWORD"
keyAlias "notely"
}
}
buildTypes {
release {
…Example output
Mode R — Google Play — update (user says live versionCode is 7; test vs production track not stated) — BLOCKERS 7 / WARNINGS 4 / UNSURE 9 / OK 3 ## Scope and evidence - Mode R: project files at /tmp/qa2/notely were readable. - Store: Google Play. App type: native Android (gradle). Release kind: update. - Files read: app/src/main/AndroidManifest.xml, app/build.gradle (property names only), privacy-policy.md, release.jks (filename and git-tracked status only, never opened), ic_launcher.png (dimensions via `file`), git ls-files. - Unavailable: any source code tree (manifest and gradle only), listing text, store console, the live published package ID, the store data-safety answers. - User statement: "live version is 7". ## Stable practice vs verify today STABLE: - A square store icon, a feature/hero graphic and real screenshots are needed. - Releases must be signed. Updates need the same signing identity and a higher build number. - A release build must not be debuggable. - Permissions need a feature behind them. - The privacy policy must match behaviour and the listing's policy URL must match the policy. - Signing keys must not be committed. VERIFY TODAY (check the Play Console requirements, policy and "Data safety" help pages): - Pixel sizes and counts for the store icon, feature graphic and screenshots. - Target API level and its deadline. - Package format (app bundle vs APK). - Sensitive-permission declaration form for contacts. - Data-safety form, content rating questionnaire and testing-track rules. - Account type, verification and fees. ## Assets and sizes | Asset | Needed? | Found in repo | Status | Tag | |---|---|---|---|---| | Launcher icon | Yes | app/src/main/res/mipmap-xxhdpi/ic_launcher.png, 192x192, square | FOUND-OK | STABLE (sizes VERIFY TODAY) | | Store (high-res) icon | Yes | none; the 192px launcher icon is a different file with different rules | MISSING (usually 512x512, VERIFY TODAY) | STABLE / VERIFY TODAY | | Feature graphic | Yes | none | MISSING (usually a wide banner of roughly 1024x500, from memory, may be stale, VERIFY TODAY) | STABLE / VERIFY TODAY | | Screenshots | Yes | none | MISSING (count and device classes VERIFY TODAY) | STABLE / VERIFY TODAY | | Short and full description | Yes | no listing text provided | UNSURE | STABLE | | Content rating and data-disclosure answers | Yes | not provided | UNSURE | VERIFY TODAY | | Privacy policy URL | Yes | see Permissions section: the two URLs in the manifest differ | BLOCKER (counted under Permissions) | STABLE | …
Real output from running the skill on a sample problem, shortened. The skill file itself is not published here.