プラットフォームSwift
iOS-Widget-Development-Kit
WidgetKit のウィジェット、チャート、タイムライン、App Intents、Live Activities 向けの SwiftUI ビューとヘルパー
27スター数最新リリース: v2.0.0更新日: 2026年10月15日
対応プラットフォーム:iOS 17macOS 14
ライセンス: MIT
WidgetDevelopmentKit は、iOS アプリ向けにウィジェットを開発する開発者のための Swift パッケージです。Home Screen、Lock Screen、StandBy ウィジェット用の作成済み SwiftUI ビュー、ウィジェットのサイズに合わせたチャートビュー、タイムラインとアプリがウィジェットと共有するデータのためのヘルパー、ウィジェットボタン用の App Intents、Live Activities 用の ActivityKit の属性とビューを含みます。widget extension 自体は自分で書く必要がありますが、このパッケージはすべてのウィジェットが必要とするビューと日付、ストレージ、リトライのロジックを提供します。サードパーティへの依存はありません。
機能
- 天気、統計、ファイナンス、カレンダー、カウントダウン、時計、フィットネスリング、習慣トラッカー、やること、水分補給といった Home Screen テンプレート。加えて、ウィジェットサイズに合わせた9つの Swift Charts ビュー
- 15種類の Lock Screen accessory ビュー(circular、rectangular、inline)と7種類の StandBy ビュー
- タイムラインヘルパー: entry の日付、カレンダー演算を使うリロードポリシー、App Group 経由で共有するデータ用の有効期限付き snapshot store
- インタラクティブウィジェット: 5つの App Intents と、それらを実行するボタンを持つ8つのビュー
- Live Activities: Lock Screen と compact Dynamic Island のビューを持つ10種類の ActivityAttributes 型、および順序が崩れた更新を拒否するステートマシン
- 一時的なエラー(408、5xx、タイムアウト、オフライン)のみをリトライし、widget extension 内では早期に失敗するデータローダー
- 日付、数値、リトライのロジックは NaN、ゼロの目標値、夏時間の日を含めて Swift Testing のテストでカバーされています。あるテストは README のコードブロックをコンパイル済みのコードと同期させています
クイックスタート
swift
1struct LaunchEntry: TimelineEntry {2 let date: Date3}4 5struct LaunchProvider: TimelineProvider {6 func placeholder(in context: Context) -> LaunchEntry {7 LaunchEntry(date: .now)8 }9 10 func getSnapshot(in context: Context, completion: @escaping (LaunchEntry) -> Void) {11 completion(LaunchEntry(date: .now))12 }13 14 func getTimeline(in context: Context, completion: @escaping (Timeline<LaunchEntry>) -> Void) {15 // One entry per hour for the next six hours, then WidgetKit asks again.16 let entries = TimelineSchedule.dates(from: .now, every: 60 * 60, count: 6).map(LaunchEntry.init)17 completion(Timeline(entries: entries, policy: .atEnd))18 }19}20 21struct LaunchCountdownWidget: Widget {22 let launchDay = DateComponents(calendar: .current, year: 2027, month: 1, day: 1).date ?? .now23 24 var body: some WidgetConfiguration {25 StaticConfiguration(kind: "launch", provider: LaunchProvider()) { entry in26 CountdownWidget(title: "Launch", targetDate: launchDay, referenceDate: entry.date)27 }28 .configurationDisplayName("Countdown")29 .supportedFamilies([.systemSmall])30 }31}インストール
Xcode (File › Add Package Dependencies…)
text
1https://github.com/muhittincamdali/iOS-Widget-Development-Kit.gitSwift Package Manager
swift
1dependencies: [2 .package(url: "https://github.com/muhittincamdali/iOS-Widget-Development-Kit.git", from: "2.0.0")3],4targets: [5 .target(name: "YourApp", dependencies: [6 .product(name: "WidgetDevelopmentKit", package: "iOS-Widget-Development-Kit")7 ])8]スクリーンショット






タイムライン
リポジトリが公開されました
v1.0.0 をタグ付け。このタグの manifest は読み込めず、このバージョンはビルドできません
約240行の単一の library ターゲットに簡素化。テストターゲットは依然としてコンパイルできませんでした
作り直されて 2.0.0 としてリリース (PR #28): 履歴から復元・修正したビュー、Swift 6 の manifest、Swift Testing のテスト、DocC、サンプルアプリ、CI