macos-spm-app-packaging

🍎 无 Xcode 的 SwiftPM 应用构建套件

由活跃开发者 dimillian 维护的 macOS SwiftPM 应用打包工具,无需 Xcode 即可构建、签名、公证和发布原生 macOS 应用,适合追求轻量化工作流的开发者。

收藏
6.6k
安装
1.4k
版本
v1.0.0
CLS 安全性认证2026-06-04
点击查看完整报告 >

使用说明

核心用法

macos-spm-app-packaging 提供了一套完整的无 Xcode 工作流,帮助开发者使用 Swift Package Manager 构建原生 macOS 应用。使用流程分为两步:首先通过 bootstrap// 模板生成项目脚手架,自定义应用名称、Bundle ID 和版本信息;随后利用脚本工具链完成构建、打包、签名和发布。关键脚本包括 package_app.sh(构建 .app 并签名)、sign-and-notarize.sh(Apple 公证与装订)、make_appcast.sh(生成 Sparkle 更新配置)以及 compile_and_run.sh(开发热重载)。

显著优点

该 Skill 的最大价值在于摆脱 Xcode 项目文件的束缚,纯文本配置更易于版本控制和团队协作。脚本采用 set -euo pipefail 严格错误处理,敏感信息通过环境变量注入而非硬编码,并配备 trap 机制自动清理临时文件。完整覆盖 macOS 应用发布全链路——从开发证书设置、多架构构建到生产签名、公证和自动更新,特别适合菜单栏工具类应用的快速迭代。

潜在缺点与局限性

首先,环境依赖较重:需要 Xcode Command Line Tools、有效的 Apple Developer 证书以及 Sparkle 框架(如启用自动更新)。其次,脚本对输入参数的验证相对基础,复杂场景下可能需要手动调整。图标生成脚本 build_icon.sh 仍依赖完整 Xcode 安装,并非完全独立。此外,Sparkle 集成要求严格递增的构建号,对自动化 CI/CD 流程的版本管理提出额外要求。

适合的目标群体

  • 偏好命令行工作流的 macOS 独立开发者
  • 需要快速原型验证的菜单栏/状态栏应用开发者
  • 追求 CI/CD 自动化的团队,希望将 macOS 应用构建集成到非 Xcode 流水线
  • 开源项目维护者,需要标准化的跨平台构建脚本

使用风险

证书与密钥管理是首要关注点:生产环境的 Developer ID 证书和 App Store Connect API 密钥若泄露将导致严重安全后果,建议在专用 CI 环境或密钥管理服务中存储。脚本涉及 codesignsecurity import 等高危操作,首次使用建议在隔离环境测试。pkill 进程终止操作基于名称匹配而非 PID,极端情况下可能影响同名进程。临时文件虽自动清理,但 /tmp` 目录的权限配置仍需确保正确。

安全解读

核心用法

macos-spm-app-packaging 是一套完整的 无 Xcode 工程 macOS 应用构建方案,适合追求纯 SwiftPM 工作流的开发者。核心能力覆盖:

1. 项目脚手架:通过 bootstrap/ 模板快速生成标准 SwiftPM 目录结构(Package.swift、Sources/、version.env)
2. 构建与打包package_app.sh 自动完成 swift build、.app 组装、资源复制、代码签名

3. 开发调试compile_and_run.sh 实现「杀死旧进程→打包→启动」的闭环

4. 发布流程sign-and-notarize.sh + make_appcast.sh 完成 Apple 公证与 Sparkle 自动更新

关键配置通过环境变量注入(APP_NAME、BUNDLE_ID、签名身份等),避免敏感信息硬编码。

显著优点

  • 零 Xcode 依赖:纯 SwiftPM + shell 脚本,CI/CD 友好
  • 完整生命周期:从脚手架到公证发布,一站式覆盖
  • 安全设计:密钥从环境变量读取,符合最小权限原则
  • Sparkle 原生支持:自动生成 appcast.xml,版本号自动递增机制
  • 菜单栏应用适配:通过 MENU_BAR_APP=1 自动注入 LSUIElement

潜在局限

  • T3 来源可信度:个人开发者维护(dimillian),无企业背书
  • 环境配置门槛高:需预先配置开发者证书、App Store Connect API 密钥、Sparkle 私钥等
  • Icon 生成依赖 Xcodebuild_icon.sh 需本地 Xcode 安装
  • 进程管理风险pkill 终止同名进程,多用户场景需谨慎

适合人群

  • 拒绝 Xcode 工程文件的 Swift 开发者
  • 需要自动化构建流水线的独立开发者/小团队
  • 使用 Sparkle 框架的 macOS 应用开发者

常规风险

  • 签名/公证失败需排查证书有效期、网络连通性
  • 临时文件清理依赖 trap 机制,极端情况可能残留
  • 无输入校验,不当环境变量可能导致路径遍历

macos-spm-app-packaging 内容

assets文件夹
templates文件夹
bootstrap文件夹
Sources文件夹
MyApp文件夹
references文件夹
手动下载zip · 12.4 kB
main.swifttext/plain
请选择文件