ShipSwift:AI原生SwiftUI组件库,MCP协议让Claude秒级构建iOS应用
posts posts 2026-05-11T23:00:00+08:00深度解析signerlabs/ShipSwift:1.4k星的AI-native SwiftUI组件库,通过MCP协议让AI助手获取production-ready组件代码,支持Animation、Chart、Auth、Paywall等完整模块,开源MIT协议。技术笔记SwiftUI, iOS, AI, MCP, 组件库, Swift, StoreKit, Charts“一条命令给 AI 所需的一切——生产级 SwiftUI 组件、全栈配方、以及构建真实应用所需的上下文。无需猜测。"——ShipSwift 官网宣言
一句话定位
ShipSwift 是一个AI-native SwiftUI 组件库,通过 MCP 协议让 AI 助手(如 Claude Code)能够按需获取生产级组件代码,说出"添加一个 shimmer 加载动画"或"构建一个认证流程”,AI 就能直接生成可运行的代码。
当前 GitHub ⭐ 1.4k,Swift 实现,MIT 许可证。
解决什么问题
AI 写 SwiftUI 的困境
让 GPT-4/Claude 写 SwiftUI 代码时,常见的问题是:
- 组件不完整:LLM 生成的是骨架代码,缺少边界情况处理和状态管理
- 第三方依赖不明:LLM 不知道该用什么现成库,自己造轮子容易出错
- API 版本问题:SwiftUI API 变化快,LLM 容易写出已废弃的 API
- 无法访问真实代码:LLM 的知识有截止日期,最新的 Apple 平台 API 它可能不知道
ShipSwift 的解决思路:不只提供组件列表,而是提供 AI 能直接使用的完整代码 + 上下文。
核心架构
三种安装方式
| 方式 | 说明 | 适用场景 |
|---|---|---|
| MCP Skills + Recipe Server(推荐) | 安装 skill 后连接 MCP 服务器,AI 可按需获取 Pro recipes | 需要完整后端配方时 |
| 本地 Skills | 安装 skill 后 AI 直接读取本地源码 | 离线环境,或只需要免费组件 |
| 文件复制 | 克隆仓库后直接拷贝组件文件到项目 | 简单使用,不想装任何依赖 |
推荐方式:MCP Skills + Recipe Server
# Step 1: 安装 ShipSwift Skills
npx skills add signerlabs/shipswift-skills
# Step 2: 连接 Recipe Server(MCP)
claude mcp add --transport http shipswift https://api.shipswift.app/mcp
# Step 3: 对着 AI 说人话
# "Add a shimmer loading animation"
# "Build an authentication flow with Cognito"
# "Show me all chart components"本地 Skills(无需 MCP)
npx skills add signerlabs/ShipSwift
# AI 直接读取仓库中的组件源码依赖规则:金字塔结构
ShipSwift 的组件之间有严格的依赖层级:
SWModule(业务模块)
↑ 依赖
SWComponent(UI组件)
↑ ↑ ↑
依赖 依赖 依赖
SWUtil SWUtil SWUtil
SWAnimation SWChart
↑ ↑
└────────────┘
↑
SWUtil(工具层,无任何依赖)这个分层设计确保了组件的可复用性:底层的 SWUtil 不依赖任何其他模块,可以被任意组件引用;上层的 SWModule 依赖下层组件,构成业务模块。
组件体系
SWAnimation — 动画组件
| 组件 | 功能 |
|---|---|
SWShimmer | skeleton 加载时的闪光扫过效果 |
SWTypewriterText | 打字机效果,逐字显示文本 |
SWShakingIcon | 摇晃图标(错误提示等) |
SWGlowSweep | 发光扫过效果 |
SWLightSweep | 光线扫过动画 |
SWScanningOverlay | 扫描覆盖层(扫码等场景) |
SWAnimatedMeshGradient | SpriteKit 驱动的动态网格渐变 |
SWOrbitingLogos | 轨道旋转 Logo 动画 |
SWBeforeAfterSlider | 图片对比滑块(修图前后对比) |
SWShimmer 实现解析
struct SWShimmer<Content: View>: View {
@State private var animate = false
var duration: Double = 2.0
var delay: Double = 1.0
@ViewBuilder let content: () -> Content
var body: some View {
content()
.overlay {
GeometryReader { geo in
let bandWidth = geo.size.width * 0.5
// 白色光带从左扫到右
gradient
.frame(width: bandWidth)
.offset(x: animate ? geo.size.width + bandWidth : -bandWidth * 1.5)
.animation(
.linear(duration: duration)
.delay(delay)
.repeatForever(autoreverses: false),
value: animate
)
}
.clipped()
}
.task {
try? await Task.sleep(nanoseconds: 100_000_000)
animate = true
}
}
}使用方式极其简洁:
// 默认 timing(2s 扫过,1s 暂停)
SWShimmer {
Text("Upgrade Now")
.padding()
.background(.blue)
.clipShape(.capsule)
}
// 自定义 duration 和 delay
SWShimmer(duration: 1.5, delay: 2.0) {
myView
}SWChart — 图表组件
基于 Apple Swift Charts 框架构建:
| 组件 | 功能 |
|---|---|
SWLineChart | 多系列折线图,支持平滑/阶梯插值 |
SWBarChart | 柱状图 |
SWAreaChart | 面积图 |
SWDonutChart | 甜甜圈图 |
SWRingChart | 环形图 |
SWRadarChart | 雷达图 |
SWScatterChart | 散点图 |
SWActivityHeatmap | GitHub 风格的贡献热力图 |
SWLineChart 实现解析
SWLineChart 是一个泛型组件,类型参数 CategoryType 必须满足 Hashable & Plottable:
struct SWLineChart<CategoryType: Hashable & Plottable>: View {
struct DataPoint: Identifiable {
let id: UUID
let date: Date
let value: Double
let category: CategoryType
}
struct ReferenceLine {
let value: Double
let label: String?
let color: Color
let style: StrokeStyle
}
// 丰富的配置选项
var referenceLines: [ReferenceLine] = []
var interpolationMethod: InterpolationMethod = .linear
var showPointMarkers: Bool = false
var yDomain: ClosedRange<Double>?
var scrollableDaysBack: Int = 30
var scrollableDaysForward: Int = 7
var visibleDays: Int = 7
var chartHeight: CGFloat = 200
// ...
}使用示例:
let data: [SWLineChart<String>.DataPoint] = [
.init(date: Date(), value: 72, category: "Revenue"),
.init(date: Date(), value: 45, category: "Cost"),
]
let colors: [String: Color] = ["Revenue": .blue, "Cost": .red]
SWLineChart(
dataPoints: data,
colorMapping: colors,
referenceLines: [.init(value: 60, label: "Target", color: .orange)],
interpolationMethod: .catmullRom,
showPointMarkers: true,
yDomain: 0...100,
visibleDays: 14,
chartHeight: 220,
title: "Financials"
)亮点设计:
- 动画入场:遮罩矩形从左到右展开(easeOut 1.2s),Y 值从 0 渐变到目标值,坐标轴保持稳定
- 水平滚动:支持配置滚动范围和可见天数
- 参考线:
RuleMark实现水平参考线,支持标签和虚线样式 - 泛型类别:支持任意
Hashable类型作为系列标识
SWComponent — UI 组件
分为三类:
Display(展示组件)
SWFloatingLabels— 浮动标签SWScrollingFAQ— 滚动 FAQSWRotatingQuote— 轮播引用SWBulletPointText— 项目符号文本SWGradientDivider— 渐变分割线SWLabel/SWMarkdownText— 文本组件SWOnboardingView— 引导页模板SWOrderView— 订单视图SWRootTabView— 根 Tab 视图SWVideoPlayer— 视频播放器
Feedback(反馈组件)
SWAlert— 警告弹窗SWLoading— 加载状态SWThinkingIndicator— AI “思考中"指示器
Input(输入组件)
SWTabButton— Tab 按钮SWStepper— 步进器SWAddSheet— 添加表单SWSearchBar— 搜索栏
SWModule — 多文件业务模块
这是 ShipSwift 最实用的部分——提供完整的业务功能模块,而非单个组件:
| 模块 | 功能 | 技术栈 |
|---|---|---|
SWAuth | 用户认证 | Amplify SDK (Cognito)、社交登录、邮箱/手机号 |
SWCamera | 相机拍摄 | AVFoundation、Vision 人脸标志点跟踪 |
SWPaywall | 订阅付费墙 | StoreKit 2(iOS 客户端免费,Pro 含后端) |
SWChat | 聊天视图 | 消息列表、语音识别(VolcEngine ASR) |
SWSetting | 设置页面模板 | 多语言切换、分享、法律链接 |
SWSubjectLifting | 背景移除 | VisionKit ImageAnalysis |
SWTikTokTracking | TikTok 事件追踪 | TikTok Events API(iOS 客户端免费,Pro 含后端) |
命名规范
ShipSwift 制定了严格的命名规范,保证组件在项目中不会与其他代码冲突:
类型命名
所有类型使用 SW 前缀:
struct SWShimmer<Content: View>
struct SWLineChart<CategoryType: Hashable & Plottable>
class SWAlertManager
class SWStoreManagerView Modifier 命名
视图修饰符使用小写 .sw 前缀:
.view.swAlert()
.view.swPageLoading()
.background.swPrimary()这种双前缀设计(SW for types, .sw for modifiers)确保了命名空间隔离。
商业模式:Free + Pro
ShipSwift 采用 MIT 开源 + Pro 付费 的混合模式:
| Free(开源) | Pro Recipe | |
|---|---|---|
| iOS 客户端代码 | ✅ 完整源码 | ✅ 增强版 |
| 后端实现 | ❌ | ✅ Hono 路由、数据库 schema、Webhooks |
| 集成指南 | ❌ | ✅ 端到端检查清单 |
| 合规模板 | ❌ | ✅ 隐私清单、App Store 标签 |
| 已知陷阱 | ❌ | ✅ 每个 recipe 10+ 条实战经验 |
Pro recipes 覆盖的场景:
- SWPaywall:完整的后端订阅验证、合规指南(ATT 弹窗、订阅协议)
- SWTikTokTracking:后端事件接收、合规配置
- 即将推出:Push Notifications、Analytics Dashboard
这种模式的精明之处:开源 iOS 客户端让开发者放心(代码可审查、无锁定),Pro 卖的是"不踩坑"的工程经验。
技术栈与实现亮点
Swift Charts 实战
SWLineChart 是学习 Swift Charts 的优秀参考。它展示了:
LineMark/PointMark/RuleMark的组合使用chartForegroundStyleScale实现类别到颜色的映射chartScrollableAxes实现水平滚动- 泛型设计在 Charts 中的应用
- 入场动画通过 Y 值乘以
animationProgress实现
SpriteKit 集成
SWAnimatedMeshGradient 将 SpriteKit 的 SKScene 嵌入 SwiftUI,利用 SpriteKit 的粒子系统和着色器实现复杂的网格渐变动画。
Vision + AVFoundation
SWCamera 集成了:
AVCaptureSession相机捕获VNDetectFaceLandmarksRequest人脸 76 个标志点跟踪VisionKit的ImageAnalysis接口
StoreKit 2
SWPaywall 使用最新的 StoreKit 2 API(Swift Concurrency + AsyncStream),而非已废弃的旧 API。
适用场景
✅ 强项场景:
- AI 辅助 iOS 开发:让 Claude/Gemini 按需获取组件代码
- 快速原型:从 Shimmer 到 LineChart 到 Paywall,开源组件覆盖常见需求
- AI-native 开发工作流:MCP 协议让 AI 有上下文,能生成正确的代码
- 学习 Swift Charts/SpriteKit/Vision:参考 ShipSwift 的生产级实现
❌ 局限:
- 主要面向 iOS 18+(SwiftUI Charts 等需要较新 API)
- Pro recipes 需要付费(但开源代码质量本身已经很高)
- 组件偏向展示层,复杂业务逻辑仍需自己实现
总结
ShipSwift 解决的是 AI 时代 iOS 开发的一个核心问题:AI 生成的代码不可信、不完整、难验证。通过 MCP 协议和精心设计的组件库,它让 AI 真正成为"能产出生产级代码"的开发者助手,而非只会生成骨架代码的玩具。
它的开源策略也很聪明:MIT 协议保证了代码的可审计性和无锁定,Pro recipes 卖的是"工程经验"而非"代码本身”。对于想用 AI 加速 iOS 开发的团队,ShipSwift 是一个值得关注的工作流升级。
项目信息
- GitHub:signerlabs/ShipSwift ⭐ 1.4k
- 语言:Swift 5.0+
- 平台:iOS 18.0+
- 框架:SwiftUI、Swift Charts、StoreKit 2、AVFoundation、Vision、SpriteKit
- 许可证:MIT(iOS 客户端代码)
- MCP Server:glama.ai MCP servers
- 官网:shipswift.app