平台Swift
AppClipsStudio
iOS App Clips 的调用路由、体积检查和网站关联
5星标数最新版本: v2.0.0 · 更新时间: 2026年10月15日
支持平台:iOS 16macOS 13
许可证: MIT
一个为 iOS App Clips 及其所属 app 服务的 Swift package。它校验系统启动时传入的调用 URL,并像 App Store Connect 把流量路由到 App Clip 体验那样,把它路由到你的界面,确认用户所在位置与 App Clip Code 所在位置相符,并把 App Clip 的数据交给完整版 app。它的 appclipstudio 命令行工具会在上传前检查每个变体的体积、App Clip Code URL、apple-app-site-association 文件和 Associated Domains 条目。无依赖。
功能特性
- 按照 Apple 的匹配规则进行调用路由:支持 /table/:number 和 /shop/* 这样的模式,最具体的前缀优先匹配,handler 可以拒绝某次匹配,fallback 负责覆盖已注册前缀的其余部分
- 不可信输入受到边界限制:仅允许 https,最多 2,048 字节、32 个路径分段和 64 个查询项,不允许 . 或 .. 分段,解码后的 host、path 或 query 中不允许出现控制字符或格式字符
- 按变体做体积检查:依据 iOS 版本、部署目标和调用类型,把 Apple 的 10 MB、15 MB 和 100 MB 限制套用到 Xcode 的 App Thinning Size Report.txt 上,并为 CI 提供退出状态
- 网站关联:生成并校验 apple-app-site-association,检查 appclips: 和 applinks: entitlement 条目,并按 Apple 的规则检查 App Clip Code URL
- HandoffStore 通过共享的 App Group,把一个带版本号、会过期、有体积限制的 Codable 值传递给完整版 app
- 位置确认支持最多 500 米的校验区域,并为完整版 app 提供 App Store overlay
- 示例 app 和 App Clip(Examples/CoffeeShop)由共享源码构建;CI 会构建它,README 中的示例代码也是从中复制而来
快速开始
swift
1import AppClipsStudio2import SwiftUI3 4enum Screen: Equatable {5 case welcome6 case table(Int)7}8 9struct ContentView: View {10 @State private var screen = Screen.welcome11 12 var body: some View {13 Group {14 switch screen {15 case .welcome: Text("Scan a table tag")16 case .table(let number): Text("Table \(number)")17 }18 }19 .font(.largeTitle)20 .onInvocation { invocation in21 screen = (try? Self.router.route(invocation)) ?? .welcome22 }23 }24 25 static let router: InvocationRouter<Screen> = {26 var router = InvocationRouter<Screen>()27 try? router.add("/table/:number") { match in28 match.integer("number").map(Screen.table)29 }30 router.fallback { _ in .welcome }31 return router32 }()33}安装
Swift Package Manager
swift
1dependencies: [2 .package(url: "https://github.com/muhittincamdali/AppClipsStudio.git", from: "2.0.0")3],4targets: [5 .target(name: "YourAppFeature", dependencies: [6 .product(name: "AppClipsStudio", package: "AppClipsStudio")7 ])8]Xcode
text
1https://github.com/muhittincamdali/AppClipsStudio.gitCommand-line tool
sh
1git clone https://github.com/muhittincamdali/AppClipsStudio.git2cd AppClipsStudio3swift build -c release4cp .build/release/appclipstudio /usr/local/bin/ # or run it with `swift run appclipstudio`截图




时间线
仓库开放,作为一个模块化的 App Clip framework
打上 v1.0.0 标签;期间做了文档和 CI 工作,但模块源码仍是占位代码
清理:模块被合并成一个只有少量 stub 的单一 target
依据 Apple 的 App Clip 文档重建为 2.0.0:调用路由、体积检查、网站关联和 appclipstudio CLI;未保留任何 1.0.0 API