Tüm açık kaynak paketler
PlatformSwift

AppClipsStudio

iOS App Clip'leri için invocation yönlendirme, boyut kontrolü ve website association.

5YıldızSon Sürüm: v2.0.0 · Güncellendi: 15 Ekim 2026
Platformlar:iOS 16macOS 13

Lisans: MIT

iOS App Clip'leri ve ait oldukları uygulamalar için bir Swift paketi. Sistemin açılışta verdiği invocation URL'sini doğrular ve App Store Connect'in App Clip experience'larına yaptığı gibi kendi ekranlarınıza yönlendirir, kişinin kodun bulunduğu yerde olduğunu doğrular ve App Clip'in verisini tam uygulamaya aktarır. appclipstudio komut satırı aracı; her variant'ın boyutunu, App Clip Code URL'lerini, apple-app-site-association dosyasını ve Associated Domains girdilerini yüklemeden önce kontrol eder. Bağımlılığı yok.

Özellikler

  • Apple'ın eşleştirme kuralıyla invocation yönlendirme: /table/:number ve /shop/* gibi pattern'ler, en özgül prefix kazanır, handler bir eşleşmeyi reddedebilir, kayıtlı prefix'in geri kalanını fallback karşılar
  • Güvenilmeyen girdi sınırlı kalır: yalnız https, en fazla 2.048 byte, 32 path bileşeni ve 64 query item, . ya da .. bileşeni yok, decode edilmiş host, path ve query'de kontrol ya da format karakteri yok
  • Variant başına boyut kontrolü: Apple'ın 10, 15 ve 100 MB limitleri; Xcode'un App Thinning Size Report.txt dosyasına iOS sürümü, deployment target ve invocation türüne göre uygulanır, CI için exit status döner
  • Website association: apple-app-site-association üretme ve doğrulama, appclips: ve applinks: entitlement girdilerini kontrol etme, App Clip Code URL'lerini Apple'ın kurallarına göre denetleme
  • HandoffStore, sürümlü, süresi dolabilen ve boyutu sınırlı bir Codable değeri paylaşılan App Group üzerinden tam uygulamaya aktarır
  • En fazla 500 m'lik doğrulanmış bir bölgeyle konum teyidi ve tam uygulama için App Store overlay'i
  • Ortak kaynaklardan derlenen örnek uygulama ve App Clip (Examples/CoffeeShop); CI onu derler, README örnekleri ondan alınır

Hızlı Başlangıç

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}

Kurulum

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`

Ekran Görüntüleri

Masa etiketi URL'siyle açılan örnek App Clip: Harbor Street, Masa 12, açık tema
Masa etiketi URL'siyle açılan örnek App Clip: Harbor Street, Masa 12, koyu tema
Poster URL'siyle açılan örnek App Clip: Flat White teklifi, açık tema
Poster URL'siyle açılan örnek App Clip: Flat White teklifi, koyu tema

Zaman Çizelgesi

  1. Repo, modüler bir App Clip framework'ü olarak açıldı

  2. v1.0.0 etiketlendi; doküman ve CI çalışması yapıldı, modül kaynakları ise placeholder olarak kaldı

  3. Sadeleştirme: modüller birkaç stub'dan oluşan tek bir target'ta toplandı

  4. Apple'ın App Clip dokümantasyonundan yola çıkılarak 2.0.0 olarak yeniden kuruldu: invocation yönlendirme, boyut kontrolü, website association ve appclipstudio CLI; 1.0.0 API'sinden hiçbir şey korunmadı

Bağlantılar

İlgili Yazı

Yazıyı Oku