vibeview 0.47.0 → 0.48.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -190,6 +190,24 @@ function validateBuildEnv(env, platformKey) {
190
190
  }
191
191
  }
192
192
  }
193
+ var XCODE_PLATFORMS = ["ios", "tvos"];
194
+ var XCODE_VERSION_RE = /^\d+\.\d+$/;
195
+ function validateBuildXcode(xcode, platformKey) {
196
+ if (xcode === void 0) return;
197
+ if (!XCODE_PLATFORMS.includes(platformKey)) {
198
+ throw new Error(
199
+ `vibeview.json: platforms.${platformKey}.build.xcode only applies to ios and tvos builds \u2014 remove it from the ${platformKey} block`
200
+ );
201
+ }
202
+ if (typeof xcode !== "string" || !XCODE_VERSION_RE.test(xcode)) {
203
+ throw new Error(
204
+ `vibeview.json: platforms.${platformKey}.build.xcode must be a version string like "27.1"`
205
+ );
206
+ }
207
+ }
208
+ function platformUsesXcode(platformKey) {
209
+ return XCODE_PLATFORMS.includes(platformKey);
210
+ }
193
211
  function saveDevConfig(cwd, cfg) {
194
212
  const target = join(cwd, FILE);
195
213
  const tmp = join(cwd, `.${FILE}.${process.pid}.${Date.now()}.tmp`);
@@ -2142,6 +2160,13 @@ async function buildCommand(opts, cloudDeps) {
2142
2160
  "usage"
2143
2161
  );
2144
2162
  }
2163
+ if (opts.xcode !== void 0) {
2164
+ fail(
2165
+ opts,
2166
+ "--xcode requires --cloud: a local build uses the Xcode selected on this machine",
2167
+ "usage"
2168
+ );
2169
+ }
2145
2170
  const platform = await resolveBarePlatform(cwd, cfgRef.current, opts);
2146
2171
  const build = await resolveBuildConfig(cwd, cfgRef, platform, opts);
2147
2172
  const result = await runBuildForPlatform(
@@ -2408,7 +2433,17 @@ function formatCost(costMicro) {
2408
2433
  return `$${(costMicro / 1e6).toFixed(2)}`;
2409
2434
  }
2410
2435
  async function runCloudBuildCommand(cwd, cfgRef, opts, deps) {
2436
+ if (opts.xcode !== void 0 && !XCODE_VERSION_RE.test(opts.xcode)) {
2437
+ fail(opts, `--xcode must be a version like 27.1, got "${opts.xcode}"`, "usage");
2438
+ }
2411
2439
  const platforms = await resolveCloudPlatforms(cwd, cfgRef, opts);
2440
+ if (opts.xcode !== void 0 && !platforms.some(platformUsesXcode)) {
2441
+ fail(
2442
+ opts,
2443
+ `--xcode only applies to ios and tvos builds \u2014 this run builds ${platforms.join(", ")}`,
2444
+ "usage"
2445
+ );
2446
+ }
2412
2447
  const { token, baseUrl } = resolveAuth(opts);
2413
2448
  const client = new ApiClient(baseUrl, token);
2414
2449
  const d = deps ?? defaultCloudBuildDeps(client);
@@ -2423,6 +2458,7 @@ async function runCloudBuildCommand(cwd, cfgRef, opts, deps) {
2423
2458
  for (const p of platforms) {
2424
2459
  try {
2425
2460
  validateBuildEnv(cfg?.platforms?.[p]?.build?.env, p);
2461
+ validateBuildXcode(cfg?.platforms?.[p]?.build?.xcode, p);
2426
2462
  if (cfg?.platforms?.[p]?.build?.autoIncrement === true && opts.production && createFromArtifact.has(p)) {
2427
2463
  throw new UsageError(
2428
2464
  `platforms.${p}.build.autoIncrement needs the build linked to an app \u2014 set appId in vibeview.json (a brand-new app's first build can't auto-increment)`
@@ -2499,6 +2535,7 @@ ${offenders}`);
2499
2535
  )
2500
2536
  );
2501
2537
  }
2538
+ const xcode = platformUsesXcode(p) ? opts.xcode ?? build.xcode : void 0;
2502
2539
  return {
2503
2540
  platform: p,
2504
2541
  // OMITTED, never invented, for a platform whose app the artifact will
@@ -2511,7 +2548,8 @@ ${offenders}`);
2511
2548
  artifact_path: artifactPath,
2512
2549
  distribution: production ? "production" : "simulator",
2513
2550
  ...build.env ? { env: build.env } : {},
2514
- ...autoIncrement && production ? { auto_increment: true } : {}
2551
+ ...autoIncrement && production ? { auto_increment: true } : {},
2552
+ ...xcode ? { xcode } : {}
2515
2553
  };
2516
2554
  });
2517
2555
  const uploadSpinner = !opts.json ? createSpinner("uploading source...") : null;
package/dist/cli.js CHANGED
@@ -34,7 +34,7 @@ import {
34
34
  runAgentVerb,
35
35
  runStepsNotChecked,
36
36
  stepsNotCheckedLabel
37
- } from "./chunk-GA56B7WS.js";
37
+ } from "./chunk-OMIZWILH.js";
38
38
  import {
39
39
  ApiClient,
40
40
  ApiStatusError,
@@ -4373,6 +4373,9 @@ program.command("build").description("Run your configured build command and uplo
4373
4373
  "--production",
4374
4374
  "--cloud only: build a signed, installable production artifact (.aab/.ipa) using uploaded signing credentials (see `vibeview credentials add`), instead of the default unsigned simulator build",
4375
4375
  false
4376
+ ).option(
4377
+ "--xcode <version>",
4378
+ "--cloud only, ios/tvos: the Xcode version to build with (e.g. 27.1), overriding vibeview.json build.xcode for this run"
4376
4379
  ).option("--json", "Print the result as one JSON line (NDJSON events with --cloud)", false).action((opts) => buildCommand(opts));
4377
4380
  program.command("submit").description(
4378
4381
  "Submit a succeeded production cloud build's artifact to TestFlight (ios/tvos) or a Google Play track (android/androidtv) \u2014 binary upload only; store listing and review stay in the store consoles"
@@ -4505,7 +4508,7 @@ program.command("dev-reload").description(
4505
4508
  program.command("mcp").description(
4506
4509
  "Run an MCP stdio server exposing the agent verbs (tap, swipe, type, ...) plus dev_start/dev_stop/dev_reload as tools"
4507
4510
  ).option("--token <token>", "API token (or set VIBEVIEW_API_TOKEN)").action(async (opts) => {
4508
- const { runMcpServer } = await import("./server-PSPIUL6A.js");
4511
+ const { runMcpServer } = await import("./server-3JZ2MN5N.js");
4509
4512
  await runMcpServer({ ...opts, version: pkg.version });
4510
4513
  });
4511
4514
  program.command("agent-setup").description(
@@ -34,7 +34,7 @@ import {
34
34
  renderEnvelope,
35
35
  resolveMetro,
36
36
  startDevSession
37
- } from "./chunk-GA56B7WS.js";
37
+ } from "./chunk-OMIZWILH.js";
38
38
  import {
39
39
  ApiClient,
40
40
  NotFoundError,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "vibeview",
3
- "version": "0.47.0",
3
+ "version": "0.48.0",
4
4
  "description": "VibeView CLI -- run your app on cloud iOS simulators, Android emulators, Apple TV, Android TV and Roku devices: a React Native dev loop, device control for you or your coding agent (CLI or MCP), and tests from CI",
5
5
  "mcpName": "io.github.vibeview/vibeview",
6
6
  "type": "module",