Antigravity-awesome-skills macos-spm-app-packaging
Scaffold, build, sign, and package SwiftPM macOS apps without Xcode projects.
install
source · Clone the upstream repo
git clone https://github.com/sickn33/antigravity-awesome-skills
Claude Code · Install into ~/.claude/skills/
T=$(mktemp -d) && git clone --depth=1 https://github.com/sickn33/antigravity-awesome-skills "$T" && mkdir -p ~/.claude/skills && cp -r "$T/plugins/antigravity-awesome-skills/skills/macos-spm-app-packaging" ~/.claude/skills/sickn33-antigravity-awesome-skills-macos-spm-app-packaging-b02997 && rm -rf "$T"
manifest:
plugins/antigravity-awesome-skills/skills/macos-spm-app-packaging/SKILL.mdsafety · automated scan (low risk)
This is a pattern-based risk scan, not a security review. Our crawler flagged:
- references .env files
Always read a skill's source content before installing. Patterns alone don't mean the skill is malicious — but they warrant attention.
source content
macOS SwiftPM App Packaging (No Xcode)
Overview
Bootstrap a complete SwiftPM macOS app folder, then build, package, and run it without Xcode. Use
assets/templates/bootstrap/ for the starter layout and references/packaging.md + references/release.md for packaging and release details.
When to Use
- When the user needs a SwiftPM-based macOS app without relying on an Xcode project.
- When you need packaging, signing, notarization, or appcast guidance for a SwiftPM app.
Two-Step Workflow
-
Bootstrap the project folder
- Copy
into a new repo.assets/templates/bootstrap/ - Rename
inMyApp
,Package.swift
, andSources/MyApp/
.version.env - Customize
,APP_NAME
, and versions.BUNDLE_ID
- Copy
-
Build, package, and run the bootstrapped app
- Copy scripts from
into your repo (for example,assets/templates/
).Scripts/ - Build/tests:
andswift build
.swift test - Package:
.Scripts/package_app.sh - Run:
(preferred) orScripts/compile_and_run.sh
.Scripts/launch.sh - Release (optional):
andScripts/sign-and-notarize.sh
.Scripts/make_appcast.sh - Tag + GitHub release (optional): create a git tag, upload the zip/appcast to the GitHub release, and publish.
- Copy scripts from
Minimum End-to-End Example
Shortest path from bootstrap to a running app:
# 1. Copy and rename the skeleton cp -R assets/templates/bootstrap/ ~/Projects/MyApp cd ~/Projects/MyApp sed -i '' 's/MyApp/HelloApp/g' Package.swift version.env # 2. Copy scripts cp assets/templates/package_app.sh Scripts/ cp assets/templates/compile_and_run.sh Scripts/ chmod +x Scripts/*.sh # 3. Build and launch swift build Scripts/compile_and_run.sh
Validation Checkpoints
Run these after key steps to catch failures early before proceeding to the next stage.
After packaging (
):Scripts/package_app.sh
# Confirm .app bundle structure is intact ls -R build/HelloApp.app/Contents # Check that the binary is present and executable file build/HelloApp.app/Contents/MacOS/HelloApp
After signing (
or ad-hoc dev signing):Scripts/sign-and-notarize.sh
# Inspect signature and entitlements codesign -dv --verbose=4 build/HelloApp.app # Verify the bundle passes Gatekeeper checks locally spctl --assess --type execute --verbose build/HelloApp.app
After notarization and stapling:
# Confirm the staple ticket is attached stapler validate build/HelloApp.app # Re-run Gatekeeper to confirm notarization is recognised spctl --assess --type execute --verbose build/HelloApp.app
Common Notarization Failures
| Symptom | Likely Cause | Recovery |
|---|---|---|
| Duplicate submission for same version | Bump in and repackage. |
| Entitlements in file don't match provisioning | Audit entitlements against Apple's allowed set; remove unsupported keys. |
| Missing flag in invocation | Edit to add to all calls. |
| Notarization hangs / no status email | network or credential issue | Run to check status; re-export App Store Connect API key if expired. |
fails after successful notarization | Ticket not yet propagated | Wait ~60 s, then re-run . |
Templates
: Build binaries, create the .app bundle, copy resources, sign.assets/templates/package_app.sh
: Dev loop to kill running app, package, launch.assets/templates/compile_and_run.sh
: Generate .icns from an Icon Composer file (requires Xcode install).assets/templates/build_icon.sh
: Notarize, staple, and zip a release build.assets/templates/sign-and-notarize.sh
: Generate Sparkle appcast entries for updates.assets/templates/make_appcast.sh
: Create a stable dev code-signing identity.assets/templates/setup_dev_signing.sh
: Simple launcher for a packaged .app.assets/templates/launch.sh
: Example version file consumed by packaging scripts.assets/templates/version.env
: Minimal SwiftPM macOS app skeleton (Package.swift, Sources/, version.env).assets/templates/bootstrap/
Notes
- Keep entitlements and signing configuration explicit; edit the template scripts instead of reimplementing.
- Remove Sparkle steps if you do not use Sparkle for updates.
- Sparkle relies on the bundle build number (
), soCFBundleVersion
inBUILD_NUMBER
must increase for each update.version.env - For menu bar apps, set
when packaging to emitMENU_BAR_APP=1
in Info.plist.LSUIElement
Limitations
- Use this skill only when the task clearly matches the scope described above.
- Do not treat the output as a substitute for environment-specific validation, testing, or expert review.
- Stop and ask for clarification if required inputs, permissions, safety boundaries, or success criteria are missing.