diff --git a/src/service.rs b/src/service.rs index 4249120e..679e6fe2 100644 --- a/src/service.rs +++ b/src/service.rs @@ -65,7 +65,20 @@ fn install_macos() -> Result<()> { let stdout = logs_dir.join("daemon.stdout.log"); let stderr = logs_dir.join("daemon.stderr.log"); - let plist = format!( + let plist = macos_plist_content( + &exe.display().to_string(), + &stdout.display().to_string(), + &stderr.display().to_string(), + ); + + std::fs::write(&file, plist)?; + println!("Installed launchd service: {}", file.display()); + println!(" Start with: ironclaw service start"); + Ok(()) +} + +fn macos_plist_content(exe: &str, stdout: &str, stderr: &str) -> String { + format!( r#" @@ -81,6 +94,11 @@ fn install_macos() -> Result<()> { KeepAlive + EnvironmentVariables + + CLI_ENABLED + false + StandardOutPath {stdout} StandardErrorPath @@ -89,15 +107,10 @@ fn install_macos() -> Result<()> { "#, label = SERVICE_LABEL, - exe = xml_escape(&exe.display().to_string()), - stdout = xml_escape(&stdout.display().to_string()), - stderr = xml_escape(&stderr.display().to_string()), - ); - - std::fs::write(&file, plist)?; - println!("Installed launchd service: {}", file.display()); - println!(" Start with: ironclaw service start"); - Ok(()) + exe = xml_escape(exe), + stdout = xml_escape(stdout), + stderr = xml_escape(stderr), + ) } fn install_linux() -> Result<()> { @@ -356,4 +369,11 @@ mod tests { let s = path.to_string_lossy(); assert!(s.ends_with(".ironclaw/logs"), "unexpected path: {s}"); } + + #[test] + fn macos_plist_sets_cli_enabled_false() { + let plist = macos_plist_content("/tmp/ironclaw", "/tmp/stdout.log", "/tmp/stderr.log"); + assert!(plist.contains("EnvironmentVariables")); + assert!(plist.contains(" CLI_ENABLED\n false")); + } }