games: one config section for Game Center and Play Games Services (shared leaderboards and achievements); apple game-center (gameCenterDetails, gameCenterAppVersions, leaderboards, achievements and localizations, upsert by vendor id, read back); play games (Games Configuration API upsert, no POST retry); signing ensure adds GAME_CENTER when games.gameCenter

This commit is contained in:
CRTkafa 2026-10-21 04:59:51 +07:00
parent eebb3a830b
commit ca7289b173
8 changed files with 653 additions and 6 deletions

View file

@ -60,8 +60,12 @@ export function validateSigning(s: AppleSigning | undefined): string[] {
return e;
}
export const capabilitySpecs = (s: AppleSigning | undefined): CapabilitySpec[] =>
(s?.capabilities ?? []).map(c => (typeof c === 'string' ? { type: c } : c));
/** The capabilities the App ID must have: apple.signing.capabilities, plus GAME_CENTER when games.gameCenter is true. */
export const capabilitySpecs = (s: AppleSigning | undefined, gameCenter = false): CapabilitySpec[] => {
const out = (s?.capabilities ?? []).map((c): CapabilitySpec => (typeof c === 'string' ? { type: c } : c));
if (gameCenter && !out.some(c => c.type === 'GAME_CENTER')) out.push({ type: 'GAME_CENTER' });
return out;
};
/** Capabilities to add (never removes one: removing can break a shipped feature; extra ones are reported). */
export function planCapabilities(bundleIdId: string, existing: string[], want: CapabilitySpec[]): { create: Req[]; present: string[]; extra: string[] } {