check blocks an apple app without app.copyright (App Store Connect requires it; never filled in automatically); validate reads the live version's copyright and says whether the store has one; round-trip test that the config writers (upsertBlock, upsertNestedString, removeKeyPath) keep unknown keys and comments; tests
This commit is contained in:
parent
73db689386
commit
e9507d8884
5 changed files with 79 additions and 3 deletions
|
|
@ -5,6 +5,7 @@
|
|||
// storebound check --aso keyword audit of both listing files (App Store keyword field, Play stuffing); exit 1 on errors
|
||||
// --json structured result ({ ok, items, warnings, hints, problems } or { findings, errors }), exit 1 on problems
|
||||
import { templateBlockers } from './lib/template-answers';
|
||||
import { COPYRIGHT_MISSING } from './lib/validate-rules';
|
||||
import { existsSync, readdirSync, readFileSync, statSync } from 'node:fs';
|
||||
import { dirname, join, relative } from 'node:path';
|
||||
import { appPrivacyMismatches, type PrivacyMismatch, trackingDeclaredIssues, type TrackingSources, typeIdOf } from './lib/app-privacy';
|
||||
|
|
@ -143,6 +144,7 @@ export async function run(ctx: Ctx): Promise<void> {
|
|||
const { runScan } = await import('./lib/scan');
|
||||
try { for (const n of (await runScan(ctx.loaded.root, { config: ctx.loaded.path })).report.notes) if (n.startsWith('scan.ignore[')) note(n); } catch (e) { note(`scan.ignore not checked: ${(e as Error).message}`); }
|
||||
}
|
||||
if (config.apple && !config.app.copyright?.trim()) problems.push(COPYRIGHT_MISSING);
|
||||
if (config.dataSafety) tryDo('data safety', () => {
|
||||
const rows = dataSafetyRows(config.dataSafety!, config.accounts);
|
||||
// conditional required rows (e.g. the delete-account URL once accounts exist): Play answers 400 without them
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue