From 9497a4cb5ab977aa8d915548a80622d25aa018dc Mon Sep 17 00:00:00 2001 From: Peter Steinberger Date: Sun, 7 Dec 2025 00:59:37 +0000 Subject: [PATCH] CLI: fix --version by reading app Info.plist --- apps/macos/Sources/ClawdisCLI/main.swift | 33 +++++++++++++++++++++--- scripts/package-mac-app.sh | 6 +++++ 2 files changed, 35 insertions(+), 4 deletions(-) diff --git a/apps/macos/Sources/ClawdisCLI/main.swift b/apps/macos/Sources/ClawdisCLI/main.swift index 620b11393..b7971f593 100644 --- a/apps/macos/Sources/ClawdisCLI/main.swift +++ b/apps/macos/Sources/ClawdisCLI/main.swift @@ -159,13 +159,38 @@ struct ClawdisCLI { } private static func printVersion() { - let version = Bundle.main.object(forInfoDictionaryKey: "CFBundleShortVersionString") as? String ?? "unknown" - let build = Bundle.main.object(forInfoDictionaryKey: "CFBundleVersion") as? String ?? "" - let git = Bundle.main.object(forInfoDictionaryKey: "ClawdisGitCommit") as? String ?? "unknown" - let ts = Bundle.main.object(forInfoDictionaryKey: "ClawdisBuildTimestamp") as? String ?? "unknown" + let info = loadInfo() + let version = info["CFBundleShortVersionString"] as? String ?? "unknown" + let build = info["CFBundleVersion"] as? String ?? "" + let git = info["ClawdisGitCommit"] as? String ?? "unknown" + let ts = info["ClawdisBuildTimestamp"] as? String ?? "unknown" print("clawdis-mac \(version) (\(build)) git:\(git) built:\(ts)") } + private static func loadInfo() -> [String: Any] { + if let dict = Bundle.main.infoDictionary, !dict.isEmpty { return dict } + guard let exePath = executablePath() else { return [:] } + let infoURL = exePath + .deletingLastPathComponent() // MacOS + .deletingLastPathComponent() // Contents + .appendingPathComponent("Info.plist") + if let data = try? Data(contentsOf: infoURL), + let dict = (try? PropertyListSerialization.propertyList( + from: data, + options: [], + format: nil)) as? [String: Any] { + return dict + } + return [:] + } + + private static func executablePath() -> URL? { + if let cstr = _dyld_get_image_name(0) { + return URL(fileURLWithPath: String(cString: cstr)).resolvingSymlinksInPath() + } + return nil + } + private static func send(request: Request) async throws -> Response { let conn = NSXPCConnection(machServiceName: serviceName) let interface = NSXPCInterface(with: ClawdisXPCProtocol.self) diff --git a/scripts/package-mac-app.sh b/scripts/package-mac-app.sh index f3e8adf3d..d9f56f224 100755 --- a/scripts/package-mac-app.sh +++ b/scripts/package-mac-app.sh @@ -11,6 +11,8 @@ PRODUCT="Clawdis" BUNDLE_ID="${BUNDLE_ID:-com.steipete.clawdis.debug}" BUILD_TS=$(date -u +"%Y-%m-%dT%H:%M:%SZ") GIT_COMMIT=$(cd "$ROOT_DIR" && git rev-parse --short HEAD 2>/dev/null || echo "unknown") +APP_VERSION="${APP_VERSION:-0.0.0}" +APP_BUILD="${APP_BUILD:-$GIT_COMMIT}" cd "$ROOT_DIR/apps/macos" @@ -32,6 +34,10 @@ cat > "$APP_ROOT/Contents/Info.plist" < CFBundleIdentifier ${BUNDLE_ID} + CFBundleShortVersionString + ${APP_VERSION} + CFBundleVersion + ${APP_BUILD} CFBundleName Clawdis CFBundleExecutable