49 lines
2.0 KiB
Swift
49 lines
2.0 KiB
Swift
import Foundation
|
|
|
|
extension ProcessInfo {
|
|
var isPreview: Bool {
|
|
guard let raw = getenv("XCODE_RUNNING_FOR_PREVIEWS") else { return false }
|
|
return String(cString: raw) == "1"
|
|
}
|
|
|
|
/// Nix deployments may write defaults into a stable suite (`ai.openclaw.mac`) even if the shipped
|
|
/// app bundle identifier changes (and therefore `UserDefaults.standard` domain changes).
|
|
static func resolveNixMode(
|
|
environment: [String: String],
|
|
standard: UserDefaults,
|
|
stableSuite: UserDefaults?,
|
|
isAppBundle: Bool) -> Bool
|
|
{
|
|
if environment["OPENCLAW_NIX_MODE"] == "1" { return true }
|
|
if standard.bool(forKey: "openclaw.nixMode") { return true }
|
|
|
|
// Only consult the stable suite when running as a .app bundle.
|
|
// This avoids local developer machines accidentally influencing unit tests.
|
|
if isAppBundle, let stableSuite, stableSuite.bool(forKey: "openclaw.nixMode") { return true }
|
|
|
|
return false
|
|
}
|
|
|
|
var isNixMode: Bool {
|
|
let isAppBundle = Bundle.main.bundleURL.pathExtension == "app"
|
|
let stableSuite = UserDefaults(suiteName: launchdLabel)
|
|
return Self.resolveNixMode(
|
|
environment: self.environment,
|
|
standard: .standard,
|
|
stableSuite: stableSuite,
|
|
isAppBundle: isAppBundle)
|
|
}
|
|
|
|
var isRunningTests: Bool {
|
|
// SwiftPM tests load one or more `.xctest` bundles. With Swift Testing, `Bundle.main` is not
|
|
// guaranteed to be the `.xctest` bundle, so check all loaded bundles.
|
|
if Bundle.allBundles.contains(where: { $0.bundleURL.pathExtension == "xctest" }) { return true }
|
|
if Bundle.main.bundleURL.pathExtension == "xctest" { return true }
|
|
|
|
// Backwards-compatible fallbacks for runners that still set XCTest env vars.
|
|
return self.environment["XCTestConfigurationFilePath"] != nil
|
|
|| self.environment["XCTestBundlePath"] != nil
|
|
|| self.environment["XCTestSessionIdentifier"] != nil
|
|
}
|
|
}
|