

























1+// iOS configure signing tests cover generated local signing defaults.
2+import { execFileSync } from "node:child_process";
3+import { copyFileSync, mkdirSync, readFileSync } from "node:fs";
4+import path from "node:path";
5+import { afterAll, beforeAll, describe, expect, it } from "vitest";
6+import { cleanupTempDirs, makeTempDir } from "../helpers/temp-dir.js";
7+8+const SCRIPT = path.join(process.cwd(), "scripts", "ios-configure-signing.sh");
9+const TEAM_ID_SCRIPT = path.join(process.cwd(), "scripts", "ios-team-id.sh");
10+const BASH_BIN = process.platform === "win32" ? "bash" : "/bin/bash";
11+12+const tempDirs: string[] = [];
13+let fixtureScript = "";
14+let fixtureLocalSigningFile = "";
15+16+function bashArgs(scriptPath: string): string[] {
17+return process.platform === "win32" ? [scriptPath] : ["--noprofile", "--norc", scriptPath];
18+}
19+20+function runConfigureSigning(teamId: string, user = "localuser"): string {
21+return execFileSync(BASH_BIN, bashArgs(fixtureScript), {
22+env: {
23+ ...process.env,
24+IOS_DEVELOPMENT_TEAM: teamId,
25+OPENCLAW_IOS_APP_BUNDLE_ID: "",
26+OPENCLAW_IOS_BUNDLE_ID_BASE: "",
27+OPENCLAW_IOS_BUNDLE_SUFFIX: "",
28+OPENCLAW_IOS_SHARE_BUNDLE_ID: "",
29+OPENCLAW_IOS_ACTIVITY_WIDGET_BUNDLE_ID: "",
30+OPENCLAW_IOS_WATCH_APP_BUNDLE_ID: "",
31+OPENCLAW_IOS_WATCH_EXTENSION_BUNDLE_ID: "",
32+USER: user,
33+},
34+encoding: "utf8",
35+stdio: ["ignore", "pipe", "pipe"],
36+}).trim();
37+}
38+39+function readGeneratedSigning(): string {
40+return readFileSync(fixtureLocalSigningFile, "utf8");
41+}
42+43+describe.sequential("scripts/ios-configure-signing.sh", () => {
44+beforeAll(() => {
45+const fixtureRoot = makeTempDir(tempDirs, "openclaw-ios-configure-signing-");
46+const scriptsDir = path.join(fixtureRoot, "scripts");
47+const iosDir = path.join(fixtureRoot, "apps", "ios");
48+mkdirSync(scriptsDir, { recursive: true });
49+mkdirSync(iosDir, { recursive: true });
50+51+fixtureScript = path.join(scriptsDir, "ios-configure-signing.sh");
52+fixtureLocalSigningFile = path.join(iosDir, ".local-signing.xcconfig");
53+copyFileSync(SCRIPT, fixtureScript);
54+copyFileSync(TEAM_ID_SCRIPT, path.join(scriptsDir, "ios-team-id.sh"));
55+});
56+57+afterAll(async () => {
58+cleanupTempDirs(tempDirs);
59+});
60+61+it("uses the canonical app bundle ID for the canonical OpenClaw team", () => {
62+const stdout = runConfigureSigning("FWJYW4S8P8");
63+const generated = readGeneratedSigning();
64+65+expect(stdout).toContain("team=FWJYW4S8P8 app=ai.openclawfoundation.app");
66+expect(generated).toContain("OPENCLAW_DEVELOPMENT_TEAM = FWJYW4S8P8");
67+expect(generated).toContain("OPENCLAW_APP_BUNDLE_ID = ai.openclawfoundation.app");
68+expect(generated).toContain("OPENCLAW_SHARE_BUNDLE_ID = ai.openclawfoundation.app.share");
69+});
70+71+it("keeps unique local bundle IDs for non-canonical fallback teams", () => {
72+const stdout = runConfigureSigning("Y3YUZP442G");
73+const generated = readGeneratedSigning();
74+75+expect(stdout).toContain(
76+"canonical_team=FWJYW4S8P8 local_team=Y3YUZP442G app=ai.openclawfoundation.app.test.localuser-y3yuzp442g",
77+);
78+expect(generated).toContain("OPENCLAW_DEVELOPMENT_TEAM = Y3YUZP442G");
79+expect(generated).toContain(
80+"OPENCLAW_APP_BUNDLE_ID = ai.openclawfoundation.app.test.localuser-y3yuzp442g",
81+);
82+});
83+});
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。