目录

ShipSwift:AI原生SwiftUI组件库,MCP协议让Claude秒级构建iOS应用

“一条命令给 AI 所需的一切——生产级 SwiftUI 组件、全栈配方、以及构建真实应用所需的上下文。无需猜测。"——ShipSwift 官网宣言


一句话定位

ShipSwift 是一个AI-native SwiftUI 组件库,通过 MCP 协议让 AI 助手(如 Claude Code)能够按需获取生产级组件代码,说出"添加一个 shimmer 加载动画"或"构建一个认证流程”,AI 就能直接生成可运行的代码。

当前 GitHub ⭐ 1.4k,Swift 实现,MIT 许可证。


解决什么问题

AI 写 SwiftUI 的困境

让 GPT-4/Claude 写 SwiftUI 代码时,常见的问题是:

  1. 组件不完整:LLM 生成的是骨架代码,缺少边界情况处理和状态管理
  2. 第三方依赖不明:LLM 不知道该用什么现成库,自己造轮子容易出错
  3. API 版本问题:SwiftUI API 变化快,LLM 容易写出已废弃的 API
  4. 无法访问真实代码: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 — 动画组件

组件功能
SWShimmerskeleton 加载时的闪光扫过效果
SWTypewriterText打字机效果,逐字显示文本
SWShakingIcon摇晃图标(错误提示等)
SWGlowSweep发光扫过效果
SWLightSweep光线扫过动画
SWScanningOverlay扫描覆盖层(扫码等场景)
SWAnimatedMeshGradientSpriteKit 驱动的动态网格渐变
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散点图
SWActivityHeatmapGitHub 风格的贡献热力图

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 — 滚动 FAQ
  • SWRotatingQuote — 轮播引用
  • 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
SWTikTokTrackingTikTok 事件追踪TikTok Events API(iOS 客户端免费,Pro 含后端)

命名规范

ShipSwift 制定了严格的命名规范,保证组件在项目中不会与其他代码冲突:

类型命名

所有类型使用 SW 前缀:

struct SWShimmer<Content: View>
struct SWLineChart<CategoryType: Hashable & Plottable>
class SWAlertManager
class SWStoreManager

View 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 个标志点跟踪
  • VisionKitImageAnalysis 接口

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 是一个值得关注的工作流升级。


项目信息