denoland/deno · error
helper plist {} has no CFBundleIdentifier
Error message
helper plist {} has no CFBundleIdentifier What it means
Error "helper plist {} has no CFBundleIdentifier" thrown in denoland/deno.
Source
Thrown at cli/tools/desktop.rs:2526
|| format!("failed to rewrite helper plist at {}", plist_path.display()),
)?;
}
Ok(())
}
/// Rewrite a single helper's `CFBundleIdentifier` based on the existing
/// value's "kind" suffix.
fn rewrite_helper_plist_identifier(
plist_path: &Path,
main_bundle_id: &str,
) -> Result<(), AnyError> {
let mut dict: plist::Dictionary = plist::from_file(plist_path)
.with_context(|| format!("failed to parse {}", plist_path.display()))?;
let existing = dict
.get("CFBundleIdentifier")
.and_then(|v| v.as_string())
.ok_or_else(|| {
deno_core::anyhow::anyhow!(
"helper plist {} has no CFBundleIdentifier",
plist_path.display()
)
})?;
// Extract the suffix from the last `helper` segment onward. Falls back
// to a bare `helper` if the existing id doesn't contain that token
// (defensive — every laufey helper plist has it today).
let suffix = existing
.find("helper")
.map(|i| &existing[i..])
.unwrap_or("helper");
let new_id = format!("{main_bundle_id}.{suffix}");
dict.insert(
"CFBundleIdentifier".to_string(),
plist::Value::String(new_id),
);
// Write XML format for stability and human-diffability. Helper plists
// are tiny so we don't gain anything by switching to binary plistView on GitHub (pinned to 89f33cbef2)
When it happens
Trigger: Thrown at cli/tools/desktop.rs:2526 when the library encounters an invalid state.
Common situations: See trigger scenarios.
AI-assisted analysis of denoland/deno@89f33cbef2 (2026-08-16).
Data as JSON: /api/errors/7cf38ef468bbe5f1.
Report an issue: GitHub.