{"record":{"id":"7cf38ef468bbe5f1","repo":"denoland/deno","slug":"helper-plist-has-no-cfbundleidentifier","errorCode":null,"errorMessage":"helper plist {} has no CFBundleIdentifier","messagePattern":"helper plist (.+?) has no CFBundleIdentifier","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"cli/tools/desktop.rs","lineNumber":2526,"sourceCode":"      || format!(\"failed to rewrite helper plist at {}\", plist_path.display()),\n    )?;\n  }\n  Ok(())\n}\n\n/// Rewrite a single helper's `CFBundleIdentifier` based on the existing\n/// value's \"kind\" suffix.\nfn rewrite_helper_plist_identifier(\n  plist_path: &Path,\n  main_bundle_id: &str,\n) -> Result<(), AnyError> {\n  let mut dict: plist::Dictionary = plist::from_file(plist_path)\n    .with_context(|| format!(\"failed to parse {}\", plist_path.display()))?;\n  let existing = dict\n    .get(\"CFBundleIdentifier\")\n    .and_then(|v| v.as_string())\n    .ok_or_else(|| {\n      deno_core::anyhow::anyhow!(\n        \"helper plist {} has no CFBundleIdentifier\",\n        plist_path.display()\n      )\n    })?;\n  // Extract the suffix from the last `helper` segment onward. Falls back\n  // to a bare `helper` if the existing id doesn't contain that token\n  // (defensive — every laufey helper plist has it today).\n  let suffix = existing\n    .find(\"helper\")\n    .map(|i| &existing[i..])\n    .unwrap_or(\"helper\");\n  let new_id = format!(\"{main_bundle_id}.{suffix}\");\n  dict.insert(\n    \"CFBundleIdentifier\".to_string(),\n    plist::Value::String(new_id),\n  );\n  // Write XML format for stability and human-diffability. Helper plists\n  // are tiny so we don't gain anything by switching to binary plist","sourceCodeStart":2508,"sourceCodeEnd":2544,"githubUrl":"https://github.com/denoland/deno/blob/89f33cbef296a2b287f323d42de54c871fa69c77/cli/tools/desktop.rs#L2508-L2544","documentation":"Error \"helper plist {} has no CFBundleIdentifier\" thrown in denoland/deno.","triggerScenarios":"Thrown at cli/tools/desktop.rs:2526 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":[],"exampleFix":null,"handlingStrategy":null,"validationCode":null,"typeGuard":null,"tryCatchPattern":null,"preventionTips":[],"tags":[],"backgroundTag":null,"analyzedSha":"89f33cbef296a2b287f323d42de54c871fa69c77","analyzedAt":"2026-08-16T07:54:21.310Z","schemaVersion":2},"datasetVersion":"2026-08-16T08:17:34.114Z"}