build-dmg

Installation
SKILL.md

Non-negotiable rules:

  1. Detect project/workspace, scheme, and team ID before building — never guess signing identity.
  2. If multiple schemes exist, ask the user which one to build.
  3. Do not auto-create or overwrite ExportOptions.plist without explicit approval — wrong export options produce unsigned or wrong-distribution builds.
  4. Use the helper script (helpers/build-dmg.sh) from the project root. Do not inline xcodebuild commands.
  5. If xcodegen is detected (project.yml present), run xcodegen generate before building.
  6. Report the built DMG path, app version, and signing status clearly.

build-dmg

Inputs

  • $request: Optional project, workspace, scheme, or signing hint

Goal

Produce a DMG build by:

  • resolving the right Xcode target inputs
  • running the bundled helper script from the project root
  • reporting the resulting DMG path and any packaging blockers

Step 0: Detect the packaging inputs

Read the repo and resolve:

  • app name
  • scheme
  • project or workspace path
  • ExportOptions.plist location if it exists
  • VERSION file if present
  • whether project.yml indicates xcodegen
  • team ID or signing hints if already present

If a required input is ambiguous, ask before building.

Success criteria: The build configuration is explicit before the helper runs.

Step 1: Confirm helper and working directory

The helper script lives next to this skill at:

  • helpers/build-dmg.sh

Run it from the project root so it can use the current repository as the build context.

Success criteria: The correct helper path and project root are established.

Step 2: Build with explicit environment

Provide the required environment variables such as:

  • APP_NAME
  • SCHEME

Add optional variables only when the project actually needs them:

  • PROJECT
  • WORKSPACE
  • INFO_PLIST
  • EXPORT_OPTIONS
  • TEAM_ID
  • VERSION_FILE
  • USE_XCODEGEN
  • DMG_BACKGROUND

Success criteria: The helper has all required inputs and only the needed optional ones.

Step 3: Handle success or failure cleanly

On success, report:

  • DMG output path
  • app version and build number if available
  • whether the VERSION file was changed

On failure:

  • summarize the real error
  • surface the relevant xcodebuild or export failure lines
  • identify whether the blocker is signing, scheme selection, export options, or build failure

Success criteria: The user gets either a usable artifact path or a clear blocker summary.

Guardrails

  • Do not run this skill proactively.
  • Do not assume .claude-local helper paths; use the helper inside this skill directory.
  • Do not auto-create or overwrite export options without approval.
  • Do not hide signing failures behind generic "build failed" summaries.

Output Contract

Report:

  1. resolved app/project/workspace/scheme inputs
  2. whether the helper ran successfully
  3. DMG path on success
  4. version/build info if available
  5. exact blocker category on failure
Related skills
Installs
45
Repository
ulpi-io/skills
First Seen
Mar 20, 2026