review access: guest-play apps rejected by Play as a login wall (empty name field, disabled Continue, a code link on the first screen): check warns for a Play app with a first-run gate or IAP and no reviewAccess.instructions; with guest steps the play-sign-in-details plan declares one entry without credentials, the dialog's required full-access box as the owner's step; store-pitfalls 73
This commit is contained in:
parent
d6070cc185
commit
824758179b
11 changed files with 202 additions and 15 deletions
10
cli/check.ts
10
cli/check.ts
|
|
@ -23,7 +23,8 @@ import { dataSafetyIssues, dataSafetyRows } from './lib/data-safety';
|
|||
import { credentialStatus, reviewDemoAccount } from './lib/credentials';
|
||||
import { log, printJson, warn } from './lib/log';
|
||||
import { profileIssues } from './lib/profile';
|
||||
import { detectProject } from './lib/scan/project';
|
||||
import { detectProject, grepOwn, where } from './lib/scan/project';
|
||||
import { SIGNALS } from './lib/scan/rules';
|
||||
import { reviewShotProblem } from './apple/iap-review';
|
||||
import { allSubscriptions } from './lib/subscriptions';
|
||||
import { type CopyFile, validateCopy } from './shots/lib';
|
||||
|
|
@ -205,7 +206,12 @@ export async function run(ctx: Ctx): Promise<void> {
|
|||
if (file) for (const i of versionSourceIssues(file)) note(`play: ${versionSourceMessage(i, relative(ctx.loaded.root, file), t.framework)}`);
|
||||
} catch { /* no Gradle project here (yet): play build says so */ }
|
||||
}
|
||||
for (const i of profileIssues(config,{ demoAccount: !!reviewDemoAccount(ctx.loaded.root) })) {
|
||||
// first-run gate (name / code entry) in a Play app without reviewer steps: read from the code only when it matters
|
||||
let firstRunGate: string[] = [];
|
||||
if (config.play && !config.reviewAccess?.signInRequired && !config.reviewAccess?.instructions?.trim()) {
|
||||
try { const f = facts ?? detectProject(ctx.loaded.root); firstRunGate = grepOwn(f, SIGNALS.firstRunGate, 3).hits.map(where); } catch { /* no project sources here */ }
|
||||
}
|
||||
for (const i of profileIssues(config, { demoAccount: !!reviewDemoAccount(ctx.loaded.root), firstRunGate })) {
|
||||
if (i.level === 'error') problems.push(i.msg); else warn('check', i.msg);
|
||||
}
|
||||
// Play steps without an API: the App category (Store settings) and the App content answers the owner still owes
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue