diff --git a/CHANGELOG.md b/CHANGELOG.md index e9f4aca..02edc77 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,6 +3,7 @@ ## Unreleased +- `apple build` prints a line before each slow step (App Store Connect reads, device families, web build), so a run without a terminal that stalls shows where. ## 0.8.61 ยท 2026-10-29 - TestFlight: `apple.testflight.description` takes a language id or its App Store locale (`en` or `en-US`; an `en-US` key was skipped silently), `check` names an unknown key, and `distribute --submit-review` stops (dry run: warns) when the app's primary locale has no beta localization (Beta App Review answers 422 MISSING_BETA_APP_LOCALIZATION). diff --git a/cli/apple/build.ts b/cli/apple/build.ts index d877447..caefc02 100644 --- a/cli/apple/build.ts +++ b/cli/apple/build.ts @@ -172,6 +172,8 @@ export async function run(ctx: Ctx): Promise { let build = a.get('build-number'); let teamId = signing.teamId ?? null; if (!build || !teamId) { + // a line before each slow step: a run without a terminal (launchd job, CI) that stalls shows where + log(TAG, `reading App Store Connect (${[!build ? 'next build number' : '', !teamId ? 'team id' : ''].filter(Boolean).join(', ')})`); try { const c = await ascClient(root, bundleId, config.apple?.appId); if (!build) { @@ -191,6 +193,7 @@ export async function run(ctx: Ctx): Promise { // device families: an upload that drops one the live version supports (iPad) is refused only AFTER the archive (ITMS-90101) // so compare first: stop before building with the exact fix (--allow-device-gap builds anyway) let deviceFamilies: FamilyVerdict[] = []; + log(TAG, 'reading the device families of the live version'); try { const c = await ascClient(root, bundleId, config.apple?.appId); deviceFamilies = familyVerdicts({ live: await liveDeviceFamilies(c, await c.app()), project: projectFamilies(root, bundleId, target.project), ipad: config.apple?.ipad }); @@ -268,6 +271,7 @@ export async function run(ctx: Ctx): Promise { else addToSearchList(keychain!); } shipPhase('prebuild', 'web build / prebuild'); + log(TAG, 'web build / prebuild step'); const web = await webStep({ ...webOpts, dry: false }); for (const n of target.notes) log(TAG, n); const rsync = foreignRsync(process.env.PATH);