← ClaudeAtlas

macos-ci-recipeslisted

Copy-in CI recipes for adding macOS build/test/lint to a project on the ios profile — either a macOS-only app with no iOS target, or a hybrid app that also ships a separate macOS scheme sharing code with an iOS target. Use when scaffolding CI for a new macOS app, or adding a macOS target/scheme to an existing iOS project. The lacquer does not auto-sync macOS CI (only two fleet projects have needed it so far — not enough signal to justify conditional asset sync yet); these are reference recipes you copy into your project's own workflow files, adapted from two real, working implementations (a macOS-only app and an iOS+macOS hybrid).
patrickserrano/lacquer · ★ 1 · AI & Automation · score 67
Install: claude install-skill patrickserrano/lacquer
# macOS CI Recipes Two shapes, depending on whether an iOS target coexists in the same project. Both reuse the lacquer's existing iOS CI conventions (dedicated runner, `CODE_SIGNING_ALLOWED=NO` for non-release jobs, the exit-65 spurious-failure handling, the error-tail grep on real failures) — nothing here is a new pattern, just the iOS pattern applied to `-destination 'platform=macOS'`. **Why the dedicated runner, not a GitHub-hosted macOS one:** these jobs (and any other Xcode-touching job you add) must run on `runs-on: [self-hosted, macOS, ARM64, dedicated]` — never `macos-latest` or a stray label like `mac-mini`. Release jobs hold App Store Connect keys and unlock the login keychain, so signing must only ever happen on infrastructure you control; the pinned Xcode + simulator runtime lives only on the dedicated runner (GitHub-hosted macOS images drift); and GitHub-hosted macOS minutes are billed while the dedicated runner isn't. A pure script/REST-call job with no Xcode dependency uses `ubuntu-latest` instead. ## Which recipe - **No iOS target at all** (a macOS-only app on the `ios` profile): use "macOS-only app" below. It replaces the synced `ios-ci.yml` outright — `exclude` it in `.lacquer.toml` and add this file to your project's `root/` tree instead (the lacquer already supports excluding a synced file; this is that mechanism, just pointed at CI instead of release/testflight). - **An iOS target plus a separate macOS scheme sharing code** (e.g. a shared `C