Skip to content

Commit

Permalink
feat: Widget 틀 추가
Browse files Browse the repository at this point in the history
  • Loading branch information
FirstDo authored and Siwon-L committed Oct 16, 2024
1 parent db4f4cf commit af9b450
Show file tree
Hide file tree
Showing 13 changed files with 224 additions and 5 deletions.
18 changes: 17 additions & 1 deletion Projects/App/Project.swift
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,21 @@ let project = Project(
]
),
targets: [
.init(
name: "WidgetExtension",
platform: .iOS,
product: .appExtension,
bundleId: "com.yapp.moneymong.WidgetExtension",
infoPlist: .extendingDefault(with: [
"CFBundleDisplayName": "$(PRODUCT_NAME)",
"NSExtension": [
"NSExtensionPointIdentifier": "com.apple.widgetkit-extension",
],
]),
sources: "WidgetExtension/Sources/**",
resources: "WidgetExtension/Resources/**",
dependencies: []
),
Target(
name: "Moneymong",
platform: .iOS,
Expand Down Expand Up @@ -63,7 +78,8 @@ let project = Project(
entitlements: "Resources/App.entitlements",
dependencies: [
.project(target: "SignFeature", path: .relativeToRoot("Projects/Feature/Sign")),
.project(target: "MainFeature", path: .relativeToRoot("Projects/Feature/Main"))
.project(target: "MainFeature", path: .relativeToRoot("Projects/Feature/Main")),
.target(name: "WidgetExtension")
],
settings: .settings(
base: .init()
Expand Down
29 changes: 29 additions & 0 deletions Projects/App/WidgetExtension/Resources/WidgetExtension-Info.plist
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>CFBundleDevelopmentRegion</key>
<string>$(DEVELOPMENT_LANGUAGE)</string>
<key>CFBundleDisplayName</key>
<string>$(PRODUCT_NAME)</string>
<key>CFBundleExecutable</key>
<string>$(EXECUTABLE_NAME)</string>
<key>CFBundleIdentifier</key>
<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>
<key>CFBundleInfoDictionaryVersion</key>
<string>6.0</string>
<key>CFBundleName</key>
<string>$(PRODUCT_NAME)</string>
<key>CFBundlePackageType</key>
<string>XPC!</string>
<key>CFBundleShortVersionString</key>
<string>1.0</string>
<key>CFBundleVersion</key>
<string>1</string>
<key>NSExtension</key>
<dict>
<key>NSExtensionPointIdentifier</key>
<string>com.apple.widgetkit-extension</string>
</dict>
</dict>
</plist>
50 changes: 50 additions & 0 deletions Projects/App/WidgetExtension/Sources/MainWidget/MainWidget.swift
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
import WidgetKit
import SwiftUI

struct MainWidget: Widget {
let kind: String = "MainWidget"

var body: some WidgetConfiguration {
StaticConfiguration(kind: kind, provider: MainProvider()) { entry in
MainWidgetEntryView(entry: entry)
}
.supportedFamilies([.systemMedium])
.configurationDisplayName("My Widget")
.description("This is an example widget.")
}
}

struct MainWidgetEntryView: View {
var entry: MainProvider.Entry

var body: some View {
Text(entry.date, style: .time)
}
}

struct MainSimpleEntry: TimelineEntry {
let date: Date
}

struct MainProvider: TimelineProvider {
func placeholder(in context: Context) -> MainSimpleEntry {
MainSimpleEntry(date: Date())
}

func getSnapshot(in context: Context, completion: @escaping (MainSimpleEntry) -> ()) {
let entry = MainSimpleEntry(date: Date())
completion(entry)
}

func getTimeline(in context: Context, completion: @escaping (Timeline<MainSimpleEntry>) -> ()) {
var entries: [MainSimpleEntry] = []
let currentDate = Date()
for hourOffset in 0..<5 {
let entryDate = Calendar.current.date(byAdding: .hour, value: hourOffset, to: currentDate)!
let entry = MainSimpleEntry(date: entryDate)
entries.append(entry)
}
let timeline = Timeline(entries: entries, policy: .atEnd)
completion(timeline)
}
}
50 changes: 50 additions & 0 deletions Projects/App/WidgetExtension/Sources/OCRWidget/MyWidget.swift
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
import WidgetKit
import SwiftUI

struct OCRWidget: Widget {
let kind: String = "OCRWidget"

var body: some WidgetConfiguration {
StaticConfiguration(kind: kind, provider: OCRProvider()) { entry in
OCRWidgetEntryView(entry: entry)
}
.supportedFamilies([.systemSmall])
.configurationDisplayName("My Widget")
.description("This is an example widget.")
}
}

struct OCRWidgetEntryView: View {
var entry: OCRProvider.Entry

var body: some View {
Text(entry.date, style: .time)
}
}

struct OCRSimpleEntry: TimelineEntry {
let date: Date
}

struct OCRProvider: TimelineProvider {
func placeholder(in context: Context) -> OCRSimpleEntry {
OCRSimpleEntry(date: Date())
}

func getSnapshot(in context: Context, completion: @escaping (OCRSimpleEntry) -> ()) {
let entry = OCRSimpleEntry(date: Date())
completion(entry)
}

func getTimeline(in context: Context, completion: @escaping (Timeline<OCRSimpleEntry>) -> ()) {
var entries: [OCRSimpleEntry] = []
let currentDate = Date()
for hourOffset in 0..<5 {
let entryDate = Calendar.current.date(byAdding: .hour, value: hourOffset, to: currentDate)!
let entry = OCRSimpleEntry(date: entryDate)
entries.append(entry)
}
let timeline = Timeline(entries: entries, policy: .atEnd)
completion(timeline)
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
import WidgetKit
import SwiftUI

struct SecondWidget: Widget {
let kind: String = "SecondWidget"

var body: some WidgetConfiguration {
StaticConfiguration(kind: kind, provider: SecondProvider()) { entry in
SecondWidgetEntryView(entry: entry)
}
.supportedFamilies([.systemMedium])
.configurationDisplayName("My Widget")
.description("This is an example widget.")
}
}

struct SecondWidgetEntryView: View {
var entry: SecondProvider.Entry

var body: some View {
Text(entry.date, style: .time)
}
}

struct SecondSimpleEntry: TimelineEntry {
let date: Date
}

struct SecondProvider: TimelineProvider {
func placeholder(in context: Context) -> SecondSimpleEntry {
SecondSimpleEntry(date: Date())
}

func getSnapshot(in context: Context, completion: @escaping (SecondSimpleEntry) -> ()) {
let entry = SecondSimpleEntry(date: Date())
completion(entry)
}

func getTimeline(in context: Context, completion: @escaping (Timeline<SecondSimpleEntry>) -> ()) {
var entries: [SecondSimpleEntry] = []
let currentDate = Date()
for hourOffset in 0..<5 {
let entryDate = Calendar.current.date(byAdding: .hour, value: hourOffset, to: currentDate)!
let entry = SecondSimpleEntry(date: entryDate)
entries.append(entry)
}
let timeline = Timeline(entries: entries, policy: .atEnd)
completion(timeline)
}
}
12 changes: 12 additions & 0 deletions Projects/App/WidgetExtension/Sources/Widgets.swift
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
import SwiftUI
import WidgetKit

@main
struct Widgets: WidgetBundle {
@WidgetBundleBuilder
var body: some Widget {
MainWidget()
SecondWidget()
OCRWidget()
}
}
Binary file modified Tuist/Signing/Moneymong.Debug.mobileprovision
Binary file not shown.
Binary file modified Tuist/Signing/Moneymong.Release.mobileprovision
Binary file not shown.
2 changes: 1 addition & 1 deletion Tuist/Signing/debug.cer.encrypted
Original file line number Diff line number Diff line change
@@ -1 +1 @@
wtvqPge9ooeLYERwScYdvQ==-yAMoEQNWA23mFKNEnFulTU98B/v03Mg9IoNiGxvGiAXaLrdFqxOhovT0UCiNpHmss/6Ms+RaoVdKOz5HaH8cbgvw1DEjXnXPSPb/MENnlCXv7Gg1tTOy97HMrx3BZSeK7HfyAqWv8JcPU0d3MlHHMUO3kSoOsU8qhWiP1VRTQy7LYQosf+9kv2G+v4cCxmpDOfNy5j8ZJgFGViqOcYlUJdJWSwhqqesq7r/Pbc4m4zzjDefOooVr8WRfsoLTz0Q5LBPp7AsjAuF4WrAW+/70pyP4KhrDZOSYdFN7cChaLE5389/wXIot/DliTpurmGVWwj+o5HAEAzyohepjT0itClJU0wHHQxEHwE1D7d8PfnKgmv7oLsfG558brfWuCKQTRete1WKfLK6/jelztCO5Mb3W7qclMFcn40TNBqUEb6C6ZX5K8QGbcGBK0+bEspcaWOZK/s7yAbPe5cyMibKXRxHQNVvEacAe1DtUFcteh8/GmeZhNLZBo3W6kHOrlelFD9k9/r0h/7O4jQYNrJ8pm7+5/WCA4n584fGdPJeXnq7kPqSItGAAptRzJZb2uq8E1kZ9TASEC6MyzIzor3oMw7or55e41tov2OvpGMv5iHt1gsjnu7M+lyUvnuNTynCMxkXF1n591ilU+XaCpqnSigu1NXVVZJaH6Zwaf2B1g2HVNjMavwcuAnkuccBAjUqRmp208HupsTxXt1FX1zDwKSHjO/CTazhxHBWm+1VQ4f/nGZxLNwdQO96PHSV5s35jrhDbSsjzI1GGA+qHl9qoUuqGvEz2vP9AjbmJzHF8/Gxb8KmijeM4bHhy+EaxSXolM4YZyXwBmn8Z6FkohdnFinTJ8FjRQgl6VxcmYngo5KV52rwlsl+K+xuzzkPQBBxYwOhJWsm+78GjvOAqSDMZJOXiAqXY/NdJhulyw62pZke/eMI0sgnv0bCyP8mHcwQGvM0jwPgDQSOpSvuJJmuHkQlCsjP8O/fw0mMloTOaaZCTV30VYKU9PpwQo/Gs3Pacc2AFPZYdD+u8H53r2eBM5b03yNm5PFIFSURvD2Zz/iQqWY52Es4oMpmnG/GUaVN2KovXz3aDpkJ+4pD7zHNc6HTjNSBTpC8u0TkD7GELWcgm3VHpP1r/9HEsYYCLB23Jx4fiVFkthJ98VJOeDEkEc9UYDzYnMU9Q/pgX6f/t55dbF8e0sV2hpPkQiw7DRDqF4tmAwPz4FC55GdSUktlR4edXrSKWU9IqT/im941fZCAHN45YJRE4Ym0XF9JMecuN4iDCUT70ymgdPKD5MO9ek+BAGbO9xFFDb85YID8oEZ2NdiDlirsTnQPdc00XwMOzlE+M2vBRQ4EdgMZRCKUeP21npUlJGAtfHu463yonNdJ4OKVOSDmIb0wwujuZQdYvX/8ikO4qamIVElw13USqC6CZAYO3jizs2GNwcyeIB0IeM4DBWpWnip4B3RziCA6ssO1rjJiCmC8WyCKAqx040XVgN+llqA4rEDr/zk0G/e47mBmEJupNzOkchbZR/8WXTN6tkdMEfb0gz7GU24FqZSQ60ReJovfnGOaO4Ta7K+H6bJdwlXHqcZoHh10KgHMDbsNCtt0CqgPt6WROPZQxXqTdUJ/knZbT4/AsjHAKzblIS9Ywoa/1sZky5CNCMN5OLz2ek6icdGB3SHrzrtLA4W5lPy0TzK2X5/3DhDIWuUgKl46dz7+Nnj8aVQ6fKfc/Qlzm7I0Q40/7oFAn5FcbuJk9TamHiflQ+llas04TbJTOf27d5dSHzID0MiAhtPCoqr1Pl9HrvHvCmR7YsUhbyEH7pR/fEHm1paCerPt5SycXT9KDLoRoDI8+C6VfSfvbZm+n6eeKvnACndG+EcqSmnGkz7jPdz9wmIXTyhvhSBT2OORLNXiP1kjuiBkGAmOchZWza6EnCV1tD3bZOjuf0sUvUW+Rv6TVs2oppYSYcrc7/E+X
h83rMWy2LHEy+3Fyf3JnSg==-TEuWVq7eOwgv9mMTIRQJYOjrXu9Uf5/xJ9AUKSwsakA4C8tnf53bxvDborq6yhXkyoYHOUB5L63cOvnoCKhHgsT3DnuiS0OFMwx3Rep8JTaWtuEyF22r2PVh1QtrWiqKFoI4sn+8HHisU6Dh86m86I+Qp3s0SGCkr5cGWlycD7pIObP18eAPtPo581CFOgOohwhg+mX2ieEWoqeBk85Lgx97B0fSp9gKXx0/oSMzW5MXXdq7CoewnSubeJJwmXYX0NW2QcOVLnVfR0JTlqwI8EJmQy8y7O4wA7EOrSTRJmpozK6jAPZFFZDBqXJhJyJQpM3y4/4xtYnFyJZHrH9w03hVVPosVaxqMGFphTWonq9bHOTTQ6t+jd8FrIJuSryDbqCz6HJ4akW3HemI9aQi/yFa38KEaN76n4r3faXdhMI3pbJUOJltIZgkayr7ePjtqa3v5+yX/lHTE9HAh8IsXnyQeamPTooWWnb+Tu8xSQgVnAlJsw4l7klepRoxjZmipJETD1nsGtMAfi+EtWgEknAZUnougwxtz7ZvATPFtxnhxf9LFAi+6VDHjFFS/hN2oq6dkpdwokPu0kM2vkg/vcqrZOEA8mYpzucj32POE1ArKD6cyr8aD+X6SlLtYmYnYAi1h444FaF/mRZvxut8OJEKSr2pf5/vW4l10CgZziXI4AaBD2A04o/N28vCSEK9jb/AtiVhjAn1rqqY8CfpJXQo8RyIggAY7VTemXe4SqiWbf0cFBi509UMFpLaZRICaZED25EVYv7/dSCqxStQi/el7OCCXbGVflV/hDz/DX7d0vn7yp+w6j0kMCp531ZZR/3xJzqh7X/G81+rRRtjMeaxe3hu9yJC0gMcz7bDabLBlo+ubtae2Qf16n4Fnp+cvx3MG2eO9QALSlWPKr5N7i6eX3d1IYfbZaDY26X9TuJMxB0lowESKCAQ9E7fongkhmwVEq9ByIJVbtOlybgijx62eOMtekzx//vPWWjz+VBKTxc+YAImVc3JrJYSfEgCc9B7nKdIkcBBgORy+JYLNsbQgiimCW9yJfrrxd7bfC1AVe/ksWjjgFXJ/4Zut9QRdtDuZl3Bo2PORIgxEaplYCMxbU8Ya2PeqVCitkTw1uz1U/vCMGoXlG9uwwOYdV8JTVMgPQxUK56sU94EkmCoyFkj0kWfiaQkOY7mR0MALD1DNDtHrZXlODxYlidGg8TPV5RjHvh/EPvVUFO6JQHaIKGie9eNTd6lYzOotpz4yD6R6PMOvs1i+yosKLfRDMsRoHXEElLBR9ARLrXg1CUXWFbPiupaHsbjr6L38ry8n6wQplh2V5dRuS+BWxTCqGJMv1FaEvTzzflkvmjFXSN+z670kF22OmRKB8Pg6no8STGu8RtEw3iVTdWtczpPe6COyeMrcPUiGtOjAs0uLYJYEAwHB0CFvlUjwOUIjfyXQSQVmvSKVFe87cVo0NCxBQdgjNlVPy9CFgFzd/1+KbBGDHYzu4c0zE+pnXpNkMAhSszn2K5zyBlYf8wlnOe/9RQdQ0d1AnzKkWkfHXCTOt706R3vCMitzy0j4/eqIOFyYNbCiyUZeTO7k+7UPvdMC5z9FdD4OaaDRKxBOIHFAPDygpYcYPlLkTIOI1BGSKl1iZ/i6AwAkD9a7LY6e6qQHzyEaVUzd5OC31183vT8cSGtynNrCBbZvnUswEOE8s/WQEVMH8+P4MPUJaspb8KTm9Qx+AktSJ/ukAj3w+i2LSgyjlsaYnAytX+5DU130n7eXql5Qm+0gjM1d5q4IFXQPIHweT/TR4UrlB/zgdQGD7qhrkKOTsWPc5SDN5e1tB8bb0+YVbpl1aSVvEY403zslo0vjWMWh9gf6kPk69avGT0Cq9FMq52lUlmE/59t0cZwtvo0YhDwBOKtv8RT+/jv0GtL9a9AkslZ2D8O7lR/y0m8CF7GfniZ87zOCdlHo89pLV33HV6q
2 changes: 1 addition & 1 deletion Tuist/Signing/debug.p12.encrypted
Original file line number Diff line number Diff line change
@@ -1 +1 @@
uabr0/Is2SYwd1Ymns0G+A==-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
hEe9RDc0T/a6wlgHXYGmmw==-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
Loading

0 comments on commit af9b450

Please sign in to comment.