{"record":{"id":"41c78a784bd69c53","repo":"nikivdev/code","slug":"release-signing-store-is-only-supported-on-macos","errorCode":null,"errorMessage":"release signing store is only supported on macOS","messagePattern":"release signing store is only supported on macOS","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"src/release_signing.rs","lineNumber":129,"sourceCode":"    let text = String::from_utf8_lossy(&output.stdout);\n    let mut out = Vec::new();\n    for line in text.lines() {\n        // Example:\n        //  1) <hash> \"Developer ID Application: Name (TEAMID)\"\n        let Some(quoted) = line.split('\"').nth(1) else {\n            continue;\n        };\n        let name = quoted.trim();\n        if !name.is_empty() {\n            out.push(name.to_string());\n        }\n    }\n    Ok(out)\n}\n\nfn store(opts: ReleaseSigningStoreOpts) -> Result<()> {\n    if !cfg!(target_os = \"macos\") {\n        bail!(\"release signing store is only supported on macOS\");\n    }\n\n    let p12_path = opts\n        .p12\n        .clone()\n        .context(\"--p12 is required (path to exported .p12)\")?;\n    let p12_bytes = fs::read(&p12_path)\n        .with_context(|| format!(\"failed to read p12 file at {}\", p12_path.display()))?;\n\n    let identity = opts.identity.clone().context(\"--identity is required\")?;\n    let password = opts\n        .p12_password\n        .clone()\n        .context(\"--p12-password is required\")?;\n\n    if !identity.starts_with(\"Developer ID Application:\") {\n        eprintln!(\n            \"Warning: identity does not look like a Developer ID Application certificate: {}\",","sourceCodeStart":111,"sourceCodeEnd":147,"githubUrl":"https://github.com/nikivdev/code/blob/a747e741ae92c09071d0ae946ab48488adcff1ce/src/release_signing.rs#L111-L147","documentation":"The `f release signing store` subcommand imports a .p12 identity into the macOS keychain, which only makes sense on macOS. It uses a compile-time cfg!(target_os = \"macos\") check and bails at runtime on any other OS.","triggerScenarios":"Calling `f release signing store ...` (via `run`) on Linux or Windows.","commonSituations":"Developers on Linux trying to configure iOS/macOS release signing; CI runners on Ubuntu executing a macOS-oriented setup script.","solutions":["Run the store command on a macOS machine","On Linux/Windows, supply signing material another way (e.g. set env vars / secrets directly with `f env set` or `gh secret set`)","Gate the step in CI with `if: runner.os == 'macOS'`"],"exampleFix":"// before (linux CI)\n- run: f release signing store --p12 cert.p12\n// after\n- run: f release signing store --p12 cert.p12\n  if: runner.os == 'macOS'","handlingStrategy":"validation","validationCode":"if (process.platform !== \"darwin\") {\n  throw new Error(\"f release signing store requires macOS\");\n}","typeGuard":"const isMacOS = (): boolean => process.platform === \"darwin\";","tryCatchPattern":"try {\n  run([\"f\", \"release\", \"signing\", \"store\", ...args]);\n} catch (e) {\n  if (String(e).includes(\"only supported on macOS\")) {\n    console.error(\"Run this step on a macOS runner.\");\n  } else throw e;\n}","preventionTips":["Gate macOS-only steps in CI with an OS condition (e.g. runs-on: macos-latest)","Detect the platform in setup scripts before invoking signing commands","Use platform-appropriate secret provisioning on Linux/Windows"],"tags":["macos","platform","codesigning"],"backgroundTag":"unsupported-platform","analyzedSha":"a747e741ae92c09071d0ae946ab48488adcff1ce","analyzedAt":"2026-09-01T22:43:55.719Z","contentChangedAt":null,"schemaVersion":2},"datasetVersion":"2026-09-08T10:18:20.063Z"}