From a486b97a2aa5be262981127a0f5b3671faed22f5 Mon Sep 17 00:00:00 2001 From: Oleksandr Kozachuk Date: Mon, 16 Jun 2025 14:25:00 +0200 Subject: [PATCH] Add empty Xcode project (remove old unsupported widget) --- .DS_Store | Bin 0 -> 6148 bytes CoBiE/CoBiE Analog Clock/AppIntent.swift | 18 + .../AccentColor.colorset/Contents.json | 11 + .../AppIcon.appiconset/Contents.json | 58 ++ .../Assets.xcassets/Contents.json | 6 + .../WidgetBackground.colorset/Contents.json | 11 + .../CoBiE_Analog_Clock.swift | 67 ++ .../CoBiE_Analog_ClockBundle.swift | 17 + .../CoBiE_Analog_ClockControl.swift | 77 ++ CoBiE/CoBiE Analog Clock/Info.plist | 11 + CoBiE/CoBiE.xcodeproj/project.pbxproj | 807 ++++++++++++++++++ .../contents.xcworkspacedata | 7 + .../UserInterfaceState.xcuserstate | Bin 0 -> 21425 bytes .../xcschemes/xcschememanagement.plist | 19 + .../AccentColor.colorset/Contents.json | 11 + .../AppIcon.appiconset/Contents.json | 85 ++ CoBiE/CoBiE/Assets.xcassets/Contents.json | 6 + CoBiE/CoBiE/CoBiEApp.swift | 32 + CoBiE/CoBiE/ContentView.swift | 66 ++ CoBiE/CoBiE/Item.swift | 18 + CoBiE/CoBiETests/CoBiETests.swift | 16 + CoBiE/CoBiEUITests/CoBiEUITests.swift | 41 + .../CoBiEUITestsLaunchTests.swift | 33 + build-widget.sh | 19 - macos-widget/Info.plist | 18 - macos-widget/index.html | 23 - 26 files changed, 1417 insertions(+), 60 deletions(-) create mode 100644 .DS_Store create mode 100644 CoBiE/CoBiE Analog Clock/AppIntent.swift create mode 100644 CoBiE/CoBiE Analog Clock/Assets.xcassets/AccentColor.colorset/Contents.json create mode 100644 CoBiE/CoBiE Analog Clock/Assets.xcassets/AppIcon.appiconset/Contents.json create mode 100644 CoBiE/CoBiE Analog Clock/Assets.xcassets/Contents.json create mode 100644 CoBiE/CoBiE Analog Clock/Assets.xcassets/WidgetBackground.colorset/Contents.json create mode 100644 CoBiE/CoBiE Analog Clock/CoBiE_Analog_Clock.swift create mode 100644 CoBiE/CoBiE Analog Clock/CoBiE_Analog_ClockBundle.swift create mode 100644 CoBiE/CoBiE Analog Clock/CoBiE_Analog_ClockControl.swift create mode 100644 CoBiE/CoBiE Analog Clock/Info.plist create mode 100644 CoBiE/CoBiE.xcodeproj/project.pbxproj create mode 100644 CoBiE/CoBiE.xcodeproj/project.xcworkspace/contents.xcworkspacedata create mode 100644 CoBiE/CoBiE.xcodeproj/project.xcworkspace/xcuserdata/ok.xcuserdatad/UserInterfaceState.xcuserstate create mode 100644 CoBiE/CoBiE.xcodeproj/xcuserdata/ok.xcuserdatad/xcschemes/xcschememanagement.plist create mode 100644 CoBiE/CoBiE/Assets.xcassets/AccentColor.colorset/Contents.json create mode 100644 CoBiE/CoBiE/Assets.xcassets/AppIcon.appiconset/Contents.json create mode 100644 CoBiE/CoBiE/Assets.xcassets/Contents.json create mode 100644 CoBiE/CoBiE/CoBiEApp.swift create mode 100644 CoBiE/CoBiE/ContentView.swift create mode 100644 CoBiE/CoBiE/Item.swift create mode 100644 CoBiE/CoBiETests/CoBiETests.swift create mode 100644 CoBiE/CoBiEUITests/CoBiEUITests.swift create mode 100644 CoBiE/CoBiEUITests/CoBiEUITestsLaunchTests.swift delete mode 100755 build-widget.sh delete mode 100644 macos-widget/Info.plist delete mode 100644 macos-widget/index.html diff --git a/.DS_Store b/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..3f77a9e29f4a30492356baac96c57b478c9c0c8d GIT binary patch literal 6148 zcmeHK%}&EG40gtlia4<2ZsZA&_6DJJPtX@YTcv`?mI?7Aaq1&+;?9ZJ;&W`FO$CNH zpo!U%^QErc#$T$qCL&kfHxr@}5fxCz!4ZZ}gzvNVWT2Kqpv%vg(gj6IG^d-Mw;6Vk z0p7b4>{_Cdu4#S$&ghXEYUwVvlX{*OD_MSg*&eY-RW*xg2G1g#zCMlV?ffTE%`c)> zSL>^L=0$GF=b^q`#K7C{K?x_P&4<%BJMB SimpleEntry { + SimpleEntry(date: Date(), configuration: ConfigurationAppIntent()) + } + + func snapshot(for configuration: ConfigurationAppIntent, in context: Context) async -> SimpleEntry { + SimpleEntry(date: Date(), configuration: configuration) + } + + func timeline(for configuration: ConfigurationAppIntent, in context: Context) async -> Timeline { + var entries: [SimpleEntry] = [] + + // Generate a timeline consisting of five entries an hour apart, starting from the current date. + let currentDate = Date() + for hourOffset in 0 ..< 5 { + let entryDate = Calendar.current.date(byAdding: .hour, value: hourOffset, to: currentDate)! + let entry = SimpleEntry(date: entryDate, configuration: configuration) + entries.append(entry) + } + + return Timeline(entries: entries, policy: .atEnd) + } + +// func relevances() async -> WidgetRelevances { +// // Generate a list containing the contexts this widget is relevant in. +// } +} + +struct SimpleEntry: TimelineEntry { + let date: Date + let configuration: ConfigurationAppIntent +} + +struct CoBiE_Analog_ClockEntryView : View { + var entry: Provider.Entry + + var body: some View { + VStack { + Text("Time:") + Text(entry.date, style: .time) + + Text("Favorite Emoji:") + Text(entry.configuration.favoriteEmoji) + } + } +} + +struct CoBiE_Analog_Clock: Widget { + let kind: String = "CoBiE_Analog_Clock" + + var body: some WidgetConfiguration { + AppIntentConfiguration(kind: kind, intent: ConfigurationAppIntent.self, provider: Provider()) { entry in + CoBiE_Analog_ClockEntryView(entry: entry) + .containerBackground(.fill.tertiary, for: .widget) + } + } +} diff --git a/CoBiE/CoBiE Analog Clock/CoBiE_Analog_ClockBundle.swift b/CoBiE/CoBiE Analog Clock/CoBiE_Analog_ClockBundle.swift new file mode 100644 index 0000000..a65426d --- /dev/null +++ b/CoBiE/CoBiE Analog Clock/CoBiE_Analog_ClockBundle.swift @@ -0,0 +1,17 @@ +// +// CoBiE_Analog_ClockBundle.swift +// CoBiE Analog Clock +// +// Created by Oleksandr Kozachuk on 2025-06-16. +// + +import WidgetKit +import SwiftUI + +@main +struct CoBiE_Analog_ClockBundle: WidgetBundle { + var body: some Widget { + CoBiE_Analog_Clock() + CoBiE_Analog_ClockControl() + } +} diff --git a/CoBiE/CoBiE Analog Clock/CoBiE_Analog_ClockControl.swift b/CoBiE/CoBiE Analog Clock/CoBiE_Analog_ClockControl.swift new file mode 100644 index 0000000..04568c4 --- /dev/null +++ b/CoBiE/CoBiE Analog Clock/CoBiE_Analog_ClockControl.swift @@ -0,0 +1,77 @@ +// +// CoBiE_Analog_ClockControl.swift +// CoBiE Analog Clock +// +// Created by Oleksandr Kozachuk on 2025-06-16. +// + +import AppIntents +import SwiftUI +import WidgetKit + +struct CoBiE_Analog_ClockControl: ControlWidget { + static let kind: String = "no.kaizenkodo.CoBiE.CoBiE Analog Clock" + + 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 CoBiE_Analog_ClockControl { + struct Value { + var isRunning: Bool + var name: String + } + + struct Provider: AppIntentControlValueProvider { + func previewValue(configuration: TimerConfiguration) -> Value { + CoBiE_Analog_ClockControl.Value(isRunning: false, name: configuration.timerName) + } + + func currentValue(configuration: TimerConfiguration) async throws -> Value { + let isRunning = true // Check if the timer is running + return CoBiE_Analog_ClockControl.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/CoBiE/CoBiE Analog Clock/Info.plist b/CoBiE/CoBiE Analog Clock/Info.plist new file mode 100644 index 0000000..0f118fb --- /dev/null +++ b/CoBiE/CoBiE Analog Clock/Info.plist @@ -0,0 +1,11 @@ + + + + + NSExtension + + NSExtensionPointIdentifier + com.apple.widgetkit-extension + + + diff --git a/CoBiE/CoBiE.xcodeproj/project.pbxproj b/CoBiE/CoBiE.xcodeproj/project.pbxproj new file mode 100644 index 0000000..887a7fe --- /dev/null +++ b/CoBiE/CoBiE.xcodeproj/project.pbxproj @@ -0,0 +1,807 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 77; + objects = { + +/* Begin PBXBuildFile section */ + 4FF813CC2E00403F00D89535 /* WidgetKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4FF813CB2E00403E00D89535 /* WidgetKit.framework */; }; + 4FF813CE2E00403F00D89535 /* SwiftUI.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4FF813CD2E00403F00D89535 /* SwiftUI.framework */; }; + 4FF813DD2E00404000D89535 /* CoBiE Analog ClockExtension.appex in Embed Foundation Extensions */ = {isa = PBXBuildFile; fileRef = 4FF813C92E00403E00D89535 /* CoBiE Analog ClockExtension.appex */; settings = {ATTRIBUTES = (RemoveHeadersOnCopy, ); }; }; +/* End PBXBuildFile section */ + +/* Begin PBXContainerItemProxy section */ + 4FF813A92E003FB600D89535 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 4FF813912E003FB400D89535 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 4FF813982E003FB400D89535; + remoteInfo = CoBiE; + }; + 4FF813B32E003FB600D89535 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 4FF813912E003FB400D89535 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 4FF813982E003FB400D89535; + remoteInfo = CoBiE; + }; + 4FF813DB2E00404000D89535 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 4FF813912E003FB400D89535 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 4FF813C82E00403E00D89535; + remoteInfo = "CoBiE Analog ClockExtension"; + }; +/* End PBXContainerItemProxy section */ + +/* Begin PBXCopyFilesBuildPhase section */ + 4FF813E22E00404000D89535 /* Embed Foundation Extensions */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 2147483647; + dstPath = ""; + dstSubfolderSpec = 13; + files = ( + 4FF813DD2E00404000D89535 /* CoBiE Analog ClockExtension.appex in Embed Foundation Extensions */, + ); + name = "Embed Foundation Extensions"; + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXCopyFilesBuildPhase section */ + +/* Begin PBXFileReference section */ + 4FF813992E003FB400D89535 /* CoBiE.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = CoBiE.app; sourceTree = BUILT_PRODUCTS_DIR; }; + 4FF813A82E003FB600D89535 /* CoBiETests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = CoBiETests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; + 4FF813B22E003FB600D89535 /* CoBiEUITests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = CoBiEUITests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; + 4FF813C92E00403E00D89535 /* CoBiE Analog ClockExtension.appex */ = {isa = PBXFileReference; explicitFileType = "wrapper.app-extension"; includeInIndex = 0; path = "CoBiE Analog ClockExtension.appex"; sourceTree = BUILT_PRODUCTS_DIR; }; + 4FF813CB2E00403E00D89535 /* WidgetKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = WidgetKit.framework; path = System/Library/Frameworks/WidgetKit.framework; sourceTree = SDKROOT; }; + 4FF813CD2E00403F00D89535 /* SwiftUI.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = SwiftUI.framework; path = System/Library/Frameworks/SwiftUI.framework; sourceTree = SDKROOT; }; +/* End PBXFileReference section */ + +/* Begin PBXFileSystemSynchronizedBuildFileExceptionSet section */ + 4FF813DE2E00404000D89535 /* Exceptions for "CoBiE Analog Clock" folder in "CoBiE Analog ClockExtension" target */ = { + isa = PBXFileSystemSynchronizedBuildFileExceptionSet; + membershipExceptions = ( + Info.plist, + ); + target = 4FF813C82E00403E00D89535 /* CoBiE Analog ClockExtension */; + }; +/* End PBXFileSystemSynchronizedBuildFileExceptionSet section */ + +/* Begin PBXFileSystemSynchronizedRootGroup section */ + 4FF8139B2E003FB400D89535 /* CoBiE */ = { + isa = PBXFileSystemSynchronizedRootGroup; + path = CoBiE; + sourceTree = ""; + }; + 4FF813AB2E003FB600D89535 /* CoBiETests */ = { + isa = PBXFileSystemSynchronizedRootGroup; + path = CoBiETests; + sourceTree = ""; + }; + 4FF813B52E003FB600D89535 /* CoBiEUITests */ = { + isa = PBXFileSystemSynchronizedRootGroup; + path = CoBiEUITests; + sourceTree = ""; + }; + 4FF813CF2E00403F00D89535 /* CoBiE Analog Clock */ = { + isa = PBXFileSystemSynchronizedRootGroup; + exceptions = ( + 4FF813DE2E00404000D89535 /* Exceptions for "CoBiE Analog Clock" folder in "CoBiE Analog ClockExtension" target */, + ); + path = "CoBiE Analog Clock"; + sourceTree = ""; + }; +/* End PBXFileSystemSynchronizedRootGroup section */ + +/* Begin PBXFrameworksBuildPhase section */ + 4FF813962E003FB400D89535 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 4FF813A52E003FB600D89535 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 4FF813AF2E003FB600D89535 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 4FF813C62E00403E00D89535 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 4FF813CE2E00403F00D89535 /* SwiftUI.framework in Frameworks */, + 4FF813CC2E00403F00D89535 /* WidgetKit.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + 4FF813902E003FB400D89535 = { + isa = PBXGroup; + children = ( + 4FF8139B2E003FB400D89535 /* CoBiE */, + 4FF813AB2E003FB600D89535 /* CoBiETests */, + 4FF813B52E003FB600D89535 /* CoBiEUITests */, + 4FF813CF2E00403F00D89535 /* CoBiE Analog Clock */, + 4FF813CA2E00403E00D89535 /* Frameworks */, + 4FF8139A2E003FB400D89535 /* Products */, + ); + sourceTree = ""; + }; + 4FF8139A2E003FB400D89535 /* Products */ = { + isa = PBXGroup; + children = ( + 4FF813992E003FB400D89535 /* CoBiE.app */, + 4FF813A82E003FB600D89535 /* CoBiETests.xctest */, + 4FF813B22E003FB600D89535 /* CoBiEUITests.xctest */, + 4FF813C92E00403E00D89535 /* CoBiE Analog ClockExtension.appex */, + ); + name = Products; + sourceTree = ""; + }; + 4FF813CA2E00403E00D89535 /* Frameworks */ = { + isa = PBXGroup; + children = ( + 4FF813CB2E00403E00D89535 /* WidgetKit.framework */, + 4FF813CD2E00403F00D89535 /* SwiftUI.framework */, + ); + name = Frameworks; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXNativeTarget section */ + 4FF813982E003FB400D89535 /* CoBiE */ = { + isa = PBXNativeTarget; + buildConfigurationList = 4FF813BC2E003FB600D89535 /* Build configuration list for PBXNativeTarget "CoBiE" */; + buildPhases = ( + 4FF813952E003FB400D89535 /* Sources */, + 4FF813962E003FB400D89535 /* Frameworks */, + 4FF813972E003FB400D89535 /* Resources */, + 4FF813E22E00404000D89535 /* Embed Foundation Extensions */, + ); + buildRules = ( + ); + dependencies = ( + 4FF813DC2E00404000D89535 /* PBXTargetDependency */, + ); + fileSystemSynchronizedGroups = ( + 4FF8139B2E003FB400D89535 /* CoBiE */, + ); + name = CoBiE; + packageProductDependencies = ( + ); + productName = CoBiE; + productReference = 4FF813992E003FB400D89535 /* CoBiE.app */; + productType = "com.apple.product-type.application"; + }; + 4FF813A72E003FB600D89535 /* CoBiETests */ = { + isa = PBXNativeTarget; + buildConfigurationList = 4FF813BF2E003FB600D89535 /* Build configuration list for PBXNativeTarget "CoBiETests" */; + buildPhases = ( + 4FF813A42E003FB600D89535 /* Sources */, + 4FF813A52E003FB600D89535 /* Frameworks */, + 4FF813A62E003FB600D89535 /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + 4FF813AA2E003FB600D89535 /* PBXTargetDependency */, + ); + fileSystemSynchronizedGroups = ( + 4FF813AB2E003FB600D89535 /* CoBiETests */, + ); + name = CoBiETests; + packageProductDependencies = ( + ); + productName = CoBiETests; + productReference = 4FF813A82E003FB600D89535 /* CoBiETests.xctest */; + productType = "com.apple.product-type.bundle.unit-test"; + }; + 4FF813B12E003FB600D89535 /* CoBiEUITests */ = { + isa = PBXNativeTarget; + buildConfigurationList = 4FF813C22E003FB600D89535 /* Build configuration list for PBXNativeTarget "CoBiEUITests" */; + buildPhases = ( + 4FF813AE2E003FB600D89535 /* Sources */, + 4FF813AF2E003FB600D89535 /* Frameworks */, + 4FF813B02E003FB600D89535 /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + 4FF813B42E003FB600D89535 /* PBXTargetDependency */, + ); + fileSystemSynchronizedGroups = ( + 4FF813B52E003FB600D89535 /* CoBiEUITests */, + ); + name = CoBiEUITests; + packageProductDependencies = ( + ); + productName = CoBiEUITests; + productReference = 4FF813B22E003FB600D89535 /* CoBiEUITests.xctest */; + productType = "com.apple.product-type.bundle.ui-testing"; + }; + 4FF813C82E00403E00D89535 /* CoBiE Analog ClockExtension */ = { + isa = PBXNativeTarget; + buildConfigurationList = 4FF813DF2E00404000D89535 /* Build configuration list for PBXNativeTarget "CoBiE Analog ClockExtension" */; + buildPhases = ( + 4FF813C52E00403E00D89535 /* Sources */, + 4FF813C62E00403E00D89535 /* Frameworks */, + 4FF813C72E00403E00D89535 /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + ); + fileSystemSynchronizedGroups = ( + 4FF813CF2E00403F00D89535 /* CoBiE Analog Clock */, + ); + name = "CoBiE Analog ClockExtension"; + packageProductDependencies = ( + ); + productName = "CoBiE Analog ClockExtension"; + productReference = 4FF813C92E00403E00D89535 /* CoBiE Analog ClockExtension.appex */; + productType = "com.apple.product-type.app-extension"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + 4FF813912E003FB400D89535 /* Project object */ = { + isa = PBXProject; + attributes = { + BuildIndependentTargetsInParallel = 1; + LastSwiftUpdateCheck = 2600; + LastUpgradeCheck = 2600; + TargetAttributes = { + 4FF813982E003FB400D89535 = { + CreatedOnToolsVersion = 26.0; + }; + 4FF813A72E003FB600D89535 = { + CreatedOnToolsVersion = 26.0; + TestTargetID = 4FF813982E003FB400D89535; + }; + 4FF813B12E003FB600D89535 = { + CreatedOnToolsVersion = 26.0; + TestTargetID = 4FF813982E003FB400D89535; + }; + 4FF813C82E00403E00D89535 = { + CreatedOnToolsVersion = 26.0; + }; + }; + }; + buildConfigurationList = 4FF813942E003FB400D89535 /* Build configuration list for PBXProject "CoBiE" */; + developmentRegion = en; + hasScannedForEncodings = 0; + knownRegions = ( + en, + Base, + ); + mainGroup = 4FF813902E003FB400D89535; + minimizedProjectReferenceProxies = 1; + preferredProjectObjectVersion = 77; + productRefGroup = 4FF8139A2E003FB400D89535 /* Products */; + projectDirPath = ""; + projectRoot = ""; + targets = ( + 4FF813982E003FB400D89535 /* CoBiE */, + 4FF813A72E003FB600D89535 /* CoBiETests */, + 4FF813B12E003FB600D89535 /* CoBiEUITests */, + 4FF813C82E00403E00D89535 /* CoBiE Analog ClockExtension */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXResourcesBuildPhase section */ + 4FF813972E003FB400D89535 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 4FF813A62E003FB600D89535 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 4FF813B02E003FB600D89535 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 4FF813C72E00403E00D89535 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXResourcesBuildPhase section */ + +/* Begin PBXSourcesBuildPhase section */ + 4FF813952E003FB400D89535 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 4FF813A42E003FB600D89535 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 4FF813AE2E003FB600D89535 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 4FF813C52E00403E00D89535 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin PBXTargetDependency section */ + 4FF813AA2E003FB600D89535 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = 4FF813982E003FB400D89535 /* CoBiE */; + targetProxy = 4FF813A92E003FB600D89535 /* PBXContainerItemProxy */; + }; + 4FF813B42E003FB600D89535 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = 4FF813982E003FB400D89535 /* CoBiE */; + targetProxy = 4FF813B32E003FB600D89535 /* PBXContainerItemProxy */; + }; + 4FF813DC2E00404000D89535 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = 4FF813C82E00403E00D89535 /* CoBiE Analog ClockExtension */; + targetProxy = 4FF813DB2E00404000D89535 /* PBXContainerItemProxy */; + }; +/* End PBXTargetDependency section */ + +/* Begin XCBuildConfiguration section */ + 4FF813BA2E003FB600D89535 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++20"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_ENABLE_OBJC_WEAK = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = dwarf; + DEVELOPMENT_TEAM = 8KC3NAN2CJ; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_TESTABILITY = YES; + ENABLE_USER_SCRIPT_SANDBOXING = YES; + GCC_C_LANGUAGE_STANDARD = gnu17; + GCC_DYNAMIC_NO_PIC = NO; + GCC_NO_COMMON_BLOCKS = YES; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PREPROCESSOR_DEFINITIONS = ( + "DEBUG=1", + "$(inherited)", + ); + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + LOCALIZATION_PREFERS_STRING_CATALOGS = YES; + MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; + MTL_FAST_MATH = YES; + ONLY_ACTIVE_ARCH = YES; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = "DEBUG $(inherited)"; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + }; + name = Debug; + }; + 4FF813BB2E003FB600D89535 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++20"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_ENABLE_OBJC_WEAK = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + DEVELOPMENT_TEAM = 8KC3NAN2CJ; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_USER_SCRIPT_SANDBOXING = YES; + GCC_C_LANGUAGE_STANDARD = gnu17; + GCC_NO_COMMON_BLOCKS = YES; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + LOCALIZATION_PREFERS_STRING_CATALOGS = YES; + MTL_ENABLE_DEBUG_INFO = NO; + MTL_FAST_MATH = YES; + SWIFT_COMPILATION_MODE = wholemodule; + }; + name = Release; + }; + 4FF813BD2E003FB600D89535 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; + "CODE_SIGN_IDENTITY[sdk=macosx*]" = "-"; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 1; + DEVELOPMENT_TEAM = 8KC3NAN2CJ; + ENABLE_APP_SANDBOX = YES; + ENABLE_HARDENED_RUNTIME = YES; + ENABLE_PREVIEWS = YES; + ENABLE_USER_SELECTED_FILES = readonly; + GENERATE_INFOPLIST_FILE = YES; + "INFOPLIST_KEY_UIApplicationSceneManifest_Generation[sdk=iphoneos*]" = YES; + "INFOPLIST_KEY_UIApplicationSceneManifest_Generation[sdk=iphonesimulator*]" = YES; + "INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents[sdk=iphoneos*]" = YES; + "INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents[sdk=iphonesimulator*]" = YES; + "INFOPLIST_KEY_UILaunchScreen_Generation[sdk=iphoneos*]" = YES; + "INFOPLIST_KEY_UILaunchScreen_Generation[sdk=iphonesimulator*]" = YES; + "INFOPLIST_KEY_UIStatusBarStyle[sdk=iphoneos*]" = UIStatusBarStyleDefault; + "INFOPLIST_KEY_UIStatusBarStyle[sdk=iphonesimulator*]" = UIStatusBarStyleDefault; + INFOPLIST_KEY_UISupportedInterfaceOrientations_iPad = "UIInterfaceOrientationPortrait UIInterfaceOrientationPortraitUpsideDown UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight"; + INFOPLIST_KEY_UISupportedInterfaceOrientations_iPhone = "UIInterfaceOrientationPortrait UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight"; + IPHONEOS_DEPLOYMENT_TARGET = 26.0; + LD_RUNPATH_SEARCH_PATHS = "@executable_path/Frameworks"; + "LD_RUNPATH_SEARCH_PATHS[sdk=macosx*]" = "@executable_path/../Frameworks"; + MACOSX_DEPLOYMENT_TARGET = 26.0; + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = no.kaizenkodo.CoBiE; + PRODUCT_NAME = "$(TARGET_NAME)"; + REGISTER_APP_GROUPS = YES; + SDKROOT = auto; + STRING_CATALOG_GENERATE_SYMBOLS = YES; + SUPPORTED_PLATFORMS = "iphoneos iphonesimulator macosx xros xrsimulator"; + SWIFT_DEFAULT_ACTOR_ISOLATION = MainActor; + SWIFT_EMIT_LOC_STRINGS = YES; + SWIFT_UPCOMING_FEATURE_MEMBER_IMPORT_VISIBILITY = YES; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2,7"; + XROS_DEPLOYMENT_TARGET = 26.0; + }; + name = Debug; + }; + 4FF813BE2E003FB600D89535 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; + "CODE_SIGN_IDENTITY[sdk=macosx*]" = "-"; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 1; + DEVELOPMENT_TEAM = 8KC3NAN2CJ; + ENABLE_APP_SANDBOX = YES; + ENABLE_HARDENED_RUNTIME = YES; + ENABLE_PREVIEWS = YES; + ENABLE_USER_SELECTED_FILES = readonly; + GENERATE_INFOPLIST_FILE = YES; + "INFOPLIST_KEY_UIApplicationSceneManifest_Generation[sdk=iphoneos*]" = YES; + "INFOPLIST_KEY_UIApplicationSceneManifest_Generation[sdk=iphonesimulator*]" = YES; + "INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents[sdk=iphoneos*]" = YES; + "INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents[sdk=iphonesimulator*]" = YES; + "INFOPLIST_KEY_UILaunchScreen_Generation[sdk=iphoneos*]" = YES; + "INFOPLIST_KEY_UILaunchScreen_Generation[sdk=iphonesimulator*]" = YES; + "INFOPLIST_KEY_UIStatusBarStyle[sdk=iphoneos*]" = UIStatusBarStyleDefault; + "INFOPLIST_KEY_UIStatusBarStyle[sdk=iphonesimulator*]" = UIStatusBarStyleDefault; + INFOPLIST_KEY_UISupportedInterfaceOrientations_iPad = "UIInterfaceOrientationPortrait UIInterfaceOrientationPortraitUpsideDown UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight"; + INFOPLIST_KEY_UISupportedInterfaceOrientations_iPhone = "UIInterfaceOrientationPortrait UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight"; + IPHONEOS_DEPLOYMENT_TARGET = 26.0; + LD_RUNPATH_SEARCH_PATHS = "@executable_path/Frameworks"; + "LD_RUNPATH_SEARCH_PATHS[sdk=macosx*]" = "@executable_path/../Frameworks"; + MACOSX_DEPLOYMENT_TARGET = 26.0; + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = no.kaizenkodo.CoBiE; + PRODUCT_NAME = "$(TARGET_NAME)"; + REGISTER_APP_GROUPS = YES; + SDKROOT = auto; + STRING_CATALOG_GENERATE_SYMBOLS = YES; + SUPPORTED_PLATFORMS = "iphoneos iphonesimulator macosx xros xrsimulator"; + SWIFT_DEFAULT_ACTOR_ISOLATION = MainActor; + SWIFT_EMIT_LOC_STRINGS = YES; + SWIFT_UPCOMING_FEATURE_MEMBER_IMPORT_VISIBILITY = YES; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2,7"; + XROS_DEPLOYMENT_TARGET = 26.0; + }; + name = Release; + }; + 4FF813C02E003FB600D89535 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + BUNDLE_LOADER = "$(TEST_HOST)"; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 1; + DEVELOPMENT_TEAM = 8KC3NAN2CJ; + GENERATE_INFOPLIST_FILE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 26.0; + MACOSX_DEPLOYMENT_TARGET = 26.0; + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = no.kaizenkodo.CoBiETests; + PRODUCT_NAME = "$(TARGET_NAME)"; + SDKROOT = auto; + STRING_CATALOG_GENERATE_SYMBOLS = NO; + SUPPORTED_PLATFORMS = "iphoneos iphonesimulator macosx xros xrsimulator"; + SWIFT_EMIT_LOC_STRINGS = NO; + SWIFT_UPCOMING_FEATURE_MEMBER_IMPORT_VISIBILITY = YES; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2,7"; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/CoBiE.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/CoBiE"; + XROS_DEPLOYMENT_TARGET = 26.0; + }; + name = Debug; + }; + 4FF813C12E003FB600D89535 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + BUNDLE_LOADER = "$(TEST_HOST)"; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 1; + DEVELOPMENT_TEAM = 8KC3NAN2CJ; + GENERATE_INFOPLIST_FILE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 26.0; + MACOSX_DEPLOYMENT_TARGET = 26.0; + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = no.kaizenkodo.CoBiETests; + PRODUCT_NAME = "$(TARGET_NAME)"; + SDKROOT = auto; + STRING_CATALOG_GENERATE_SYMBOLS = NO; + SUPPORTED_PLATFORMS = "iphoneos iphonesimulator macosx xros xrsimulator"; + SWIFT_EMIT_LOC_STRINGS = NO; + SWIFT_UPCOMING_FEATURE_MEMBER_IMPORT_VISIBILITY = YES; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2,7"; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/CoBiE.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/CoBiE"; + XROS_DEPLOYMENT_TARGET = 26.0; + }; + name = Release; + }; + 4FF813C32E003FB600D89535 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 1; + DEVELOPMENT_TEAM = 8KC3NAN2CJ; + GENERATE_INFOPLIST_FILE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 26.0; + MACOSX_DEPLOYMENT_TARGET = 26.0; + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = no.kaizenkodo.CoBiEUITests; + PRODUCT_NAME = "$(TARGET_NAME)"; + SDKROOT = auto; + STRING_CATALOG_GENERATE_SYMBOLS = NO; + SUPPORTED_PLATFORMS = "iphoneos iphonesimulator macosx xros xrsimulator"; + SWIFT_EMIT_LOC_STRINGS = NO; + SWIFT_UPCOMING_FEATURE_MEMBER_IMPORT_VISIBILITY = YES; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2,7"; + TEST_TARGET_NAME = CoBiE; + XROS_DEPLOYMENT_TARGET = 26.0; + }; + name = Debug; + }; + 4FF813C42E003FB600D89535 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 1; + DEVELOPMENT_TEAM = 8KC3NAN2CJ; + GENERATE_INFOPLIST_FILE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 26.0; + MACOSX_DEPLOYMENT_TARGET = 26.0; + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = no.kaizenkodo.CoBiEUITests; + PRODUCT_NAME = "$(TARGET_NAME)"; + SDKROOT = auto; + STRING_CATALOG_GENERATE_SYMBOLS = NO; + SUPPORTED_PLATFORMS = "iphoneos iphonesimulator macosx xros xrsimulator"; + SWIFT_EMIT_LOC_STRINGS = NO; + SWIFT_UPCOMING_FEATURE_MEMBER_IMPORT_VISIBILITY = YES; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2,7"; + TEST_TARGET_NAME = CoBiE; + XROS_DEPLOYMENT_TARGET = 26.0; + }; + name = Release; + }; + 4FF813E02E00404000D89535 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; + ASSETCATALOG_COMPILER_WIDGET_BACKGROUND_COLOR_NAME = WidgetBackground; + "CODE_SIGN_IDENTITY[sdk=macosx*]" = "-"; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 1; + DEVELOPMENT_TEAM = 8KC3NAN2CJ; + ENABLE_APP_SANDBOX = YES; + ENABLE_HARDENED_RUNTIME = YES; + GENERATE_INFOPLIST_FILE = YES; + INFOPLIST_FILE = "CoBiE Analog Clock/Info.plist"; + INFOPLIST_KEY_CFBundleDisplayName = "CoBiE Analog Clock"; + INFOPLIST_KEY_NSHumanReadableCopyright = ""; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/../Frameworks", + "@executable_path/../../../../Frameworks", + ); + MACOSX_DEPLOYMENT_TARGET = 26.0; + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = "no.kaizenkodo.CoBiE.CoBiE-Analog-Clock"; + PRODUCT_NAME = "$(TARGET_NAME)"; + SDKROOT = macosx; + SKIP_INSTALL = YES; + STRING_CATALOG_GENERATE_SYMBOLS = YES; + SWIFT_EMIT_LOC_STRINGS = YES; + SWIFT_UPCOMING_FEATURE_MEMBER_IMPORT_VISIBILITY = YES; + SWIFT_VERSION = 5.0; + }; + name = Debug; + }; + 4FF813E12E00404000D89535 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; + ASSETCATALOG_COMPILER_WIDGET_BACKGROUND_COLOR_NAME = WidgetBackground; + "CODE_SIGN_IDENTITY[sdk=macosx*]" = "-"; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 1; + DEVELOPMENT_TEAM = 8KC3NAN2CJ; + ENABLE_APP_SANDBOX = YES; + ENABLE_HARDENED_RUNTIME = YES; + GENERATE_INFOPLIST_FILE = YES; + INFOPLIST_FILE = "CoBiE Analog Clock/Info.plist"; + INFOPLIST_KEY_CFBundleDisplayName = "CoBiE Analog Clock"; + INFOPLIST_KEY_NSHumanReadableCopyright = ""; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/../Frameworks", + "@executable_path/../../../../Frameworks", + ); + MACOSX_DEPLOYMENT_TARGET = 26.0; + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = "no.kaizenkodo.CoBiE.CoBiE-Analog-Clock"; + PRODUCT_NAME = "$(TARGET_NAME)"; + SDKROOT = macosx; + SKIP_INSTALL = YES; + STRING_CATALOG_GENERATE_SYMBOLS = YES; + SWIFT_EMIT_LOC_STRINGS = YES; + SWIFT_UPCOMING_FEATURE_MEMBER_IMPORT_VISIBILITY = YES; + SWIFT_VERSION = 5.0; + }; + name = Release; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + 4FF813942E003FB400D89535 /* Build configuration list for PBXProject "CoBiE" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 4FF813BA2E003FB600D89535 /* Debug */, + 4FF813BB2E003FB600D89535 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 4FF813BC2E003FB600D89535 /* Build configuration list for PBXNativeTarget "CoBiE" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 4FF813BD2E003FB600D89535 /* Debug */, + 4FF813BE2E003FB600D89535 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 4FF813BF2E003FB600D89535 /* Build configuration list for PBXNativeTarget "CoBiETests" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 4FF813C02E003FB600D89535 /* Debug */, + 4FF813C12E003FB600D89535 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 4FF813C22E003FB600D89535 /* Build configuration list for PBXNativeTarget "CoBiEUITests" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 4FF813C32E003FB600D89535 /* Debug */, + 4FF813C42E003FB600D89535 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 4FF813DF2E00404000D89535 /* Build configuration list for PBXNativeTarget "CoBiE Analog ClockExtension" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 4FF813E02E00404000D89535 /* Debug */, + 4FF813E12E00404000D89535 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; +/* End XCConfigurationList section */ + }; + rootObject = 4FF813912E003FB400D89535 /* Project object */; +} diff --git a/CoBiE/CoBiE.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/CoBiE/CoBiE.xcodeproj/project.xcworkspace/contents.xcworkspacedata new file mode 100644 index 0000000..919434a --- /dev/null +++ b/CoBiE/CoBiE.xcodeproj/project.xcworkspace/contents.xcworkspacedata @@ -0,0 +1,7 @@ + + + + + diff --git a/CoBiE/CoBiE.xcodeproj/project.xcworkspace/xcuserdata/ok.xcuserdatad/UserInterfaceState.xcuserstate b/CoBiE/CoBiE.xcodeproj/project.xcworkspace/xcuserdata/ok.xcuserdatad/UserInterfaceState.xcuserstate new file mode 100644 index 0000000000000000000000000000000000000000..1a9619d092c433b74f81996074974608f80fa269 GIT binary patch literal 21425 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

{t))?6?lz+Hn)S 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 IUH!!W0lg#}oB#j- literal 0 HcmV?d00001 diff --git a/CoBiE/CoBiE.xcodeproj/xcuserdata/ok.xcuserdatad/xcschemes/xcschememanagement.plist b/CoBiE/CoBiE.xcodeproj/xcuserdata/ok.xcuserdatad/xcschemes/xcschememanagement.plist new file mode 100644 index 0000000..8e4a0c5 --- /dev/null +++ b/CoBiE/CoBiE.xcodeproj/xcuserdata/ok.xcuserdatad/xcschemes/xcschememanagement.plist @@ -0,0 +1,19 @@ + + + + + SchemeUserState + + CoBiE Analog ClockExtension.xcscheme_^#shared#^_ + + orderHint + 1 + + CoBiE.xcscheme_^#shared#^_ + + orderHint + 0 + + + + diff --git a/CoBiE/CoBiE/Assets.xcassets/AccentColor.colorset/Contents.json b/CoBiE/CoBiE/Assets.xcassets/AccentColor.colorset/Contents.json new file mode 100644 index 0000000..eb87897 --- /dev/null +++ b/CoBiE/CoBiE/Assets.xcassets/AccentColor.colorset/Contents.json @@ -0,0 +1,11 @@ +{ + "colors" : [ + { + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/CoBiE/CoBiE/Assets.xcassets/AppIcon.appiconset/Contents.json b/CoBiE/CoBiE/Assets.xcassets/AppIcon.appiconset/Contents.json new file mode 100644 index 0000000..ffdfe15 --- /dev/null +++ b/CoBiE/CoBiE/Assets.xcassets/AppIcon.appiconset/Contents.json @@ -0,0 +1,85 @@ +{ + "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" + }, + { + "idiom" : "mac", + "scale" : "1x", + "size" : "16x16" + }, + { + "idiom" : "mac", + "scale" : "2x", + "size" : "16x16" + }, + { + "idiom" : "mac", + "scale" : "1x", + "size" : "32x32" + }, + { + "idiom" : "mac", + "scale" : "2x", + "size" : "32x32" + }, + { + "idiom" : "mac", + "scale" : "1x", + "size" : "128x128" + }, + { + "idiom" : "mac", + "scale" : "2x", + "size" : "128x128" + }, + { + "idiom" : "mac", + "scale" : "1x", + "size" : "256x256" + }, + { + "idiom" : "mac", + "scale" : "2x", + "size" : "256x256" + }, + { + "idiom" : "mac", + "scale" : "1x", + "size" : "512x512" + }, + { + "idiom" : "mac", + "scale" : "2x", + "size" : "512x512" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/CoBiE/CoBiE/Assets.xcassets/Contents.json b/CoBiE/CoBiE/Assets.xcassets/Contents.json new file mode 100644 index 0000000..73c0059 --- /dev/null +++ b/CoBiE/CoBiE/Assets.xcassets/Contents.json @@ -0,0 +1,6 @@ +{ + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/CoBiE/CoBiE/CoBiEApp.swift b/CoBiE/CoBiE/CoBiEApp.swift new file mode 100644 index 0000000..d369094 --- /dev/null +++ b/CoBiE/CoBiE/CoBiEApp.swift @@ -0,0 +1,32 @@ +// +// CoBiEApp.swift +// CoBiE +// +// Created by Oleksandr Kozachuk on 2025-06-16. +// + +import SwiftUI +import SwiftData + +@main +struct CoBiEApp: App { + var sharedModelContainer: ModelContainer = { + let schema = Schema([ + Item.self, + ]) + let modelConfiguration = ModelConfiguration(schema: schema, isStoredInMemoryOnly: false) + + do { + return try ModelContainer(for: schema, configurations: [modelConfiguration]) + } catch { + fatalError("Could not create ModelContainer: \(error)") + } + }() + + var body: some Scene { + WindowGroup { + ContentView() + } + .modelContainer(sharedModelContainer) + } +} diff --git a/CoBiE/CoBiE/ContentView.swift b/CoBiE/CoBiE/ContentView.swift new file mode 100644 index 0000000..2a6d853 --- /dev/null +++ b/CoBiE/CoBiE/ContentView.swift @@ -0,0 +1,66 @@ +// +// ContentView.swift +// CoBiE +// +// Created by Oleksandr Kozachuk on 2025-06-16. +// + +import SwiftUI +import SwiftData + +struct ContentView: View { + @Environment(\.modelContext) private var modelContext + @Query private var items: [Item] + + var body: some View { + NavigationSplitView { + List { + ForEach(items) { item in + NavigationLink { + Text("Item at \(item.timestamp, format: Date.FormatStyle(date: .numeric, time: .standard))") + } label: { + Text(item.timestamp, format: Date.FormatStyle(date: .numeric, time: .standard)) + } + } + .onDelete(perform: deleteItems) + } +#if os(macOS) + .navigationSplitViewColumnWidth(min: 180, ideal: 200) +#endif + .toolbar { +#if os(iOS) + ToolbarItem(placement: .navigationBarTrailing) { + EditButton() + } +#endif + ToolbarItem { + Button(action: addItem) { + Label("Add Item", systemImage: "plus") + } + } + } + } detail: { + Text("Select an item") + } + } + + private func addItem() { + withAnimation { + let newItem = Item(timestamp: Date()) + modelContext.insert(newItem) + } + } + + private func deleteItems(offsets: IndexSet) { + withAnimation { + for index in offsets { + modelContext.delete(items[index]) + } + } + } +} + +#Preview { + ContentView() + .modelContainer(for: Item.self, inMemory: true) +} diff --git a/CoBiE/CoBiE/Item.swift b/CoBiE/CoBiE/Item.swift new file mode 100644 index 0000000..2060fa4 --- /dev/null +++ b/CoBiE/CoBiE/Item.swift @@ -0,0 +1,18 @@ +// +// Item.swift +// CoBiE +// +// Created by Oleksandr Kozachuk on 2025-06-16. +// + +import Foundation +import SwiftData + +@Model +final class Item { + var timestamp: Date + + init(timestamp: Date) { + self.timestamp = timestamp + } +} diff --git a/CoBiE/CoBiETests/CoBiETests.swift b/CoBiE/CoBiETests/CoBiETests.swift new file mode 100644 index 0000000..c2a853b --- /dev/null +++ b/CoBiE/CoBiETests/CoBiETests.swift @@ -0,0 +1,16 @@ +// +// CoBiETests.swift +// CoBiETests +// +// Created by Oleksandr Kozachuk on 2025-06-16. +// + +import Testing + +struct CoBiETests { + + @Test func example() async throws { + // Write your test here and use APIs like `#expect(...)` to check expected conditions. + } + +} diff --git a/CoBiE/CoBiEUITests/CoBiEUITests.swift b/CoBiE/CoBiEUITests/CoBiEUITests.swift new file mode 100644 index 0000000..afca8b4 --- /dev/null +++ b/CoBiE/CoBiEUITests/CoBiEUITests.swift @@ -0,0 +1,41 @@ +// +// CoBiEUITests.swift +// CoBiEUITests +// +// Created by Oleksandr Kozachuk on 2025-06-16. +// + +import XCTest + +final class CoBiEUITests: XCTestCase { + + override func setUpWithError() throws { + // Put setup code here. This method is called before the invocation of each test method in the class. + + // In UI tests it is usually best to stop immediately when a failure occurs. + continueAfterFailure = false + + // In UI tests it’s important to set the initial state - such as interface orientation - required for your tests before they run. The setUp method is a good place to do this. + } + + override func tearDownWithError() throws { + // Put teardown code here. This method is called after the invocation of each test method in the class. + } + + @MainActor + func testExample() throws { + // UI tests must launch the application that they test. + let app = XCUIApplication() + app.launch() + + // Use XCTAssert and related functions to verify your tests produce the correct results. + } + + @MainActor + func testLaunchPerformance() throws { + // This measures how long it takes to launch your application. + measure(metrics: [XCTApplicationLaunchMetric()]) { + XCUIApplication().launch() + } + } +} diff --git a/CoBiE/CoBiEUITests/CoBiEUITestsLaunchTests.swift b/CoBiE/CoBiEUITests/CoBiEUITestsLaunchTests.swift new file mode 100644 index 0000000..df58772 --- /dev/null +++ b/CoBiE/CoBiEUITests/CoBiEUITestsLaunchTests.swift @@ -0,0 +1,33 @@ +// +// CoBiEUITestsLaunchTests.swift +// CoBiEUITests +// +// Created by Oleksandr Kozachuk on 2025-06-16. +// + +import XCTest + +final class CoBiEUITestsLaunchTests: XCTestCase { + + override class var runsForEachTargetApplicationUIConfiguration: Bool { + true + } + + override func setUpWithError() throws { + continueAfterFailure = false + } + + @MainActor + func testLaunch() throws { + let app = XCUIApplication() + app.launch() + + // Insert steps here to perform after app launch but before taking a screenshot, + // such as logging into a test account or navigating somewhere in the app + + let attachment = XCTAttachment(screenshot: app.screenshot()) + attachment.name = "Launch Screen" + attachment.lifetime = .keepAlways + add(attachment) + } +} diff --git a/build-widget.sh b/build-widget.sh deleted file mode 100755 index 63cf673..0000000 --- a/build-widget.sh +++ /dev/null @@ -1,19 +0,0 @@ -#!/bin/bash -# Build the macOS Dashboard widget without duplicating code -set -euo pipefail - -WIDGET_NAME="CoBiEClock" -SRC_DIR="macos-widget" -BUILD_DIR="${WIDGET_NAME}.wdgt" - -# Clean previous build -rm -rf "$BUILD_DIR" -mkdir "$BUILD_DIR" - -# Copy unique widget files -cp "$SRC_DIR/Info.plist" "$SRC_DIR/index.html" "$BUILD_DIR/" - -# Copy shared files from repository root -cp clock.js cobie.js style.css logo.svg "$BUILD_DIR/" - -echo "Widget created: ${BUILD_DIR}" diff --git a/macos-widget/Info.plist b/macos-widget/Info.plist deleted file mode 100644 index 3d3359f..0000000 --- a/macos-widget/Info.plist +++ /dev/null @@ -1,18 +0,0 @@ - - - - - CFBundleDisplayName - CoBiE Clock - CFBundleIdentifier - com.example.cobieclock - CFBundleVersion - 1.0 - CFBundlePackageType - BNDL - CFBundleSignature - ???? - MainHTML - index.html - - diff --git a/macos-widget/index.html b/macos-widget/index.html deleted file mode 100644 index 4f78146..0000000 --- a/macos-widget/index.html +++ /dev/null @@ -1,23 +0,0 @@ - - - - - CoBiE Clock - - - -

-
-
-
-
-
-
-
-
CoBiE Time
-
-
- - - -