diff --git a/NucleicRemote/NucleicRemote/Views/BuildBanner.swift b/NucleicRemote/NucleicRemote/Views/BuildBanner.swift index 7acc399..ddcae59 100644 --- a/NucleicRemote/NucleicRemote/Views/BuildBanner.swift +++ b/NucleicRemote/NucleicRemote/Views/BuildBanner.swift @@ -32,11 +32,16 @@ enum BuildChannel { } /// Build identity for the running app: which channel it came from and its build label. -/// The Mac embeds a git commit via a prebuild plugin; the iOS build number is derived from -/// `git rev-list --count` at archive time (scripts/ios-release.sh), so `CFBundleVersion` -/// plays the same role here. +/// Both platforms show the short git commit: the Mac embeds it via a prebuild plugin, and +/// here the NucleicRemote target's "Stamp git commit into Info.plist" build phase writes +/// `git rev-parse --short HEAD` into the `NucleicCommit` Info.plist key. Falls back to +/// `CFBundleVersion` (the `git rev-list --count` build number from scripts/ios-release.sh) +/// when git isn't available. struct BuildInfo { let channel: BuildChannel + /// The short git commit the binary was built from (e.g. "a1b2c3d", "+" suffix when the + /// tree was dirty) — matching the Mac's banner. Falls back to `CFBundleVersion` / "local" + /// if the build phase couldn't resolve a hash. let buildLabel: String /// `CFBundleShortVersionString` when present, else `nil`. let version: String? @@ -47,7 +52,13 @@ struct BuildInfo { init() { let info = Bundle.main.infoDictionary version = info?["CFBundleShortVersionString"] as? String - buildLabel = (info?["CFBundleVersion"] as? String) ?? "local" + // Prefer the stamped git commit (mirrors the Mac's GitCommit.hash); an empty or + // "unknown" value means git wasn't available at build time, so fall back to the + // bundle build number. + let commit = info?["NucleicCommit"] as? String + buildLabel = commit.flatMap { $0.isEmpty || $0 == "unknown" ? nil : $0 } + ?? (info?["CFBundleVersion"] as? String) + ?? "local" channel = Self.detectChannel(stamped: info?["NucleicChannel"] as? String) }