すべてのオープンソースパッケージ
プラットフォーム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: Date
3}
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 ?? .now
23 
24 var body: some WidgetConfiguration {
25 StaticConfiguration(kind: "launch", provider: LaunchProvider()) { entry in
26 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.git

Swift 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]

スクリーンショット

このパッケージから描画した、天気、水分補給、フィットネス、カウントダウン、名言、習慣のウィジェット
同じ Home Screen ウィジェットのダークモード表示
統計の sparkline、進捗リング、折れ線グラフ、棒グラフのビュー
同じチャートビューのダークモード表示
Lock Screen のバッテリー、アクティビティリング、カウントダウン、天気、統計のウィジェット
同じ Lock Screen ウィジェットのダークモード表示

タイムライン

  1. リポジトリが公開されました

  2. v1.0.0 をタグ付け。このタグの manifest は読み込めず、このバージョンはビルドできません

  3. 約240行の単一の library ターゲットに簡素化。テストターゲットは依然としてコンパイルできませんでした

  4. 作り直されて 2.0.0 としてリリース (PR #28): 履歴から復元・修正したビュー、Swift 6 の manifest、Swift Testing のテスト、DocC、サンプルアプリ、CI

リンク

関連記事

記事を読む