Cambiar tema

Usar macos-app-skills para crear apps Mac nativas con agentes de IA

Easton editorial illustration: Mac-style laptop with one native desktop app window and familiar traffic-light window controls, AI cursor placing a SwiftUI-style interface component into the app window

"La README de fayazara/macos-app-skills es la fuente principal para el propósito, los módulos, la instalación, los requisitos y los límites de release, auto-update y notch-ui."

¿Cómo pudo Claude Code producir una app macOS de más de 20 000 líneas cuando menos de 1 000 se escribieron a mano? En un informe práctico de 2025, Indragie enumera cinco trampas: confusión con Swift Concurrency, mezcla de frameworks antiguos y nuevos, API obsoletas, mala gestión de ventanas y pasos de release omitidos. En resumen, el agente desconoce los patrones nativos de macOS y trata el Mac como una página web.

macos-app-skills aborda ese problema. Convierte conocimiento disperso de WWDC, documentación incompleta y patrones macOS fáciles de aplicar mal en 7 módulos: build, patrones nativos, ajustes, actualización, interfaz del notch, release e instalación. Cada módulo explica qué es, qué resuelve, uso típico, comandos, flujo, límites y FAQ. Así el agente parte de una base más fiable. A continuación se detallan los módulos y se comparan con fireworks-macapp-creator y claude-swift-skills.

Instalación: cargar el paquete en el agente

El comando es breve:

npx skills add fayazara/macos-app-skills -g -y

-g instala globalmente y -y omite la confirmación interactiva. Reinicia el agente para que cargue el contenido. En una prueba con OpenCode, después del reinicio aparecieron build, macos-patterns, settings-ui, auto-update, notch-ui y release.

Prepara macOS 14+, Xcode 15+ y Swift 5.9+. Las funciones de macOS 26 como Liquid Glass requieren Xcode 26 beta. Las versiones anteriores recurren a alternativas sin bloquear el flujo básico.

La carga cambia entre agentes. Claude Code puede exigir una ruta configurada manualmente. OpenCode reconoce ~/.config/opencode/skills/ y Cursor espera .agents/skills/ en la raíz. Pide la lista de skills o pregunta por el módulo build para verificarlo.

Los fallos frecuentes son red, permisos y versiones. Si los assets de GitHub cargan despacio, usa un proxy o reintenta. Si el caché de npx no permite escritura, es más seguro copiar el directorio que usar sudo npx. El proyecto se creó en mayo de 2026, así que nombres y cantidad de skills pueden cambiar: revisa la README actual.

Desglose de submódulos

SubmóduloQué esQué resuelveUso típicoComandoFlujoLímiteFAQ
InstalaciónInstalación global mediante npxHace disponibles los skills macOSInstalar con un comandonpx skills add fayazara/macos-app-skills -g -yEjecutar → reiniciar → verificarDepende de npx y red¿Red lenta? Proxy o reintento
RequisitosVersiones de macOS/Xcode/SwiftVerifica el entornoComprobar las tres versionessw_vers, xcodebuild -version, swift --versionVerificar → comparar con README → actualizarmacOS 14+, Xcode 15+, Swift 5.9+¿Versiones anteriores? Degradación parcial
Verificación de cargaConfirma que el agente cargó los skillsValida la instalaciónListar skills o probar una referenciaSin comando estándarReiniciar → consultar → probarRuta distinta por agente¿No carga? Revisar la ruta
Fallos comunesRed, permisos y versiónAcelera el diagnósticoProxy, permisos, versionesSin comando fijoRed → permisos → versiónGitHub puede ser lento¿sudo? Mejor copia manual

Módulo build: compilar un proyecto macOS desde la terminal

build usa xcodebuild para compilar cualquier proyecto Xcode de macOS sin operar la interfaz gráfica.

Cubre detección de .xcodeproj o .xcworkspace, schemes, rutas de toolchains beta y errores como schemes ausentes o firmas. Los agentes suelen adivinar parámetros o usar un scheme iOS como si fuera macOS.

Carga el skill antes del build. Explica cómo encontrar proyecto y scheme y cómo tratar los errores. Ejemplo:

xcodebuild -project MyApp.xcodeproj -scheme MyApp -configuration Release

Con workspace:

xcodebuild -workspace MyApp.xcworkspace -scheme MyApp -configuration Release clean build

El flujo es proyecto → scheme → build → inspección → corrección. El agente encuentra el archivo, enumera schemes, elige uno y sigue la lista de solución de problemas.

Solo cubre proyectos Xcode, no proyectos SwiftPM puros. En ese caso hay que abrirlos como proyecto Xcode o usar otro skill. Las toolchains beta también requieren manejo especial porque sus rutas y versiones no son uniformes.

Un scheme ausente puede no estar compartido o tener otro nombre. Ejecuta xcodebuild -list antes de adivinar. Para una beta, suele usarse /Applications/Xcode-beta.app y un parámetro -destination.

Desglose de submódulos

SubmóduloQué esQué resuelveUso típicoComandoFlujoLímiteFAQ
DefiniciónBuild macOS con xcodebuildCompila sin GUICargar antes del buildVer bloques de códigoDetectar proyecto → scheme → compilar → corregirSolo Xcode¿SwiftPM? Convertir a proyecto Xcode
Problemas cubiertosProyecto, scheme, toolchain y erroresEl agente desconoce parámetrosPrimero proyecto, luego schemeAntes xcodebuild -listEjecutar → inspeccionar → corregirRutas beta no estándar¿Beta? Indicar ruta y destination
Uso típicoSkill antes del buildEvita parámetros adivinadosCargar build antes de compilarSin comando fijoCargar → build → corregirEl skill es conocimiento¿No carga? Revisar configuración
ComandoComandos xcodebuild estándarDa ejemplos ejecutablesPasar a xcodebuildxcodebuild -project MyApp.xcodeproj -scheme MyAppEjecutar → esperar → analizarParámetros correctos¿Scheme? Usar -list
FlujoBuild → revisar → corregirCiclo estándarSeguir los pasosSin comando fijoDetectar → build → inspeccionar → corregirNo omitir pasos¿Falló? Usar la checklist
LímiteAlcance XcodeDefine el usoSolo proyectos XcodeNingunoNingunoSin SwiftPM directo¿Por qué? Basado en xcodebuild
FAQScheme ausente y betaResponde dudas habitualesListar schemes y ruta betaxcodebuild -listRevisar → consultar → especificarConfiguración adicional¿Es beta? Ver versión y ruta

Módulo macos-patterns: no tratar el Mac como la web

macos-patterns es el núcleo. Expone patrones nativos para evitar que el agente traslade interfaces web al Mac. Barra de menús, jerarquía de ventanas y geometría son específicas de macOS.

Los problemas concretos incluyen:

  1. Tres enfoques de barra de menús: MenuBarExtra en SwiftUI, NSStatusItem en AppKit y NSPopover para ventanas emergentes.
  2. Política de activación: icono del Dock, LSUIElement y NSApplication.setActivationPolicy() para que una app de fondo no se comporte como una app principal.
  3. NSPanel frente a NSWindow: los paneles flotantes y las ventanas normales tienen comportamientos distintos.
  4. Niveles y collection behaviors: CGShieldingWindowLevel, NSWindow.Level y collectionBehavior controlan capas, pantalla completa y varias pantallas.
  5. Geometría: frame frente a visibleFrame, eje Y invertido y pantallas múltiples; macOS parte de la esquina inferior izquierda.
  6. Tres niveles de atajos: SwiftUI .keyboardShortcut(), monitor NSEvent y hotkey Carbon del sistema.
  7. Otros patrones: NSOpenPanel, NSPasteboard, NSDragging, NavigationSplitView + inspector, LaunchAgent, QLPreviewPanel, NSWorkspace, ScreenCaptureKit y UserDefaults/@AppStorage.

Carga el skill antes de pedir UI macOS. Para una app de barra de menús, el agente podrá recomendar MenuBarExtra en casos SwiftUI simples y reservar NSStatusItem para AppKit.

La lista se organiza por recomendación, alternativa, caso, código y límite. Estos son tres ejemplos comunes.

Comparación de apps de barra de menús

EnfoqueRecomendación o alternativaCasoEjemplo de códigoLímite
MenuBarExtraRecomendadoSwiftUI nativo, casos simplesMenuBarExtra("App", systemImage: "app") { ContentView() }macOS 13+
NSStatusItemAlternativaPersonalización compleja o AppKitNSStatusBar.system.statusItem(withLength: NSStatusItem.squareLength)Ciclo de vida manual
NSPopoverComplementoVentana emergente al hacer clicNSPopover() + NSStatusItemDebe combinarse con NSStatusItem

Comparación de políticas de activación

PolíticaEscenario recomendadoConfiguraciónCódigoLímite
NSApplication.ActivationPolicy.regularApp principal con icono en DockNo definir LSUIElementPredeterminadoCaso habitual
NSApplication.ActivationPolicy.accessoryApp de fondo sin Dock, con barra de menúsLSUIElement=true en Info.plistNSApplication.shared.setActivationPolicy(.accessory)Barra visible
NSApplication.ActivationPolicy.prohibitedProceso de fondo sin UIConfiguración LaunchAgentNSApplication.shared.setActivationPolicy(.prohibited)Sin Dock ni barra

Comparación de niveles de ventana

TipoValorCasoCódigoLímite
NSWindow.Level.normal0Ventana normalPredeterminadoMás común
NSWindow.Level.floating3Ventana flotante, como Inspectorwindow.level = .floatingNo cubre agresivamente otras apps
CGShieldingWindowLevelMáximoCapa de protección, como notch-uiwindow.level = CGShieldingWindowLevel()Cubre todo; usar con cuidado

El módulo solo cubre macOS. Para patrones multiplataforma, usa por ejemplo el módulo correspondiente de claude-swift-skills.

NSApplication.setActivationPolicy() cambia el icono del Dock. NSScreen.screens enumera pantallas y visibleFrame excluye Dock y barra. El eje Y debe convertirse entre el origen inferior de macOS y el superior de la web.

Módulo settings-ui: ajustes y Liquid Glass

settings-ui cubre una ventana de ajustes macOS correcta y Liquid Glass en macOS 26. Evita que el agente use una escena SwiftUI Window que no sigue las convenciones.

Window no admite fullSizeContentView, por lo que el fondo transparente no se extiende. Una configuración incorrecta de Liquid Glass tampoco se parece a Ajustes del sistema.

La combinación es NSWindowController + .fullSizeContentView + NavigationSplitView. El skill incluye un archivo Swift. Flujo:

  1. Crear NSWindowController
  2. Configurar fullSizeContentView
  3. Añadir NavigationSplitView con sidebar y detalle
  4. Establecer fondo transparente
  5. Integrar Liquid Glass en macOS 26+

Ejemplo:

// SettingsWindowController.swift
class SettingsWindowController: NSWindowController {
    convenience init() {
        let window = NSWindow(
            contentRect: NSRect(x: 0, y: 0, width: 600, height: 400),
            styleMask: [.titled, .closable, .resizable],
            backing: .buffered,
            defer: false
        )
        window.title = "Settings"
        window.fullSizeContentView = true // Ajuste clave
        self.init(window: window)
    }
}

Liquid Glass requiere macOS 26+. Los sistemas anteriores usan materiales normales. Si no se necesita, basta un WindowGroup estándar.

El skill ofrece la comprobación de versión para elegir material y el ejemplo completo de sidebar con NavigationSplitView.

Módulo auto-update: integrar Sparkle

auto-update corrige una trampa de tiempo. SPUStandardUpdaterController debe crearse antes de que termine applicationDidFinishLaunching; de lo contrario, las comprobaciones pueden fallar.

El uso típico combina singleton UpdaterManager, Info.plist y una clave EdDSA. Se incluye UpdaterManager.swift.

Flujo:

  1. Añadir Sparkle como dependencia SPM
  2. Crear el singleton UpdaterManager
  3. Configurar SUFeedURL y SUPublicEDKey en Info.plist
  4. Generar la clave EdDSA con sign_update
  5. Añadir controles en ajustes y barra de menús

Ejemplo:

// UpdaterManager.swift
class UpdaterManager {
    static let shared = UpdaterManager()
    private var updaterController: SPUStandardUpdaterController!

    init() {
        // Crear antes de que applicationDidFinishLaunching termine
        updaterController = SPUStandardUpdaterController(
            startingUpdater: true,
            updaterDelegate: nil,
            userDriverDelegate: nil
        )
    }
}

Sirve para distribución fuera de Mac App Store. En la tienda no se usa Sparkle; el Store gestiona las actualizaciones.

La clave se genera con sign_update. Para probar, inicia un servidor de feed local o ejecuta una comprobación tras una release.

Módulo notch-ui: interfaz Dynamic Island alrededor del notch

notch-ui crea una interfaz flotante similar a Dynamic Island en la muesca del MacBook, no una ventana normal colocada arriba.

Los puntos difíciles son un NSPanel borderless con CGShieldingWindowLevel, el cálculo de posición y las curvas Bézier cóncavas. Sin ellos, posición y forma no coinciden.

El patrón es borderless NSPanel + CGShieldingWindowLevel + NotchShape. Se incluyen NotchWindow.swift y NotchShape.swift.

Flujo:

  1. Crear un NSPanel borderless
  2. Definir CGShieldingWindowLevel
  3. Implementar NotchShape con curvas cóncavas
  4. Añadir animación de resorte
  5. Ofrecer modo pill para Macs sin notch

Ejemplo:

// NotchWindow.swift
class NotchWindow: NSPanel {
    init() {
        super.init(
            contentRect: calculateNotchFrame(),
            styleMask: [.borderless],
            backing: .buffered,
            defer: false
        )
        level = CGShieldingWindowLevel() // Ajuste clave
        backgroundColor = .clear
    }
}

La solución es para MacBook con notch. iMac y Mac mini usan el modo pill; si no hace falta, omite el módulo.

En equipos sin notch, la pill aparece centrada arriba. La posición se calcula con tamaño de pantalla y ubicación del notch.

Módulo release: pipeline completo de publicación

release organiza la distribución macOS. Es fácil omitir más de 8 pasos: versión, Archive, Notarize, Export, DMG, firma EdDSA, appcast.xml y GitHub release.

El uso típico añade release.json y ejecuta la CLI de Go incluida.

Flujo en 8 pasos:

  1. Versión: actualizar Info.plist y archivos del proyecto
  2. Archive: empaquetar con xcodebuild archive
  3. Notarize: enviar con notarytool
  4. Export: exportar .app con xcodebuild -exportArchive
  5. DMG: crear el instalador con create-dmg
  6. Firma EdDSA: firmar con Sparkle sign_update
  7. appcast.xml: actualizar el feed con generate_appcast
  8. GitHub release: publicar con gh release create

Ejemplo:

# Go CLI
go run github.com/fayazara/macos-app-skills/release/cli@latest

O ejecuta cada paso:

# Archive
xcodebuild -project MyApp.xcodeproj -scheme MyApp archive

# Notarize
notarytool submit MyApp.zip --apple-id YOUR_ID --password YOUR_PASSWORD --team-id YOUR_TEAM

# Export
xcodebuild -exportArchive -archivePath MyApp.xcarchive -exportOptionsPlist ExportOptions.plist -exportPath .

# DMG
create-dmg --volname "MyApp" --volicon "icon.icns" MyApp.app MyApp.dmg

# EdDSA signing
sign_update MyApp.dmg

# appcast.xml
generate_appcast MyApp.app

# GitHub release
gh release create v1.0.0 MyApp.dmg --title "v1.0.0" --notes "Release notes"

Se requieren GitHub CLI y una clave EdDSA de Sparkle. Sin gh, se detiene el último paso; sin clave, la firma.

La plantilla de release.json incluye versión, credenciales de notarización y ajustes DMG. Ante errores, lee el registro de notarytool.

Desglose de submódulos

SubmóduloQué esQué resuelveUso típicoComandoFlujoLímiteFAQ
DefiniciónPipeline completo + CLI GoAutomatiza 8 pasos de releaserelease.json + CLIgo run github.com/fayazara/macos-app-skills/release/cli@latestVersión → Archive → Notarize → Export → DMG → EdDSA → appcast → GitHubGitHub CLI + clave Sparkle¿Sin CLI? Publicación manual
Problemas cubiertosMás de 8 pasos frágilesUn paso omitido rompe la releaseCargar skill y seguir flujoSin comando únicoEjecutar → revisar → corregirNo omitir pasos¿Fallo? Usar checklist
Uso típicorelease.json + CLIImplementación estándarAñadir release.json y ejecutarVer bloqueConfigurar → ejecutar → revisarConfiguración manual¿release.json? Usar plantilla
CLIHerramienta GoAutomatiza publicaciónUn comandogo run github.com/.../cli@latestEjecutar → esperar → revisarEntorno Go¿Sin Go? Pasos manuales
Flujo8 pasosChecklist claraManual o CLISin comando fijobump → Archive → Notarize → Export → DMG → EdDSA → appcast → GitHubMantener orden¿Cambiar orden? No recomendado
LímiteGitHub CLI + clave SparkleRequisitosComprobar gh y clavegh --version, sign_update --helpComprobar → configurar → ejecutarHerramienta ausente bloquea¿Clave? Usar sign_update
FAQrelease.json y notarizaciónRespuestas comunesPlantilla y solución de erroresSin comando fijoLeer → configurar → corregirPuede fallar varias veces¿Fallo? Leer registro notarytool

Tres proyectos comparables: ¿cuál elegir?

Además de macos-app-skills, conviene comparar fireworks-macapp-creator y claude-swift-skills. Sus objetivos son distintos.

Diferencias de enfoque

ProyectoEnfoqueMódulosCaracterísticas
macos-app-skillsMódulos funcionales centrados en macOS7 módulosbuild, macos-patterns, settings-ui, auto-update, notch-ui, release, instalación
fireworks-macapp-creatorArquitectura + estilos + scaffold8 estilosScaffold Python, SwiftUI-first + AppKit, UI por estilos
claude-swift-skillsSwift completo + iOS/macOS + WWDC 202522 skillsSwift 6.2, SwiftUI, SwiftData, Liquid Glass, Foundation Models, multiplataforma

Comparación de casos de uso

Escenariomacos-app-skillsfireworks-macapp-creatorclaude-swift-skills
Solo macOSRecomendadoAdecuadoDemasiado amplio; incluye iOS
macOS + iOSSin iOSSin iOSRecomendado
Pipeline de releaseMódulo releaseExiste, menos detalladomacos-distribution
Sistema de estilosNinguno8 estilosNinguno
Funciones WWDC 2025Parcial, como Liquid GlassParcialCobertura amplia
Herramienta scaffoldNingunaPython genera proyectos SwiftPMNinguna

Recomendación

La decisión depende del alcance de plataformas, funciones y cobertura WWDC.

Solo macOS: elige macos-app-skills o fireworks-macapp-creator. El primero para release y notch; el segundo para scaffold y estilos.

macOS + iOS: elige claude-swift-skills. Es el único con iOS, Foundation Models, validación de stack, herramientas PRD y 22 skills.

Funciones WWDC 2025: elige claude-swift-skills por su cobertura de Liquid Glass, Swift 6.2 y SwiftData reciente.

En la práctica, macos-app-skills es el más ligero y rápido. fireworks-macapp-creator aporta el scaffold más completo para proyectos nuevos. claude-swift-skills es el más amplio para multiplataforma y WWDC. Mandan los requisitos del proyecto.

Conclusión

macos-app-skills es una caja de herramientas práctica para agentes que crean apps macOS nativas. Sus 7 módulos — build, macos-patterns, settings-ui, auto-update, notch-ui, release e instalación — reducen errores del primer intento. Aun así, hay que revisar Xcode, Swift, firma, notarización, claves Sparkle y el modelo. Un skill no garantiza una release automática.

Regla rápida: macos-app-skills o fireworks para solo macOS; claude-swift-skills para macOS + iOS; macos-app-skills para release; fireworks para estilos; claude-swift-skills para WWDC 2025.

El siguiente paso es ejecutar npx skills add fayazara/macos-app-skills -g -y, comparar alternativas con las necesidades del proyecto y revisar las prácticas de AGENTS.md. Si aparece un problema, empieza por la FAQ y la checklist del skill.

Conectar macos-app-skills a un agente de programación con IA

El recorrido mínimo desde la instalación y el reinicio hasta la verificación, la elección del módulo y la solución de errores.

⏱️ Estimated time: 20 min

  1. 1

    Step 1: Comprobar el entorno local

    Confirma macOS 14+, Xcode 15+ y Swift 5.9+ con `sw_vers`, `xcodebuild -version` y `swift --version`.
  2. 2

    Step 2: Instalar el paquete de skills

    Ejecuta `npx skills add fayazara/macos-app-skills -g -y` o copia manualmente el directorio de skills del repositorio en la ruta del agente.
  3. 3

    Step 3: Reiniciar y verificar la carga

    Reinicia el agente, pídele que enumere los skills cargados o pregunta directamente por build, macos-patterns y settings-ui.
  4. 4

    Step 4: Cargar el módulo adecuado

    Usa build para compilar, macos-patterns para barra de menús, ventanas y atajos, y los módulos dedicados para ajustes, actualización, notch y release.
  5. 5

    Step 5: Mantener una revisión humana

    Revisa manualmente firma, notarización, claves Sparkle, permisos, scripts de terceros y acciones de release. El skill aporta patrones y listas, no asume el riesgo.

FAQ

¿Qué es macos-app-skills?
Es un conjunto de skills de fayazara/macos-app-skills para Claude Code, Cursor, OpenCode y otros agentes. Organiza build, patrones de ventanas, ajustes, actualización automática, interfaz del notch y release de apps macOS nativas.
¿Por qué los agentes fallan al crear apps macOS?
Suelen aplicar supuestos de la web o iOS y confunden MenuBarExtra, NSStatusItem, NSPanel, NSWindow, políticas de activación, coordenadas y firma de release. El paquete entrega esos patrones antes de generar código.
¿Con qué módulo conviene empezar?
En un proyecto Xcode existente, empieza por build y consigue que `xcodebuild` funcione. Para barra de menús, ventanas, atajos, varias pantallas o archivos, usa macos-patterns. Para distribuir, sigue con auto-update y release.
¿Puede sustituir Xcode y la revisión de publicación?
No. Sigue dependiendo de Xcode, Swift, certificados, claves Sparkle, GitHub CLI, configuración de notarización y calidad del modelo. Revisa los artefactos y permisos antes de publicar.
¿Qué debo revisar antes de instalar un skill de terceros?
Puede incluir scripts, comandos, referencias e instrucciones de comportamiento. Lee README y SKILL.md, comprueba qué ejecutará o leerá el agente y compáralo con los límites de seguridad del proyecto.

12 min de lectura · Publicado el: 17 jul 2026 · Actualizado el: 21 ago 2026

Comentarios

Inicia sesión con GitHub para dejar un comentario

Easton BlogEaston Blog