From 56d9f3e6101309aa8a0c64d3ff013051a4c9f534 Mon Sep 17 00:00:00 2001 From: Ian <105128049+minijae011030@users.noreply.github.com> Date: Mon, 2 Feb 2026 18:35:00 +0900 Subject: [PATCH 1/2] =?UTF-8?q?chore:=20ios=20=EC=9C=84=EC=A0=AF=20?= =?UTF-8?q?=EC=84=B8=ED=8C=85?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ios/Podfile.lock | 52 ++++ ios/RabbitTrackerWidget/AppIntent.swift | 18 ++ .../AccentColor.colorset/Contents.json | 11 + .../AppIcon.appiconset/Contents.json | 35 +++ .../Assets.xcassets/Contents.json | 6 + .../WidgetBackground.colorset/Contents.json | 11 + ios/RabbitTrackerWidget/Info.plist | 13 + .../RabbitTrackerWidget.swift | 62 +++++ .../RabbitTrackerWidgetBundle.swift | 18 ++ .../RabbitTrackerWidgetControl.swift | 77 ++++++ .../RabbitTrackerWidgetLiveActivity.swift | 80 ++++++ ios/rabbittracker.xcodeproj/project.pbxproj | 237 +++++++++++++++++- ios/rabbittracker/Info.plist | 146 +++++------ package-lock.json | 29 --- 14 files changed, 689 insertions(+), 106 deletions(-) create mode 100644 ios/RabbitTrackerWidget/AppIntent.swift create mode 100644 ios/RabbitTrackerWidget/Assets.xcassets/AccentColor.colorset/Contents.json create mode 100644 ios/RabbitTrackerWidget/Assets.xcassets/AppIcon.appiconset/Contents.json create mode 100644 ios/RabbitTrackerWidget/Assets.xcassets/Contents.json create mode 100644 ios/RabbitTrackerWidget/Assets.xcassets/WidgetBackground.colorset/Contents.json create mode 100644 ios/RabbitTrackerWidget/Info.plist create mode 100644 ios/RabbitTrackerWidget/RabbitTrackerWidget.swift create mode 100644 ios/RabbitTrackerWidget/RabbitTrackerWidgetBundle.swift create mode 100644 ios/RabbitTrackerWidget/RabbitTrackerWidgetControl.swift create mode 100644 ios/RabbitTrackerWidget/RabbitTrackerWidgetLiveActivity.swift 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" } From 8a51528a71ee51ff7f5e623f7ea18dff23ae6d12 Mon Sep 17 00:00:00 2001 From: Ian <105128049+minijae011030@users.noreply.github.com> Date: Mon, 2 Feb 2026 18:43:24 +0900 Subject: [PATCH 2/2] =?UTF-8?q?chore:=20ios=20widget=20md=20=EC=B6=94?= =?UTF-8?q?=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .husky/pre-commit | 6 ----- ios-widge.md | 68 +++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 68 insertions(+), 6 deletions(-) create mode 100644 ios-widge.md 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. ์›ํ•˜๋Š” ์‚ฌ์ด์ฆˆ์˜ ์œ„์ ฏ ์ถ”๊ฐ€