diff --git a/.husky/pre-commit b/.husky/pre-commit
index 8f75635..9a94b3d 100755
--- a/.husky/pre-commit
+++ b/.husky/pre-commit
@@ -1,10 +1,4 @@
#!/usr/bin/env sh
-. "$(dirname "$0")/_/husky.sh"
-
-export NVM_DIR="$HOME/.nvm"
-[ -s "$NVM_DIR/nvm.sh" ] && . "$NVM_DIR/nvm.sh"
-
-echo "๐ฅ HUSKY PRE-COMMIT RUNNING"
npx lint-staged
diff --git a/ios-widge.md b/ios-widge.md
new file mode 100644
index 0000000..786015e
--- /dev/null
+++ b/ios-widge.md
@@ -0,0 +1,68 @@
+# iOS ์์ ฏ ์คํ ๋ฐฉ๋ฒ (๊ฐ๋ฐ์์ฉ)
+
+์ฑ ์์ฒด๋ Expo๋ก ์คํํ์ง๋ง,
+iOS ์์ ฏ์ ๋ฐ๋์ Xcode๋ก ๋น๋/์คํํด์ผ ํฉ๋๋ค.
+(WidgetKit์ ๋ค์ดํฐ๋ธ Extension์ด๋ผ Expo๋ง์ผ๋ก๋ ์คํ๋์ง ์์ต๋๋ค)
+
+์ฌ์ ์ค๋น
+
+- Xcode ์ค์น (์๋ฎฌ๋ ์ดํฐ ํฌํจ)
+- CocoaPods ์ค์น
+- Node / npm ํ๊ฒฝ ์ ์ ๋์
+
+## 1๏ธโฃ JS ์์กด์ฑ ์ค์น
+
+ํ๋ก์ ํธ ๋ฃจํธ์์ ์คํ:
+
+```bash
+npm install
+```
+
+## 2๏ธโฃ iOS Pods ์ค์น
+
+์์ ฏ ๋ฐ ์ผ๋ถ ๋ค์ดํฐ๋ธ ๋ชจ๋์ CocoaPods์ ์์กดํฉ๋๋ค.
+
+```bash
+cd ios
+pod install --repo-update
+cd ..
+```
+
+์ ์ ์ค์น ์ฌ๋ถ ํ์ธ:
+
+```bash
+test -f ios/Podfile.lock && echo "Podfile.lock OK"
+```
+
+## 3๏ธโฃ Expo ๋ฒ๋ค๋ฌ ์คํ
+
+ํฐ๋ฏธ๋ ํ๋ ์ด์ด๋๊ณ ๊ณ์ ์คํ ์ํ๋ก ์ ์งํฉ๋๋ค.
+
+```bash
+npm run dev
+# (expo start -c)
+```
+
+## 4๏ธโฃ Xcode์์ iOS ์ํฌ์คํ์ด์ค ์ด๊ธฐ
+
+```bash
+open ios/*.xcworkspace
+```
+
+## 5๏ธโฃ Xcode์์ ์ฑ 1ํ ์คํ
+
+Xcode ์๋จ์์:
+
+1. Scheme: RabbitTracker
+2. Simulator ๊ธฐ๊ธฐ ์ ํ
+3. โถ๏ธ Run
+
+์ด ๋จ๊ณ๋ ์์ ฏ์ ์์คํ
์ ์ค์นํ๊ธฐ ์ํด ๋ฐ๋์ ํ์ํฉ๋๋ค.
+
+## 6๏ธโฃ iOS ์๋ฎฌ๋ ์ดํฐ์์ ์์ ฏ ์ถ๊ฐ
+
+1. ์๋ฎฌ๋ ์ดํฐ ํ ํ๋ฉด ์ด๋
+2. ๋น ๊ณต๊ฐ ๊ธธ๊ฒ ๋๋ฅด๊ธฐ
+3. `+` ๋ฒํผ โ ์์ ฏ ์ถ๊ฐ
+4. Rabbit Tracker ๊ฒ์
+5. ์ํ๋ ์ฌ์ด์ฆ์ ์์ ฏ ์ถ๊ฐ
diff --git a/ios/Podfile.lock b/ios/Podfile.lock
index cfa493e..6fb1ff9 100644
--- a/ios/Podfile.lock
+++ b/ios/Podfile.lock
@@ -1768,6 +1768,50 @@ PODS:
- React-utils (= 0.81.5)
- ReactNativeDependencies
- ReactNativeDependencies (0.81.5)
+ - RNCAsyncStorage (2.2.0):
+ - hermes-engine
+ - RCTRequired
+ - RCTTypeSafety
+ - React-Core
+ - React-Core-prebuilt
+ - React-debug
+ - React-Fabric
+ - React-featureflags
+ - React-graphics
+ - React-ImageManager
+ - React-jsi
+ - React-NativeModulesApple
+ - React-RCTFabric
+ - React-renderercss
+ - React-rendererdebug
+ - React-utils
+ - ReactCodegen
+ - ReactCommon/turbomodule/bridging
+ - ReactCommon/turbomodule/core
+ - ReactNativeDependencies
+ - Yoga
+ - RNDateTimePicker (8.4.4):
+ - hermes-engine
+ - RCTRequired
+ - RCTTypeSafety
+ - React-Core
+ - React-Core-prebuilt
+ - React-debug
+ - React-Fabric
+ - React-featureflags
+ - React-graphics
+ - React-ImageManager
+ - React-jsi
+ - React-NativeModulesApple
+ - React-RCTFabric
+ - React-renderercss
+ - React-rendererdebug
+ - React-utils
+ - ReactCodegen
+ - ReactCommon/turbomodule/bridging
+ - ReactCommon/turbomodule/core
+ - ReactNativeDependencies
+ - Yoga
- RNReanimated (4.1.6):
- hermes-engine
- RCTRequired
@@ -2087,6 +2131,8 @@ DEPENDENCIES:
- ReactCodegen (from `build/generated/ios`)
- ReactCommon/turbomodule/core (from `../node_modules/react-native/ReactCommon`)
- ReactNativeDependencies (from `../node_modules/react-native/third-party-podspecs/ReactNativeDependencies.podspec`)
+ - "RNCAsyncStorage (from `../node_modules/@react-native-async-storage/async-storage`)"
+ - "RNDateTimePicker (from `../node_modules/@react-native-community/datetimepicker`)"
- RNReanimated (from `../node_modules/react-native-reanimated`)
- RNScreens (from `../node_modules/react-native-screens`)
- RNSVG (from `../node_modules/react-native-svg`)
@@ -2251,6 +2297,10 @@ EXTERNAL SOURCES:
:path: "../node_modules/react-native/ReactCommon"
ReactNativeDependencies:
:podspec: "../node_modules/react-native/third-party-podspecs/ReactNativeDependencies.podspec"
+ RNCAsyncStorage:
+ :path: "../node_modules/@react-native-async-storage/async-storage"
+ RNDateTimePicker:
+ :path: "../node_modules/@react-native-community/datetimepicker"
RNReanimated:
:path: "../node_modules/react-native-reanimated"
RNScreens:
@@ -2341,6 +2391,8 @@ SPEC CHECKSUMS:
ReactCodegen: 4c44b74b77fc41ae25b9e2c7e9bd6e2bc772c23f
ReactCommon: e6e232202a447d353e5531f2be82f50f47cbaa9a
ReactNativeDependencies: 71ce9c28beb282aa720ea7b46980fff9669f428a
+ RNCAsyncStorage: e85a99325df9eb0191a6ee2b2a842644c7eb29f4
+ RNDateTimePicker: 6fdd63f5d1e0f21faf4cc8674957c52958a7efae
RNReanimated: 43f611f1c85c90e0273df7399bf1536f8e2bd125
RNScreens: dd61bc3a3e6f6901ad833efa411917d44827cf51
RNSVG: 2825ee146e0f6a16221e852299943e4cceef4528
diff --git a/ios/RabbitTrackerWidget/AppIntent.swift b/ios/RabbitTrackerWidget/AppIntent.swift
new file mode 100644
index 0000000..834297a
--- /dev/null
+++ b/ios/RabbitTrackerWidget/AppIntent.swift
@@ -0,0 +1,18 @@
+//
+// AppIntent.swift
+// RabbitTrackerWidget
+//
+// Created by ๊ฐ๋ฏผ์ฌ on 2/2/26.
+//
+
+import WidgetKit
+import AppIntents
+
+struct ConfigurationAppIntent: WidgetConfigurationIntent {
+ static var title: LocalizedStringResource { "Configuration" }
+ static var description: IntentDescription { "This is an example widget." }
+
+ // An example configurable parameter.
+ @Parameter(title: "Favorite Emoji", default: "๐")
+ var favoriteEmoji: String
+}
diff --git a/ios/RabbitTrackerWidget/Assets.xcassets/AccentColor.colorset/Contents.json b/ios/RabbitTrackerWidget/Assets.xcassets/AccentColor.colorset/Contents.json
new file mode 100644
index 0000000..eb87897
--- /dev/null
+++ b/ios/RabbitTrackerWidget/Assets.xcassets/AccentColor.colorset/Contents.json
@@ -0,0 +1,11 @@
+{
+ "colors" : [
+ {
+ "idiom" : "universal"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/ios/RabbitTrackerWidget/Assets.xcassets/AppIcon.appiconset/Contents.json b/ios/RabbitTrackerWidget/Assets.xcassets/AppIcon.appiconset/Contents.json
new file mode 100644
index 0000000..2305880
--- /dev/null
+++ b/ios/RabbitTrackerWidget/Assets.xcassets/AppIcon.appiconset/Contents.json
@@ -0,0 +1,35 @@
+{
+ "images" : [
+ {
+ "idiom" : "universal",
+ "platform" : "ios",
+ "size" : "1024x1024"
+ },
+ {
+ "appearances" : [
+ {
+ "appearance" : "luminosity",
+ "value" : "dark"
+ }
+ ],
+ "idiom" : "universal",
+ "platform" : "ios",
+ "size" : "1024x1024"
+ },
+ {
+ "appearances" : [
+ {
+ "appearance" : "luminosity",
+ "value" : "tinted"
+ }
+ ],
+ "idiom" : "universal",
+ "platform" : "ios",
+ "size" : "1024x1024"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/ios/RabbitTrackerWidget/Assets.xcassets/Contents.json b/ios/RabbitTrackerWidget/Assets.xcassets/Contents.json
new file mode 100644
index 0000000..73c0059
--- /dev/null
+++ b/ios/RabbitTrackerWidget/Assets.xcassets/Contents.json
@@ -0,0 +1,6 @@
+{
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/ios/RabbitTrackerWidget/Assets.xcassets/WidgetBackground.colorset/Contents.json b/ios/RabbitTrackerWidget/Assets.xcassets/WidgetBackground.colorset/Contents.json
new file mode 100644
index 0000000..eb87897
--- /dev/null
+++ b/ios/RabbitTrackerWidget/Assets.xcassets/WidgetBackground.colorset/Contents.json
@@ -0,0 +1,11 @@
+{
+ "colors" : [
+ {
+ "idiom" : "universal"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/ios/RabbitTrackerWidget/Info.plist b/ios/RabbitTrackerWidget/Info.plist
new file mode 100644
index 0000000..d1a218a
--- /dev/null
+++ b/ios/RabbitTrackerWidget/Info.plist
@@ -0,0 +1,13 @@
+
+
+
+
+ NSExtension
+
+ NSExtensionPointIdentifier
+ com.apple.widgetkit-extension
+
+ RCTNewArchEnabled
+
+
+
diff --git a/ios/RabbitTrackerWidget/RabbitTrackerWidget.swift b/ios/RabbitTrackerWidget/RabbitTrackerWidget.swift
new file mode 100644
index 0000000..9db9b1b
--- /dev/null
+++ b/ios/RabbitTrackerWidget/RabbitTrackerWidget.swift
@@ -0,0 +1,62 @@
+//
+// RabbitTrackerWidget.swift
+// RabbitTrackerWidget
+//
+// Created by ๊ฐ๋ฏผ์ฌ on 2/2/26.
+//
+
+import WidgetKit
+import SwiftUI
+
+struct SimpleEntry: TimelineEntry {
+ let date: Date
+}
+
+struct Provider: TimelineProvider {
+ func placeholder(in context: Context) -> SimpleEntry {
+ SimpleEntry(date: Date())
+ }
+
+ func getSnapshot(in context: Context, completion: @escaping (SimpleEntry) -> Void) {
+ completion(SimpleEntry(date: Date()))
+ }
+
+ func getTimeline(in context: Context, completion: @escaping (Timeline) -> Void) {
+ let entry = SimpleEntry(date: Date())
+ let timeline = Timeline(entries: [entry], policy: .never)
+ completion(timeline)
+ }
+}
+
+struct RabbitTrackerWidgetEntryView: View {
+ var entry: Provider.Entry
+
+ var body: some View {
+ VStack(spacing: 8) {
+ Text("๐ฐ Rabbit Tracker")
+ .font(.headline)
+
+ Text("Widget is alive!")
+ .font(.caption)
+ }
+ .frame(maxWidth: .infinity, maxHeight: .infinity)
+ .background(Color(.systemBackground))
+ }
+}
+
+struct RabbitTrackerWidget: Widget {
+ let kind: String = "RabbitTrackerWidget"
+
+ var body: some WidgetConfiguration {
+ StaticConfiguration(kind: kind, provider: Provider()) { entry in
+ RabbitTrackerWidgetEntryView(entry: entry)
+ }
+ .configurationDisplayName("Rabbit Tracker")
+ .description("์ต๊ด์ ๋น ๋ฅด๊ฒ ํ์ธํ๋ ์์ ฏ")
+ .supportedFamilies([
+ .systemSmall,
+ .systemMedium,
+ .systemLarge
+ ])
+ }
+}
diff --git a/ios/RabbitTrackerWidget/RabbitTrackerWidgetBundle.swift b/ios/RabbitTrackerWidget/RabbitTrackerWidgetBundle.swift
new file mode 100644
index 0000000..1c7c1e0
--- /dev/null
+++ b/ios/RabbitTrackerWidget/RabbitTrackerWidgetBundle.swift
@@ -0,0 +1,18 @@
+//
+// RabbitTrackerWidgetBundle.swift
+// RabbitTrackerWidget
+//
+// Created by ๊ฐ๋ฏผ์ฌ on 2/2/26.
+//
+
+import WidgetKit
+import SwiftUI
+
+@main
+struct RabbitTrackerWidgetBundle: WidgetBundle {
+ var body: some Widget {
+ RabbitTrackerWidget()
+ RabbitTrackerWidgetControl()
+ RabbitTrackerWidgetLiveActivity()
+ }
+}
diff --git a/ios/RabbitTrackerWidget/RabbitTrackerWidgetControl.swift b/ios/RabbitTrackerWidget/RabbitTrackerWidgetControl.swift
new file mode 100644
index 0000000..df99413
--- /dev/null
+++ b/ios/RabbitTrackerWidget/RabbitTrackerWidgetControl.swift
@@ -0,0 +1,77 @@
+//
+// RabbitTrackerWidgetControl.swift
+// RabbitTrackerWidget
+//
+// Created by ๊ฐ๋ฏผ์ฌ on 2/2/26.
+//
+
+import AppIntents
+import SwiftUI
+import WidgetKit
+
+struct RabbitTrackerWidgetControl: ControlWidget {
+ static let kind: String = "com.anonymous.rabbit-tracker.RabbitTrackerWidget"
+
+ var body: some ControlWidgetConfiguration {
+ AppIntentControlConfiguration(
+ kind: Self.kind,
+ provider: Provider()
+ ) { value in
+ ControlWidgetToggle(
+ "Start Timer",
+ isOn: value.isRunning,
+ action: StartTimerIntent(value.name)
+ ) { isRunning in
+ Label(isRunning ? "On" : "Off", systemImage: "timer")
+ }
+ }
+ .displayName("Timer")
+ .description("A an example control that runs a timer.")
+ }
+}
+
+extension RabbitTrackerWidgetControl {
+ struct Value {
+ var isRunning: Bool
+ var name: String
+ }
+
+ struct Provider: AppIntentControlValueProvider {
+ func previewValue(configuration: TimerConfiguration) -> Value {
+ RabbitTrackerWidgetControl.Value(isRunning: false, name: configuration.timerName)
+ }
+
+ func currentValue(configuration: TimerConfiguration) async throws -> Value {
+ let isRunning = true // Check if the timer is running
+ return RabbitTrackerWidgetControl.Value(isRunning: isRunning, name: configuration.timerName)
+ }
+ }
+}
+
+struct TimerConfiguration: ControlConfigurationIntent {
+ static let title: LocalizedStringResource = "Timer Name Configuration"
+
+ @Parameter(title: "Timer Name", default: "Timer")
+ var timerName: String
+}
+
+struct StartTimerIntent: SetValueIntent {
+ static let title: LocalizedStringResource = "Start a timer"
+
+ @Parameter(title: "Timer Name")
+ var name: String
+
+ @Parameter(title: "Timer is running")
+ var value: Bool
+
+ init() {}
+
+ init(_ name: String) {
+ self.name = name
+ }
+
+ func perform() async throws -> some IntentResult {
+ // Start the timerโฆ
+ return .result()
+ }
+}
diff --git a/ios/RabbitTrackerWidget/RabbitTrackerWidgetLiveActivity.swift b/ios/RabbitTrackerWidget/RabbitTrackerWidgetLiveActivity.swift
new file mode 100644
index 0000000..9407d55
--- /dev/null
+++ b/ios/RabbitTrackerWidget/RabbitTrackerWidgetLiveActivity.swift
@@ -0,0 +1,80 @@
+//
+// RabbitTrackerWidgetLiveActivity.swift
+// RabbitTrackerWidget
+//
+// Created by ๊ฐ๋ฏผ์ฌ on 2/2/26.
+//
+
+import ActivityKit
+import WidgetKit
+import SwiftUI
+
+struct RabbitTrackerWidgetAttributes: ActivityAttributes {
+ public struct ContentState: Codable, Hashable {
+ // Dynamic stateful properties about your activity go here!
+ var emoji: String
+ }
+
+ // Fixed non-changing properties about your activity go here!
+ var name: String
+}
+
+struct RabbitTrackerWidgetLiveActivity: Widget {
+ var body: some WidgetConfiguration {
+ ActivityConfiguration(for: RabbitTrackerWidgetAttributes.self) { context in
+ // Lock screen/banner UI goes here
+ VStack {
+ Text("Hello \(context.state.emoji)")
+ }
+ .activityBackgroundTint(Color.cyan)
+ .activitySystemActionForegroundColor(Color.black)
+
+ } dynamicIsland: { context in
+ DynamicIsland {
+ // Expanded UI goes here. Compose the expanded UI through
+ // various regions, like leading/trailing/center/bottom
+ DynamicIslandExpandedRegion(.leading) {
+ Text("Leading")
+ }
+ DynamicIslandExpandedRegion(.trailing) {
+ Text("Trailing")
+ }
+ DynamicIslandExpandedRegion(.bottom) {
+ Text("Bottom \(context.state.emoji)")
+ // more content
+ }
+ } compactLeading: {
+ Text("L")
+ } compactTrailing: {
+ Text("T \(context.state.emoji)")
+ } minimal: {
+ Text(context.state.emoji)
+ }
+ .widgetURL(URL(string: "http://www.apple.com"))
+ .keylineTint(Color.red)
+ }
+ }
+}
+
+extension RabbitTrackerWidgetAttributes {
+ fileprivate static var preview: RabbitTrackerWidgetAttributes {
+ RabbitTrackerWidgetAttributes(name: "World")
+ }
+}
+
+extension RabbitTrackerWidgetAttributes.ContentState {
+ fileprivate static var smiley: RabbitTrackerWidgetAttributes.ContentState {
+ RabbitTrackerWidgetAttributes.ContentState(emoji: "๐")
+ }
+
+ fileprivate static var starEyes: RabbitTrackerWidgetAttributes.ContentState {
+ RabbitTrackerWidgetAttributes.ContentState(emoji: "๐คฉ")
+ }
+}
+
+#Preview("Notification", as: .content, using: RabbitTrackerWidgetAttributes.preview) {
+ RabbitTrackerWidgetLiveActivity()
+} contentStates: {
+ RabbitTrackerWidgetAttributes.ContentState.smiley
+ RabbitTrackerWidgetAttributes.ContentState.starEyes
+}
diff --git a/ios/rabbittracker.xcodeproj/project.pbxproj b/ios/rabbittracker.xcodeproj/project.pbxproj
index 07da4c9..53c715a 100644
--- a/ios/rabbittracker.xcodeproj/project.pbxproj
+++ b/ios/rabbittracker.xcodeproj/project.pbxproj
@@ -11,22 +11,65 @@
1D750B9BCA341CBEB02B96C7 /* libPods-rabbittracker.a in Frameworks */ = {isa = PBXBuildFile; fileRef = A1D29FA774A932739FA9E177 /* libPods-rabbittracker.a */; };
36D5497B574CB881B5FAC1BC /* PrivacyInfo.xcprivacy in Resources */ = {isa = PBXBuildFile; fileRef = EAFC3CAFEC8A72F50A307D3D /* PrivacyInfo.xcprivacy */; };
3E461D99554A48A4959DE609 /* SplashScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = AA286B85B6C04FC6940260E9 /* SplashScreen.storyboard */; };
+ 66930A182F3096DF0026DBE3 /* WidgetKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 66930A172F3096DE0026DBE3 /* WidgetKit.framework */; };
+ 66930A1A2F3096DF0026DBE3 /* SwiftUI.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 66930A192F3096DF0026DBE3 /* SwiftUI.framework */; };
+ 66930A2B2F3096E20026DBE3 /* RabbitTrackerWidgetExtension.appex in Embed Foundation Extensions */ = {isa = PBXBuildFile; fileRef = 66930A162F3096DE0026DBE3 /* RabbitTrackerWidgetExtension.appex */; settings = {ATTRIBUTES = (RemoveHeadersOnCopy, ); }; };
+ 66930A392F30A11B0026DBE3 /* AppIntent.swift in Sources */ = {isa = PBXBuildFile; fileRef = 66930A312F30A11B0026DBE3 /* AppIntent.swift */; };
+ 66930A3A2F30A11B0026DBE3 /* RabbitTrackerWidget.swift in Sources */ = {isa = PBXBuildFile; fileRef = 66930A342F30A11B0026DBE3 /* RabbitTrackerWidget.swift */; };
+ 66930A3B2F30A11B0026DBE3 /* RabbitTrackerWidgetBundle.swift in Sources */ = {isa = PBXBuildFile; fileRef = 66930A352F30A11B0026DBE3 /* RabbitTrackerWidgetBundle.swift */; };
+ 66930A3C2F30A11B0026DBE3 /* RabbitTrackerWidgetControl.swift in Sources */ = {isa = PBXBuildFile; fileRef = 66930A362F30A11B0026DBE3 /* RabbitTrackerWidgetControl.swift */; };
+ 66930A3D2F30A11B0026DBE3 /* RabbitTrackerWidgetLiveActivity.swift in Sources */ = {isa = PBXBuildFile; fileRef = 66930A372F30A11B0026DBE3 /* RabbitTrackerWidgetLiveActivity.swift */; };
+ 66930A3E2F30A11B0026DBE3 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 66930A322F30A11B0026DBE3 /* Assets.xcassets */; };
B8C79A3A5A04C59DE95D2F26 /* ExpoModulesProvider.swift in Sources */ = {isa = PBXBuildFile; fileRef = E61278E8E9B07E0A8253BAEE /* ExpoModulesProvider.swift */; };
BB2F792D24A3F905000567C9 /* Expo.plist in Resources */ = {isa = PBXBuildFile; fileRef = BB2F792C24A3F905000567C9 /* Expo.plist */; };
F11748422D0307B40044C1D9 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = F11748412D0307B40044C1D9 /* AppDelegate.swift */; };
/* End PBXBuildFile section */
+/* Begin PBXContainerItemProxy section */
+ 66930A292F3096E20026DBE3 /* PBXContainerItemProxy */ = {
+ isa = PBXContainerItemProxy;
+ containerPortal = 83CBB9F71A601CBA00E9B192 /* Project object */;
+ proxyType = 1;
+ remoteGlobalIDString = 66930A152F3096DE0026DBE3;
+ remoteInfo = RabbitTrackerWidgetExtension;
+ };
+/* End PBXContainerItemProxy section */
+
+/* Begin PBXCopyFilesBuildPhase section */
+ 66930A2C2F3096E20026DBE3 /* Embed Foundation Extensions */ = {
+ isa = PBXCopyFilesBuildPhase;
+ buildActionMask = 2147483647;
+ dstPath = "";
+ dstSubfolderSpec = 13;
+ files = (
+ 66930A2B2F3096E20026DBE3 /* RabbitTrackerWidgetExtension.appex in Embed Foundation Extensions */,
+ );
+ name = "Embed Foundation Extensions";
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+/* End PBXCopyFilesBuildPhase section */
+
/* Begin PBXFileReference section */
13B07F961A680F5B00A75B9A /* rabbittracker.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = rabbittracker.app; sourceTree = BUILT_PRODUCTS_DIR; };
13B07FB51A68108700A75B9A /* Images.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; name = Images.xcassets; path = rabbittracker/Images.xcassets; sourceTree = ""; };
13B07FB61A68108700A75B9A /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = Info.plist; path = rabbittracker/Info.plist; sourceTree = ""; };
216C6BDE3FA4B8014BB7472D /* Pods-rabbittracker.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-rabbittracker.debug.xcconfig"; path = "Target Support Files/Pods-rabbittracker/Pods-rabbittracker.debug.xcconfig"; sourceTree = ""; };
+ 66930A162F3096DE0026DBE3 /* RabbitTrackerWidgetExtension.appex */ = {isa = PBXFileReference; explicitFileType = "wrapper.app-extension"; includeInIndex = 0; path = RabbitTrackerWidgetExtension.appex; sourceTree = BUILT_PRODUCTS_DIR; };
+ 66930A172F3096DE0026DBE3 /* WidgetKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = WidgetKit.framework; path = System/Library/Frameworks/WidgetKit.framework; sourceTree = SDKROOT; };
+ 66930A192F3096DF0026DBE3 /* SwiftUI.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = SwiftUI.framework; path = System/Library/Frameworks/SwiftUI.framework; sourceTree = SDKROOT; };
+ 66930A312F30A11B0026DBE3 /* AppIntent.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppIntent.swift; sourceTree = ""; };
+ 66930A322F30A11B0026DBE3 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; };
+ 66930A332F30A11B0026DBE3 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; };
+ 66930A342F30A11B0026DBE3 /* RabbitTrackerWidget.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RabbitTrackerWidget.swift; sourceTree = ""; };
+ 66930A352F30A11B0026DBE3 /* RabbitTrackerWidgetBundle.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RabbitTrackerWidgetBundle.swift; sourceTree = ""; };
+ 66930A362F30A11B0026DBE3 /* RabbitTrackerWidgetControl.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RabbitTrackerWidgetControl.swift; sourceTree = ""; };
+ 66930A372F30A11B0026DBE3 /* RabbitTrackerWidgetLiveActivity.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RabbitTrackerWidgetLiveActivity.swift; sourceTree = ""; };
9C8F1C0AFC4FB971E0CC9BD2 /* Pods-rabbittracker.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-rabbittracker.release.xcconfig"; path = "Target Support Files/Pods-rabbittracker/Pods-rabbittracker.release.xcconfig"; sourceTree = ""; };
A1D29FA774A932739FA9E177 /* libPods-rabbittracker.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-rabbittracker.a"; sourceTree = BUILT_PRODUCTS_DIR; };
AA286B85B6C04FC6940260E9 /* SplashScreen.storyboard */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.storyboard; name = SplashScreen.storyboard; path = rabbittracker/SplashScreen.storyboard; sourceTree = ""; };
BB2F792C24A3F905000567C9 /* Expo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = Expo.plist; sourceTree = ""; };
E61278E8E9B07E0A8253BAEE /* ExpoModulesProvider.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ExpoModulesProvider.swift; path = "Pods/Target Support Files/Pods-rabbittracker/ExpoModulesProvider.swift"; sourceTree = ""; };
- EAFC3CAFEC8A72F50A307D3D /* PrivacyInfo.xcprivacy */ = {isa = PBXFileReference; includeInIndex = 1; name = PrivacyInfo.xcprivacy; path = rabbittracker/PrivacyInfo.xcprivacy; sourceTree = ""; };
+ EAFC3CAFEC8A72F50A307D3D /* PrivacyInfo.xcprivacy */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xml; name = PrivacyInfo.xcprivacy; path = rabbittracker/PrivacyInfo.xcprivacy; sourceTree = ""; };
ED297162215061F000B7C4FE /* JavaScriptCore.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = JavaScriptCore.framework; path = System/Library/Frameworks/JavaScriptCore.framework; sourceTree = SDKROOT; };
F11748412D0307B40044C1D9 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = AppDelegate.swift; path = rabbittracker/AppDelegate.swift; sourceTree = ""; };
F11748442D0722820044C1D9 /* rabbittracker-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "rabbittracker-Bridging-Header.h"; path = "rabbittracker/rabbittracker-Bridging-Header.h"; sourceTree = ""; };
@@ -41,6 +84,15 @@
);
runOnlyForDeploymentPostprocessing = 0;
};
+ 66930A132F3096DE0026DBE3 /* Frameworks */ = {
+ isa = PBXFrameworksBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ 66930A1A2F3096DF0026DBE3 /* SwiftUI.framework in Frameworks */,
+ 66930A182F3096DF0026DBE3 /* WidgetKit.framework in Frameworks */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
/* End PBXFrameworksBuildPhase section */
/* Begin PBXGroup section */
@@ -63,6 +115,8 @@
children = (
ED297162215061F000B7C4FE /* JavaScriptCore.framework */,
A1D29FA774A932739FA9E177 /* libPods-rabbittracker.a */,
+ 66930A172F3096DE0026DBE3 /* WidgetKit.framework */,
+ 66930A192F3096DF0026DBE3 /* SwiftUI.framework */,
);
name = Frameworks;
sourceTree = "";
@@ -73,10 +127,23 @@
216C6BDE3FA4B8014BB7472D /* Pods-rabbittracker.debug.xcconfig */,
9C8F1C0AFC4FB971E0CC9BD2 /* Pods-rabbittracker.release.xcconfig */,
);
- name = Pods;
path = Pods;
sourceTree = "";
};
+ 66930A382F30A11B0026DBE3 /* RabbitTrackerWidget */ = {
+ isa = PBXGroup;
+ children = (
+ 66930A312F30A11B0026DBE3 /* AppIntent.swift */,
+ 66930A322F30A11B0026DBE3 /* Assets.xcassets */,
+ 66930A332F30A11B0026DBE3 /* Info.plist */,
+ 66930A342F30A11B0026DBE3 /* RabbitTrackerWidget.swift */,
+ 66930A352F30A11B0026DBE3 /* RabbitTrackerWidgetBundle.swift */,
+ 66930A362F30A11B0026DBE3 /* RabbitTrackerWidgetControl.swift */,
+ 66930A372F30A11B0026DBE3 /* RabbitTrackerWidgetLiveActivity.swift */,
+ );
+ path = RabbitTrackerWidget;
+ sourceTree = "";
+ };
832341AE1AAA6A7D00B99B32 /* Libraries */ = {
isa = PBXGroup;
children = (
@@ -89,6 +156,7 @@
children = (
13B07FAE1A68108700A75B9A /* rabbittracker */,
832341AE1AAA6A7D00B99B32 /* Libraries */,
+ 66930A382F30A11B0026DBE3 /* RabbitTrackerWidget */,
83CBBA001A601CBA00E9B192 /* Products */,
2D16E6871FA4F8E400B85C8A /* Frameworks */,
5E9AD4F7C318792A377CA447 /* Pods */,
@@ -103,6 +171,7 @@
isa = PBXGroup;
children = (
13B07F961A680F5B00A75B9A /* rabbittracker.app */,
+ 66930A162F3096DE0026DBE3 /* RabbitTrackerWidgetExtension.appex */,
);
name = Products;
sourceTree = "";
@@ -147,27 +216,50 @@
00DD1BFF1BD5951E006B06BC /* Bundle React Native code and images */,
800E24972A6A228C8D4807E9 /* [CP] Copy Pods Resources */,
327CF910E664A37BA10E3A16 /* [CP] Embed Pods Frameworks */,
+ 66930A2C2F3096E20026DBE3 /* Embed Foundation Extensions */,
);
buildRules = (
);
dependencies = (
+ 66930A2A2F3096E20026DBE3 /* PBXTargetDependency */,
);
name = rabbittracker;
productName = rabbittracker;
productReference = 13B07F961A680F5B00A75B9A /* rabbittracker.app */;
productType = "com.apple.product-type.application";
};
+ 66930A152F3096DE0026DBE3 /* RabbitTrackerWidgetExtension */ = {
+ isa = PBXNativeTarget;
+ buildConfigurationList = 66930A302F3096E20026DBE3 /* Build configuration list for PBXNativeTarget "RabbitTrackerWidgetExtension" */;
+ buildPhases = (
+ 66930A122F3096DE0026DBE3 /* Sources */,
+ 66930A132F3096DE0026DBE3 /* Frameworks */,
+ 66930A142F3096DE0026DBE3 /* Resources */,
+ );
+ buildRules = (
+ );
+ dependencies = (
+ );
+ name = RabbitTrackerWidgetExtension;
+ productName = RabbitTrackerWidgetExtension;
+ productReference = 66930A162F3096DE0026DBE3 /* RabbitTrackerWidgetExtension.appex */;
+ productType = "com.apple.product-type.app-extension";
+ };
/* End PBXNativeTarget section */
/* Begin PBXProject section */
83CBB9F71A601CBA00E9B192 /* Project object */ = {
isa = PBXProject;
attributes = {
+ LastSwiftUpdateCheck = 2620;
LastUpgradeCheck = 1130;
TargetAttributes = {
13B07F861A680F5B00A75B9A = {
LastSwiftMigration = 1250;
};
+ 66930A152F3096DE0026DBE3 = {
+ CreatedOnToolsVersion = 26.2;
+ };
};
};
buildConfigurationList = 83CBB9FA1A601CBA00E9B192 /* Build configuration list for PBXProject "rabbittracker" */;
@@ -184,6 +276,7 @@
projectRoot = "";
targets = (
13B07F861A680F5B00A75B9A /* rabbittracker */,
+ 66930A152F3096DE0026DBE3 /* RabbitTrackerWidgetExtension */,
);
};
/* End PBXProject section */
@@ -200,6 +293,14 @@
);
runOnlyForDeploymentPostprocessing = 0;
};
+ 66930A142F3096DE0026DBE3 /* Resources */ = {
+ isa = PBXResourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ 66930A3E2F30A11B0026DBE3 /* Assets.xcassets in Resources */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
/* End PBXResourcesBuildPhase section */
/* Begin PBXShellScriptBuildPhase section */
@@ -299,6 +400,7 @@
"${PODS_CONFIGURATION_BUILD_DIR}/EXConstants/ExpoConstants_privacy.bundle",
"${PODS_CONFIGURATION_BUILD_DIR}/ExpoFileSystem/ExpoFileSystem_privacy.bundle",
"${PODS_CONFIGURATION_BUILD_DIR}/ExpoSystemUI/ExpoSystemUI_privacy.bundle",
+ "${PODS_CONFIGURATION_BUILD_DIR}/RNCAsyncStorage/RNCAsyncStorage_resources.bundle",
"${PODS_CONFIGURATION_BUILD_DIR}/RNSVG/RNSVGFilters.bundle",
"${PODS_CONFIGURATION_BUILD_DIR}/React-Core/React-Core_privacy.bundle",
"${PODS_CONFIGURATION_BUILD_DIR}/React-cxxreact/React-cxxreact_privacy.bundle",
@@ -309,6 +411,7 @@
"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/ExpoConstants_privacy.bundle",
"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/ExpoFileSystem_privacy.bundle",
"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/ExpoSystemUI_privacy.bundle",
+ "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/RNCAsyncStorage_resources.bundle",
"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/RNSVGFilters.bundle",
"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/React-Core_privacy.bundle",
"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/React-cxxreact_privacy.bundle",
@@ -330,8 +433,28 @@
);
runOnlyForDeploymentPostprocessing = 0;
};
+ 66930A122F3096DE0026DBE3 /* Sources */ = {
+ isa = PBXSourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ 66930A392F30A11B0026DBE3 /* AppIntent.swift in Sources */,
+ 66930A3A2F30A11B0026DBE3 /* RabbitTrackerWidget.swift in Sources */,
+ 66930A3B2F30A11B0026DBE3 /* RabbitTrackerWidgetBundle.swift in Sources */,
+ 66930A3C2F30A11B0026DBE3 /* RabbitTrackerWidgetControl.swift in Sources */,
+ 66930A3D2F30A11B0026DBE3 /* RabbitTrackerWidgetLiveActivity.swift in Sources */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
/* End PBXSourcesBuildPhase section */
+/* Begin PBXTargetDependency section */
+ 66930A2A2F3096E20026DBE3 /* PBXTargetDependency */ = {
+ isa = PBXTargetDependency;
+ target = 66930A152F3096DE0026DBE3 /* RabbitTrackerWidgetExtension */;
+ targetProxy = 66930A292F3096E20026DBE3 /* PBXContainerItemProxy */;
+ };
+/* End PBXTargetDependency section */
+
/* Begin XCBuildConfiguration section */
13B07F941A680F5B00A75B9A /* Debug */ = {
isa = XCBuildConfiguration;
@@ -341,6 +464,7 @@
CLANG_ENABLE_MODULES = YES;
CODE_SIGN_ENTITLEMENTS = rabbittracker/rabbittracker.entitlements;
CURRENT_PROJECT_VERSION = 1;
+ DEVELOPMENT_TEAM = U92Z2DY4L2;
ENABLE_BITCODE = NO;
GCC_PREPROCESSOR_DEFINITIONS = (
"$(inherited)",
@@ -359,7 +483,7 @@
"-lc++",
);
OTHER_SWIFT_FLAGS = "$(inherited) -D EXPO_CONFIGURATION_DEBUG";
- PRODUCT_BUNDLE_IDENTIFIER = "com.anonymous.rabbit-tracker";
+ PRODUCT_BUNDLE_IDENTIFIER = "com.fezoo.rabbit-tracker";
PRODUCT_NAME = rabbittracker;
SWIFT_OBJC_BRIDGING_HEADER = "rabbittracker/rabbittracker-Bridging-Header.h";
SWIFT_OPTIMIZATION_LEVEL = "-Onone";
@@ -377,6 +501,7 @@
CLANG_ENABLE_MODULES = YES;
CODE_SIGN_ENTITLEMENTS = rabbittracker/rabbittracker.entitlements;
CURRENT_PROJECT_VERSION = 1;
+ DEVELOPMENT_TEAM = U92Z2DY4L2;
INFOPLIST_FILE = rabbittracker/Info.plist;
IPHONEOS_DEPLOYMENT_TARGET = 15.1;
LD_RUNPATH_SEARCH_PATHS = (
@@ -390,7 +515,7 @@
"-lc++",
);
OTHER_SWIFT_FLAGS = "$(inherited) -D EXPO_CONFIGURATION_RELEASE";
- PRODUCT_BUNDLE_IDENTIFIER = "com.anonymous.rabbit-tracker";
+ PRODUCT_BUNDLE_IDENTIFIER = "com.fezoo.rabbit-tracker";
PRODUCT_NAME = rabbittracker;
SWIFT_OBJC_BRIDGING_HEADER = "rabbittracker/rabbittracker-Bridging-Header.h";
SWIFT_VERSION = 5.0;
@@ -399,6 +524,101 @@
};
name = Release;
};
+ 66930A2D2F3096E20026DBE3 /* Debug */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES;
+ ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor;
+ ASSETCATALOG_COMPILER_WIDGET_BACKGROUND_COLOR_NAME = WidgetBackground;
+ CLANG_ANALYZER_NONNULL = YES;
+ CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
+ CLANG_CXX_LANGUAGE_STANDARD = "gnu++20";
+ CLANG_ENABLE_OBJC_WEAK = YES;
+ CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
+ CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;
+ CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
+ CODE_SIGN_STYLE = Automatic;
+ CURRENT_PROJECT_VERSION = 1;
+ DEBUG_INFORMATION_FORMAT = dwarf;
+ DEVELOPMENT_TEAM = U92Z2DY4L2;
+ ENABLE_USER_SCRIPT_SANDBOXING = YES;
+ GCC_C_LANGUAGE_STANDARD = gnu17;
+ GENERATE_INFOPLIST_FILE = YES;
+ INFOPLIST_FILE = RabbitTrackerWidget/Info.plist;
+ INFOPLIST_KEY_CFBundleDisplayName = RabbitTrackerWidget;
+ INFOPLIST_KEY_NSHumanReadableCopyright = "";
+ IPHONEOS_DEPLOYMENT_TARGET = 26.2;
+ LD_RUNPATH_SEARCH_PATHS = (
+ "$(inherited)",
+ "@executable_path/Frameworks",
+ "@executable_path/../../Frameworks",
+ );
+ LOCALIZATION_PREFERS_STRING_CATALOGS = YES;
+ MARKETING_VERSION = 1.0;
+ MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE;
+ MTL_FAST_MATH = YES;
+ OTHER_SWIFT_FLAGS = "$(inherited) -D EXPO_CONFIGURATION_DEBUG";
+ PRODUCT_BUNDLE_IDENTIFIER = "com.fezoo.rabbit-tracker.RabbitTrackerWidget";
+ PRODUCT_NAME = "$(TARGET_NAME)";
+ SKIP_INSTALL = YES;
+ STRING_CATALOG_GENERATE_SYMBOLS = YES;
+ SWIFT_ACTIVE_COMPILATION_CONDITIONS = "DEBUG $(inherited)";
+ SWIFT_APPROACHABLE_CONCURRENCY = YES;
+ SWIFT_EMIT_LOC_STRINGS = YES;
+ SWIFT_OPTIMIZATION_LEVEL = "-Onone";
+ SWIFT_UPCOMING_FEATURE_MEMBER_IMPORT_VISIBILITY = YES;
+ SWIFT_VERSION = 5.0;
+ TARGETED_DEVICE_FAMILY = "1,2";
+ };
+ name = Debug;
+ };
+ 66930A2E2F3096E20026DBE3 /* Release */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES;
+ ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor;
+ ASSETCATALOG_COMPILER_WIDGET_BACKGROUND_COLOR_NAME = WidgetBackground;
+ CLANG_ANALYZER_NONNULL = YES;
+ CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
+ CLANG_CXX_LANGUAGE_STANDARD = "gnu++20";
+ CLANG_ENABLE_OBJC_WEAK = YES;
+ CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
+ CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;
+ CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
+ CODE_SIGN_STYLE = Automatic;
+ COPY_PHASE_STRIP = NO;
+ CURRENT_PROJECT_VERSION = 1;
+ DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
+ DEVELOPMENT_TEAM = U92Z2DY4L2;
+ ENABLE_USER_SCRIPT_SANDBOXING = YES;
+ GCC_C_LANGUAGE_STANDARD = gnu17;
+ GENERATE_INFOPLIST_FILE = YES;
+ INFOPLIST_FILE = RabbitTrackerWidget/Info.plist;
+ INFOPLIST_KEY_CFBundleDisplayName = RabbitTrackerWidget;
+ INFOPLIST_KEY_NSHumanReadableCopyright = "";
+ IPHONEOS_DEPLOYMENT_TARGET = 26.2;
+ LD_RUNPATH_SEARCH_PATHS = (
+ "$(inherited)",
+ "@executable_path/Frameworks",
+ "@executable_path/../../Frameworks",
+ );
+ LOCALIZATION_PREFERS_STRING_CATALOGS = YES;
+ MARKETING_VERSION = 1.0;
+ MTL_FAST_MATH = YES;
+ OTHER_SWIFT_FLAGS = "$(inherited) -D EXPO_CONFIGURATION_RELEASE";
+ PRODUCT_BUNDLE_IDENTIFIER = "com.fezoo.rabbit-tracker.RabbitTrackerWidget";
+ PRODUCT_NAME = "$(TARGET_NAME)";
+ SKIP_INSTALL = YES;
+ STRING_CATALOG_GENERATE_SYMBOLS = YES;
+ SWIFT_APPROACHABLE_CONCURRENCY = YES;
+ SWIFT_COMPILATION_MODE = wholemodule;
+ SWIFT_EMIT_LOC_STRINGS = YES;
+ SWIFT_UPCOMING_FEATURE_MEMBER_IMPORT_VISIBILITY = YES;
+ SWIFT_VERSION = 5.0;
+ TARGETED_DEVICE_FAMILY = "1,2";
+ };
+ name = Release;
+ };
83CBBA201A601CBA00E9B192 /* Debug */ = {
isa = XCBuildConfiguration;
buildSettings = {
@@ -529,6 +749,15 @@
defaultConfigurationIsVisible = 0;
defaultConfigurationName = Release;
};
+ 66930A302F3096E20026DBE3 /* Build configuration list for PBXNativeTarget "RabbitTrackerWidgetExtension" */ = {
+ isa = XCConfigurationList;
+ buildConfigurations = (
+ 66930A2D2F3096E20026DBE3 /* Debug */,
+ 66930A2E2F3096E20026DBE3 /* Release */,
+ );
+ defaultConfigurationIsVisible = 0;
+ defaultConfigurationName = Release;
+ };
83CBB9FA1A601CBA00E9B192 /* Build configuration list for PBXProject "rabbittracker" */ = {
isa = XCConfigurationList;
buildConfigurations = (
diff --git a/ios/rabbittracker/Info.plist b/ios/rabbittracker/Info.plist
index 9298cf8..df024ef 100644
--- a/ios/rabbittracker/Info.plist
+++ b/ios/rabbittracker/Info.plist
@@ -1,76 +1,76 @@
-
- CADisableMinimumFrameDurationOnPhone
-
- CFBundleDevelopmentRegion
- $(DEVELOPMENT_LANGUAGE)
- CFBundleDisplayName
- rabbit-tracker
- CFBundleExecutable
- $(EXECUTABLE_NAME)
- CFBundleIdentifier
- $(PRODUCT_BUNDLE_IDENTIFIER)
- CFBundleInfoDictionaryVersion
- 6.0
- CFBundleName
- $(PRODUCT_NAME)
- CFBundlePackageType
- $(PRODUCT_BUNDLE_PACKAGE_TYPE)
- CFBundleShortVersionString
- 1.0.0
- CFBundleSignature
- ????
- CFBundleURLTypes
-
-
- CFBundleURLSchemes
-
- com.anonymous.rabbit-tracker
-
-
-
- CFBundleVersion
- 1
- LSMinimumSystemVersion
- 12.0
- LSRequiresIPhoneOS
-
- NSAppTransportSecurity
-
- NSAllowsArbitraryLoads
-
- NSAllowsLocalNetworking
-
-
- RCTNewArchEnabled
-
- UILaunchStoryboardName
- SplashScreen
- UIRequiredDeviceCapabilities
-
- arm64
-
- UIRequiresFullScreen
-
- UIStatusBarStyle
- UIStatusBarStyleDefault
- UISupportedInterfaceOrientations
-
- UIInterfaceOrientationPortrait
- UIInterfaceOrientationPortraitUpsideDown
-
- UISupportedInterfaceOrientations~ipad
-
- UIInterfaceOrientationPortrait
- UIInterfaceOrientationPortraitUpsideDown
- UIInterfaceOrientationLandscapeLeft
- UIInterfaceOrientationLandscapeRight
-
- UIUserInterfaceStyle
- Light
- UIViewControllerBasedStatusBarAppearance
-
-
-
\ No newline at end of file
+
+ CADisableMinimumFrameDurationOnPhone
+
+ CFBundleDevelopmentRegion
+ $(DEVELOPMENT_LANGUAGE)
+ CFBundleDisplayName
+ rabbit-tracker
+ CFBundleExecutable
+ $(EXECUTABLE_NAME)
+ CFBundleIdentifier
+ $(PRODUCT_BUNDLE_IDENTIFIER)
+ CFBundleInfoDictionaryVersion
+ 6.0
+ CFBundleName
+ $(PRODUCT_NAME)
+ CFBundlePackageType
+ $(PRODUCT_BUNDLE_PACKAGE_TYPE)
+ CFBundleShortVersionString
+ 1.0.0
+ CFBundleSignature
+ ????
+ CFBundleURLTypes
+
+
+ CFBundleURLSchemes
+
+ com.anonymous.rabbit-tracker
+
+
+
+ CFBundleVersion
+ 1
+ LSMinimumSystemVersion
+ 12.0
+ LSRequiresIPhoneOS
+
+ NSAppTransportSecurity
+
+ NSAllowsArbitraryLoads
+
+ NSAllowsLocalNetworking
+
+
+ RCTNewArchEnabled
+
+ UILaunchStoryboardName
+ SplashScreen
+ UIRequiredDeviceCapabilities
+
+ arm64
+
+ UIRequiresFullScreen
+
+ UIStatusBarStyle
+ UIStatusBarStyleDefault
+ UISupportedInterfaceOrientations
+
+ UIInterfaceOrientationPortrait
+ UIInterfaceOrientationPortraitUpsideDown
+
+ UISupportedInterfaceOrientations~ipad
+
+ UIInterfaceOrientationPortrait
+ UIInterfaceOrientationPortraitUpsideDown
+ UIInterfaceOrientationLandscapeLeft
+ UIInterfaceOrientationLandscapeRight
+
+ UIUserInterfaceStyle
+ Light
+ UIViewControllerBasedStatusBarAppearance
+
+
+
diff --git a/package-lock.json b/package-lock.json
index 25096c5..f87376a 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -1395,7 +1395,6 @@
"version": "7.28.6",
"resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.28.6.tgz",
"integrity": "sha512-05WQkdpL9COIMz4LjTxGpPNCdlpyimKppYNoJ5Di5EUObifl8t4tuLuUBBZEpoLYOmfvIWrsp9fCl0HoPRVTdA==",
- "peer": true,
"engines": {
"node": ">=6.9.0"
}
@@ -2595,7 +2594,6 @@
"resolved": "https://registry.npmjs.org/@react-native-community/datetimepicker/-/datetimepicker-8.4.4.tgz",
"integrity": "sha512-bc4ZixEHxZC9/qf5gbdYvIJiLZ5CLmEsC3j+Yhe1D1KC/3QhaIfGDVdUcid0PdlSoGOSEq4VlB93AWyetEyBSQ==",
"license": "MIT",
- "peer": true,
"dependencies": {
"invariant": "^2.2.4"
},
@@ -2911,7 +2909,6 @@
"version": "7.1.28",
"resolved": "https://registry.npmjs.org/@react-navigation/native/-/native-7.1.28.tgz",
"integrity": "sha512-d1QDn+KNHfHGt3UIwOZvupvdsDdiHYZBEj7+wL2yDVo3tMezamYy60H9s3EnNVE1Ae1ty0trc7F2OKqo/RmsdQ==",
- "peer": true,
"dependencies": {
"@react-navigation/core": "^7.14.0",
"escape-string-regexp": "^4.0.0",
@@ -3095,7 +3092,6 @@
"resolved": "https://registry.npmjs.org/@types/react/-/react-19.1.17.tgz",
"integrity": "sha512-Qec1E3mhALmaspIrhWt9jkQMNdw6bReVu64mjvhbhq2NFPftLPVr+l1SZgmw/66WwBNpDh7ao5AT6gF5v41PFA==",
"devOptional": true,
- "peer": true,
"dependencies": {
"csstype": "^3.0.2"
}
@@ -3163,7 +3159,6 @@
"integrity": "sha512-BtE0k6cjwjLZoZixN0t5AKP0kSzlGu7FctRXYuPAm//aaiZhmfq1JwdYpYr1brzEspYyFeF+8XF5j2VK6oalrA==",
"dev": true,
"license": "MIT",
- "peer": true,
"dependencies": {
"@typescript-eslint/scope-manager": "8.54.0",
"@typescript-eslint/types": "8.54.0",
@@ -3436,7 +3431,6 @@
"version": "8.15.0",
"resolved": "https://registry.npmjs.org/acorn/-/acorn-8.15.0.tgz",
"integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==",
- "peer": true,
"bin": {
"acorn": "bin/acorn"
},
@@ -4086,7 +4080,6 @@
"url": "https://github.com/sponsors/ai"
}
],
- "peer": true,
"dependencies": {
"baseline-browser-mapping": "^2.9.0",
"caniuse-lite": "^1.0.30001759",
@@ -5298,7 +5291,6 @@
"deprecated": "This version is no longer supported. Please see https://eslint.org/version-support for other options.",
"dev": true,
"license": "MIT",
- "peer": true,
"dependencies": {
"@eslint-community/eslint-utils": "^4.2.0",
"@eslint-community/regexpp": "^4.6.1",
@@ -5749,7 +5741,6 @@
"version": "54.0.32",
"resolved": "https://registry.npmjs.org/expo/-/expo-54.0.32.tgz",
"integrity": "sha512-yL9eTxiQ/QKKggVDAWO5CLjUl6IS0lPYgEvC3QM4q4fxd6rs7ks3DnbXSGVU3KNFoY/7cRNYihvd0LKYP+MCXA==",
- "peer": true,
"dependencies": {
"@babel/runtime": "^7.20.0",
"@expo/cli": "54.0.22",
@@ -5815,7 +5806,6 @@
"version": "18.0.13",
"resolved": "https://registry.npmjs.org/expo-constants/-/expo-constants-18.0.13.tgz",
"integrity": "sha512-FnZn12E1dRYKDHlAdIyNFhBurKTS3F9CrfrBDJI5m3D7U17KBHMQ6JEfYlSj7LG7t+Ulr+IKaj58L1k5gBwTcQ==",
- "peer": true,
"dependencies": {
"@expo/config": "~12.0.13",
"@expo/env": "~2.0.8"
@@ -5838,7 +5828,6 @@
"version": "14.0.11",
"resolved": "https://registry.npmjs.org/expo-font/-/expo-font-14.0.11.tgz",
"integrity": "sha512-ga0q61ny4s/kr4k8JX9hVH69exVSIfcIc19+qZ7gt71Mqtm7xy2c6kwsPTCyhBW2Ro5yXTT8EaZOpuRi35rHbg==",
- "peer": true,
"dependencies": {
"fontfaceobserver": "^2.1.0"
},
@@ -5861,7 +5850,6 @@
"version": "8.0.11",
"resolved": "https://registry.npmjs.org/expo-linking/-/expo-linking-8.0.11.tgz",
"integrity": "sha512-+VSaNL5om3kOp/SSKO5qe6cFgfSIWnnQDSbA7XLs3ECkYzXRquk5unxNS3pg7eK5kNUmQ4kgLI7MhTggAEUBLA==",
- "peer": true,
"dependencies": {
"expo-constants": "~18.0.12",
"invariant": "^2.2.4"
@@ -7827,7 +7815,6 @@
"version": "1.21.7",
"resolved": "https://registry.npmjs.org/jiti/-/jiti-1.21.7.tgz",
"integrity": "sha512-/imKNG4EbWNrVjoNC/1H5/9GFy+tqjGBHCaSsN+P2RnPqjsLmv6UD3Ej+Kj8nBWaRAwyk7kK5ZUc+OEatnTR3A==",
- "peer": true,
"bin": {
"jiti": "bin/jiti.js"
}
@@ -9824,7 +9811,6 @@
"url": "https://github.com/sponsors/ai"
}
],
- "peer": true,
"dependencies": {
"nanoid": "^3.3.7",
"picocolors": "^1.1.1",
@@ -9971,7 +9957,6 @@
"resolved": "https://registry.npmjs.org/prettier/-/prettier-3.8.1.tgz",
"integrity": "sha512-UOnG6LftzbdaHZcKoPFtOcCKztrQ57WkHDeRD9t/PTQtmT0NHSeWWepj6pS0z/N7+08BHFDQVUrfmfMRcZwbMg==",
"dev": true,
- "peer": true,
"bin": {
"prettier": "bin/prettier.cjs"
},
@@ -10247,7 +10232,6 @@
"version": "19.1.0",
"resolved": "https://registry.npmjs.org/react/-/react-19.1.0.tgz",
"integrity": "sha512-FS+XFBNvn3GTAWq26joslQgWNoFu08F4kl0J4CgdNKADkdSGXQyTCnKteIAJy96Br6YbpEU1LSzV5dYtjMkMDg==",
- "peer": true,
"engines": {
"node": ">=0.10.0"
}
@@ -10265,7 +10249,6 @@
"version": "19.1.0",
"resolved": "https://registry.npmjs.org/react-dom/-/react-dom-19.1.0.tgz",
"integrity": "sha512-Xs1hdnE+DyKgeHJeJznQmYMIBG3TKIHJJT95Q58nHLSrElKlGQqDTR2HQ9fx5CN/Gk6Vh/kupBTDLU11/nDk/g==",
- "peer": true,
"dependencies": {
"scheduler": "^0.26.0"
},
@@ -10294,7 +10277,6 @@
"resolved": "https://registry.npmjs.org/react-hook-form/-/react-hook-form-7.71.1.tgz",
"integrity": "sha512-9SUJKCGKo8HUSsCO+y0CtqkqI5nNuaDqTxyqPsZPqIwudpj4rCrAz/jZV+jn57bx5gtZKOh3neQu94DXMc+w5w==",
"license": "MIT",
- "peer": true,
"engines": {
"node": ">=18.0.0"
},
@@ -10315,7 +10297,6 @@
"version": "0.81.5",
"resolved": "https://registry.npmjs.org/react-native/-/react-native-0.81.5.tgz",
"integrity": "sha512-1w+/oSjEXZjMqsIvmkCRsOc8UBYv163bTWKTI8+1mxztvQPhCRYGTvZ/PL1w16xXHneIj/SLGfxWg2GWN2uexw==",
- "peer": true,
"dependencies": {
"@jest/create-cache-key-function": "^29.7.0",
"@react-native/assets-registry": "0.81.5",
@@ -10663,7 +10644,6 @@
"version": "4.1.6",
"resolved": "https://registry.npmjs.org/react-native-reanimated/-/react-native-reanimated-4.1.6.tgz",
"integrity": "sha512-F+ZJBYiok/6Jzp1re75F/9aLzkgoQCOh4yxrnwATa8392RvM3kx+fiXXFvwcgE59v48lMwd9q0nzF1oJLXpfxQ==",
- "peer": true,
"dependencies": {
"react-native-is-edge-to-edge": "^1.2.1",
"semver": "7.7.2"
@@ -10690,7 +10670,6 @@
"version": "5.6.2",
"resolved": "https://registry.npmjs.org/react-native-safe-area-context/-/react-native-safe-area-context-5.6.2.tgz",
"integrity": "sha512-4XGqMNj5qjUTYywJqpdWZ9IG8jgkS3h06sfVjfw5yZQZfWnRFXczi0GnYyFyCc2EBps/qFmoCH8fez//WumdVg==",
- "peer": true,
"peerDependencies": {
"react": "*",
"react-native": "*"
@@ -10700,7 +10679,6 @@
"version": "4.16.0",
"resolved": "https://registry.npmjs.org/react-native-screens/-/react-native-screens-4.16.0.tgz",
"integrity": "sha512-yIAyh7F/9uWkOzCi1/2FqvNvK6Wb9Y1+Kzn16SuGfN9YFJDTbwlzGRvePCNTOX0recpLQF3kc2FmvMUhyTCH1Q==",
- "peer": true,
"dependencies": {
"react-freeze": "^1.0.0",
"react-native-is-edge-to-edge": "^1.2.1",
@@ -10715,7 +10693,6 @@
"version": "15.12.1",
"resolved": "https://registry.npmjs.org/react-native-svg/-/react-native-svg-15.12.1.tgz",
"integrity": "sha512-vCuZJDf8a5aNC2dlMovEv4Z0jjEUET53lm/iILFnFewa15b4atjVxU6Wirm6O9y6dEsdjDZVD7Q3QM4T1wlI8g==",
- "peer": true,
"dependencies": {
"css-select": "^5.1.0",
"css-tree": "^1.1.3",
@@ -10730,7 +10707,6 @@
"version": "0.21.2",
"resolved": "https://registry.npmjs.org/react-native-web/-/react-native-web-0.21.2.tgz",
"integrity": "sha512-SO2t9/17zM4iEnFvlu2DA9jqNbzNhoUP+AItkoCOyFmDMOhUnBBznBDCYN92fGdfAkfQlWzPoez6+zLxFNsZEg==",
- "peer": true,
"dependencies": {
"@babel/runtime": "^7.18.6",
"@react-native/normalize-colors": "^0.74.1",
@@ -10883,7 +10859,6 @@
"version": "0.14.2",
"resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.14.2.tgz",
"integrity": "sha512-jCvmsr+1IUSMUyzOkRcvnVbX3ZYC6g9TDrDbFuFmRDq7PD4yaGbLKNQL6k2jnArV8hjYxh7hVhAZB6s9HDGpZA==",
- "peer": true,
"engines": {
"node": ">=0.10.0"
}
@@ -12064,7 +12039,6 @@
"version": "3.4.19",
"resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.4.19.tgz",
"integrity": "sha512-3ofp+LL8E+pK/JuPLPggVAIaEuhvIz4qNcf3nA1Xn2o/7fb7s/TYpHhwGDv1ZU3PkBluUVaF8PyCHcm48cKLWQ==",
- "peer": true,
"dependencies": {
"@alloc/quick-lru": "^5.2.0",
"arg": "^5.0.2",
@@ -12292,7 +12266,6 @@
"version": "4.0.3",
"resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz",
"integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==",
- "peer": true,
"engines": {
"node": ">=12"
},
@@ -12464,7 +12437,6 @@
"resolved": "https://registry.npmjs.org/typescript/-/typescript-5.9.3.tgz",
"integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==",
"dev": true,
- "peer": true,
"bin": {
"tsc": "bin/tsc",
"tsserver": "bin/tsserver"
@@ -13245,7 +13217,6 @@
"resolved": "https://registry.npmjs.org/zod/-/zod-4.3.6.tgz",
"integrity": "sha512-rftlrkhHZOcjDwkGlnUtZZkvaPHCsDATp4pGpuOOMDaTdDDXF91wuVDJoWoPsKX/3YPQ5fHuF3STjcYyKr+Qhg==",
"license": "MIT",
- "peer": true,
"funding": {
"url": "https://github.com/sponsors/colinhacks"
}