cn1:metadata-push goal + App Store submission developer-guide chapter#5353
Conversation
…pter
Metadata-as-code client tooling for the Codename One build cloud's automated
app-store submission.
- MetadataPushMojo (goal cn1:metadata-push): reads a cn1-metadata/{apple,google}/
<locale>/*.txt + screenshots/<type>/*.png folder, builds the store listing
descriptor, authenticates with the cached Codename One login token, and PUTs it
(plus uploads screenshots) to the build cloud, which applies it to App Store
Connect / Google Play at submission. Store text files map to each store's fields;
unset files are left unchanged. -Dstore=apple|google|both, -DmetadataDir,
-Dpackage overrides; bundle id defaults to codename1.packageName.
- docs/developer-guide: new App-Store-Submission.asciidoc chapter covering the
end-to-end submission flow (console single-click submit, beta vs production,
Mac App Store, review status), credentials, plan tiers/quotas, and the
metadata-as-code workflow (folder layout, cn1:metadata-push, apply timing,
transient screenshots, benefits vs manual). Registered after the macOS chapter.
Server side: BuildCloud feature/submission-hardening (machine bearer-JWT endpoint
under /appsec/7.0/metadata).
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…int) The developer-guide snippet validator requires every [source,LANG] block to be include-backed from docs/demos. The illustrative mvn command block is not a demo-backed snippet, so use a plain [source] listing (no language) -- the same form the metadata folder-layout block in this chapter already uses. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
The developer guide describes how the feature works, not commercial terms: remove the paid-feature paragraph and the plans/quotas table, and the remaining plan-tier clauses (notification gating, metadata update quota, 'plan limits'). Also drop fastlane references from the chapter and the mojo javadoc. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Cloudflare Preview
|
- MetadataInitMojo (goal cn1:metadata-init): scaffolds cn1-metadata/ with an empty template of per-locale field files, a screenshots folder, and a README. Idempotent (creates only what's missing). Documented in the App Store Submission guide chapter. - Pricing page: automated-submission feature bullets per tier (Basic beta + metadata as code; Pro production + review tracking + 50/mo; Enterprise unlimited + zero-touch). - Pricing FAQ: clarify that manual submission is always unlimited and free on any plan; the limits apply only to the optional automated submission feature. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
|
Developer Guide build artifacts are available for download from this workflow run:
Developer Guide quality checks: |
✅ Continuous Quality ReportTest & Coverage
Static Analysis
Generated automatically by the PR CI workflow. |
|
Compared 144 screenshots: 144 matched. Native Android coverage
✅ Native Android screenshot tests passed. Native Android coverage
Benchmark ResultsDetailed Performance Metrics
|
|
Compared 135 screenshots: 135 matched. |
Use contractions (Microsoft.Contractions), drop 'and so on' and the flagged adverbs, use American 'afterward', and avoid non-dictionary words (diffable/ revertable) and a false-positive 'the what's-new'. Verified locally: Vale 0/0/0, LanguageTool 0 matches, snippet validator clean. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
|
Compared 142 screenshots: 142 matched. Benchmark Results
Detailed Performance Metrics
|
|
Compared 216 screenshots: 216 matched. |
|
Compared 139 screenshots: 139 matched. |
|
Compared 143 screenshots: 143 matched. Benchmark Results
Build and Run Timing
Detailed Performance Metrics
|
|
Compared 137 screenshots: 137 matched. Benchmark Results
Build and Run Timing
Detailed Performance Metrics
|
…e Android Broaden the submission chapter into "App Store Submission and Deployment": one place to reach users on the App Store, Mac App Store, Google Play, Huawei AppGallery, and Android markets beyond Google Play. - Document Huawei AppGallery submission (credentials, the console button, beta-draft vs production-review). - New "Reaching Android users beyond Google Play" section: per-store distribution-channel packages with the channel id readable via a Codename One API (no third-party SDK), each signed with the app's key. Google Play always receives the standard, unmodified AAB, so channel packaging never touches the Play artifact and can't be challenged by Google. - Pricing card: multi-store / reach-beyond-Google-Play bullet. Verified: Vale 0/0/0, LanguageTool 0 matches, snippet validator clean. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Completes the client tier of multi-store Android distribution: the Android port
reads the channel id the build server's channel packages stamp into the APK
Signing Block (BuildDaemon ApkChannelWriter) and exposes it via
Display.getProperty("DistributionChannel") -- so apps report their install source
with no third-party channel SDK.
- AndroidImplementation.getProperty: new "DistributionChannel"/"cn1.channel" keys.
- Reader mirrors the daemon writer's signing-block walk (same CN1 channel pair id),
reads once from the running APK (getApplicationInfo().sourceDir) and caches it;
returns the default (empty) for a normal Google Play build.
- Guide: document the concrete API call.
Doc gates green (Vale 0/0/0, LanguageTool 0, snippets clean). Server: BuildCloud
#89; daemon writer: BuildDaemon #149.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Screenshot of the build console Submissions page showing the per-store credential cards (App Store Connect + the new Huawei AppGallery card), captured from the console simulator. Provides visual context for the "Store credentials" section. Verified: Vale 0/0/0, LanguageTool 0, snippets clean, image referenced (unused- images allow-list unchanged). Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…posts (#5357) * Release week 2026-07-10 blog series: ParparVM vs HotSpot + 3 feature posts Parent post (Fri): "How We Beat HotSpot Performance (By Cheating, But Not Like That)" -- the PR #5327 performance story from 4.21x slower than warmed Java 25 to geomean 1.00x parity, with the GC/tagged-Integer deep dives and the PR #5338 synchronized-on-wrapper build check. Daily posts: standalone certificate wizard (PR #5339, Sat), AR/VR support and simulation (PR #5335, Sun), automated store submissions as code incl. Huawei AppGallery plus organization accounts and self-service account deletion (PR #5353, Mon). Includes 1024x512 hero images, post screenshots, and VM/performance vocabulary for the LanguageTool blog accept-list. Prose gate passes; all mermaid diagrams verified against the site's mermaid@10 loader. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> * Blog series: Oxford commas + numeral percentage for the Vale gate CI runs Vale's Microsoft.OxfordComma and Microsoft.Percentages rules that the local styles cache was missing. Sweep every serial list in the four posts and switch "Ninety percent" to "90%". Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> * Restructure the HotSpot post around architecture Founder feedback pass: add the memory story (table + chart, standalone ParparVM benchmark note, Java 25 AOT fairness note), explain the HotSpot big-block heap vs our malloc/free philosophy and the BiBOP page heap, tease the twists up top, drop the bug-anecdote sections and the warmup/ GraalVM/what-I-got-wrong filler, rework "Going Deeper" around the readable one-file-per-class tradeoff, add a TL;DR, and close on the two-big-PRs slow-week note. Charts split into two clean single-series xycharts (render-verified on mermaid@10 and mermaid.ink for syndication). Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> --------- Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
Client-side tooling + docs for the build cloud's automated app-store submission (server side: BuildCloud
feature/submission-hardening).cn1:metadata-pushgoalLets developers manage store release metadata as code. It reads a
cn1-metadata/{apple,google}/<locale>/*.txt+screenshots/<type>/*.pngfolder (one file per listing field), builds the descriptor, authenticates with the cached Codename One login token (same account the build uses), and PUTs it — plus uploads screenshots — to the build cloud, which applies it to App Store Connect / Google Play at submission time.mvn cn1:metadata-push # both stores from cn1-metadata/ mvn cn1:metadata-push -Dstore=applesubtitle.txt→ App Store subtitle / Google short description); unset files leave the store's value unchanged.codename1.packageName./appsec/7.0/metadata) is secured by the same bearer chain the build API uses.HttpURLConnection+ hand-rolled JSON/multipart (no new plugin deps).cn1:metadata-initscaffoldmvn cn1:metadata-initscaffolds thecn1-metadatafolder (empty field-file template + screenshots folder + README), idempotently, so developers don't hand-create the layout.Developer guide + website
docs/developer-guide/App-Store-Submission.asciidoc(new, registered after the macOS chapter): end-to-end submission flow (console submit, beta vs production, Mac App Store, review status), credentials, and the metadata-as-code workflow (scaffold, folder layout,cn1:metadata-push, apply timing, transient screenshots). No pricing/plan content (that lives on the pricing page).🤖 Generated with Claude Code