From 8de3c1c5c2d9cf2d8b76c606a8d599266a67eb2c Mon Sep 17 00:00:00 2001 From: zqxwce Date: Wed, 5 Aug 2026 17:00:09 +0300 Subject: [PATCH] vphone-cli: Show fw prepare output during vm create MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The fw prepare step sent the script's entire stdout/stderr to /dev/null unless -v was passed, so the aria2c/curl/wget progress bar was discarded with it. That left the longest phase of the pipeline — a multi-GB IPSW download — printing nothing for minutes, which reads as a hang. Stream it unconditionally. Standalone `fw prepare` already does this by flooring its verbosity at .info; this brings `vm create` in line. The script itself is status-line based (~40 echoes, unzip -oq, no per-file loops), so this adds progress rather than noise. Co-Authored-By: Claude Fable 5 --- sources/vphone-cli/VPhoneCreateOrchestrator.swift | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/sources/vphone-cli/VPhoneCreateOrchestrator.swift b/sources/vphone-cli/VPhoneCreateOrchestrator.swift index 76be07e..dbe10a1 100644 --- a/sources/vphone-cli/VPhoneCreateOrchestrator.swift +++ b/sources/vphone-cli/VPhoneCreateOrchestrator.swift @@ -317,9 +317,10 @@ public struct VPhoneCreateOrchestrator { if options.keepArtifacts { env["VPHONE_KEEP_ARTIFACTS"] = "1" } trace("spawn /bin/bash \(resources.fwPrepareScript.path) (env keys: VPHONE_PYTHON, IPSW_DIR, VPHONE_SEAL_DIR)", v) + // Always streamed — silence during a multi-GB download reads as a hang. let code = try VPhoneProcessRunner.runStreaming( URL(fileURLWithPath: "/bin/bash"), [resources.fwPrepareScript.path], cwd: bundleURL, env: env, - echo: v.showsToolDetail) + echo: true) guard code == 0 else { throw VPhoneCreateError.fwPrepareFailed(code) } print("[+] Firmware prepared (iPhone + cloudOS merged into bundle).") }