Todos los paquetes de código abierto
PlataformaSwift

AppClipsStudio

Invocation routing, comprobación de tamaño y website association para iOS App Clips.

5EstrellasÚltima versión: v2.0.0 · Actualizado: 15 de octubre de 2026
Plataformas:iOS 16macOS 13

Licencia: MIT

Un paquete Swift para App Clips de iOS y las apps a las que pertenecen. Valida la invocation URL que el sistema pasa al inicio y la enruta a tus pantallas igual que App Store Connect la enruta a las App Clip experiences, confirma que la persona está donde está el código y entrega los datos del App Clip a la app completa. Su herramienta de línea de comandos appclipstudio comprueba el tamaño de cada variant, las App Clip Code URLs, el archivo apple-app-site-association y las entradas de Associated Domains antes de subir. Sin dependencias.

Características

  • Invocation routing con la regla de coincidencia de Apple: patterns como /table/:number y /shop/*, gana el prefix más específico, los handlers pueden rechazar una coincidencia y un fallback cubre el resto de un prefix registrado
  • La entrada no confiable queda acotada: solo https, como máximo 2.048 bytes, 32 componentes de path y 64 query items, sin componentes . ni .., y sin caracteres de control o formato en el host, path o query decodificados
  • Comprobación de tamaño por variant: los límites de 10, 15 y 100 MB de Apple aplicados al App Thinning Size Report.txt de Xcode según la versión de iOS, el deployment target y el tipo de invocation, con un exit status para CI
  • Website association: genera y valida apple-app-site-association, comprueba las entradas de entitlement appclips: y applinks:, y revisa las App Clip Code URLs contra las reglas de Apple
  • HandoffStore pasa un valor Codable versionado, con expiración y tamaño limitado a la app completa a través del App Group compartido
  • Confirmación de ubicación con una región validada de como máximo 500 m, y el App Store overlay para la app completa
  • Una app de ejemplo y App Clip (Examples/CoffeeShop) construidos a partir de fuentes compartidas; CI la compila y los samples del README se copian de ella

Inicio rápido

swift
1import AppClipsStudio
2import SwiftUI
3 
4enum Screen: Equatable {
5 case welcome
6 case table(Int)
7}
8 
9struct ContentView: View {
10 @State private var screen = Screen.welcome
11 
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 in
21 screen = (try? Self.router.route(invocation)) ?? .welcome
22 }
23 }
24 
25 static let router: InvocationRouter<Screen> = {
26 var router = InvocationRouter<Screen>()
27 try? router.add("/table/:number") { match in
28 match.integer("number").map(Screen.table)
29 }
30 router.fallback { _ in .welcome }
31 return router
32 }()
33}

Instalación

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.git

Command-line tool

sh
1git clone https://github.com/muhittincamdali/AppClipsStudio.git
2cd AppClipsStudio
3swift build -c release
4cp .build/release/appclipstudio /usr/local/bin/ # or run it with `swift run appclipstudio`

Capturas de pantalla

App Clip de ejemplo abierto desde una URL de etiqueta de mesa: Mesa 12 en Harbor Street, modo claro
App Clip de ejemplo abierto desde una URL de etiqueta de mesa: Mesa 12 en Harbor Street, modo oscuro
App Clip de ejemplo abierto desde una URL de póster: oferta de Flat White, modo claro
App Clip de ejemplo abierto desde una URL de póster: oferta de Flat White, modo oscuro

Cronología

  1. Repositorio abierto como un framework de App Clip modular

  2. v1.0.0 etiquetada; trabajo de documentación y CI, mientras las fuentes de los módulos siguieron siendo placeholders

  3. Limpieza: los módulos se consolidaron en un único target de unos pocos stubs

  4. Reconstruido como 2.0.0 a partir de la documentación de App Clip de Apple: invocation routing, comprobación de tamaño, website association y el CLI appclipstudio; no se conservó ninguna API de 1.0.0

Enlaces

Artículo relacionado

Leer el artículo (English)