¿Qué hace macos-spm-app-packaging?
Andamia, compila y empaqueta aplicaciones macOS basadas en SwiftPM sin un proyecto de Xcode. Útil cuando necesitas una estructura de aplicación macOS desde cero, targets/recursos de SwiftPM, un script personalizado de ensamblado de paquete .app, o pasos de firma/notarización/appcast fuera de Xcode.
Descripción general
Esta skill te permite crear aplicaciones macOS completas usando solo swift build y scripts de shell, sin abrir Xcode. Es perfecta para:
- Proyectos nuevos donde quieres mantener un control total sobre la estructura del paquete
.app. - Automatización en CI/CD donde Xcode no está disponible.
- Distribución fuera de la App Store con firma de código y notarización.
- Integración con Sparkle para actualizaciones automáticas.
Requisitos
- macOS 14 o superior
- Swift 5.9 o superior
- Herramientas de línea de comandos de Xcode instaladas (
xcode-select --install) - (Opcional) Cuenta de desarrollador de Apple para firma y notarización
Instalación
Clona este repositorio o copia el contenido en tu proyecto:
git clone https://github.com/dimillian/macos-spm-app-packaging.git
cd macos-spm-app-packaging
Uso
Inicializar un nuevo proyecto
./scripts/scaffold.sh MiApp
Esto crea la siguiente estructura:
MiApp/
├── Package.swift
├── Sources/
│ └── MiApp/
│ ├── main.swift
│ └── Resources/
│ └── Info.plist
├── Resources/
│ └── AppIcon.icns
└── scripts/
├── build.sh
├── package.sh
└── sign.sh
Compilar
cd MiApp
swift build -c release
Empaquetar como .app
./scripts/package.sh
Esto genera MiApp.app en el directorio build/.
Firmar y notarizar
./scripts/sign.sh --identity "Developer ID Application: Tu Nombre"
./scripts/notarize.sh --bundle-id com.tudominio.miapp --asc-provider TuProveedor
Generar appcast (Sparkle)
./scripts/generate_appcast.sh --ed-key ./dsa_priv.pem
Configuración
Variables de entorno
| Variable | Descripción |
|---|---|
APP_NAME | Nombre de la aplicación |
BUNDLE_ID | Identificador único del paquete |
TEAM_ID | ID del equipo de Apple Developer |
SIGNING_IDENTITY | Identidad de firma de código |
ASC_PROVIDER | Proveedor de App Store Connect |
Package.swift
Edita Package.swift para agregar dependencias o targets adicionales:
// swift-tools-version: 5.9
import PackageDescription
let package = Package(
name: "MiApp",
platforms: [
.macOS(.v14)
],
targets: [
.executableTarget(
name: "MiApp",
resources: [
.process("Resources")
]
)
]
)
Licencia
MIT License - ver el archivo LICENSE.
Contribuciones
Las contribuciones son bienvenidas. Por favor abre un issue o pull request.