diff --git a/Calendarr iOS.xcodeproj/project.pbxproj b/Calendarr iOS.xcodeproj/project.pbxproj index 1152630..bebfaa5 100644 --- a/Calendarr iOS.xcodeproj/project.pbxproj +++ b/Calendarr iOS.xcodeproj/project.pbxproj @@ -7,10 +7,16 @@ objects = { /* Begin PBXBuildFile section */ - D0001A0CABCDEF0100AB5001 /* CalendarrWidgets.appex in Embed Foundation Extensions */ = {isa = PBXBuildFile; fileRef = D0001A02ABCDEF0100AB5001 /* CalendarrWidgets.appex */; settings = {ATTRIBUTES = (RemoveHeadersOnCopy, ); }; }; + 3934CF4630544C2E003958B8 /* WidgetKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 3934CF4530544C2E003958B8 /* WidgetKit.framework */; }; + 3934CF4830544C2E003958B8 /* SwiftUI.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 3934CF4730544C2E003958B8 /* SwiftUI.framework */; }; + 3934CF5530544C2E003958B8 /* CalendarrWatchComplications.appex in Embed Foundation Extensions */ = {isa = PBXBuildFile; fileRef = 3934CF4330544C2E003958B8 /* CalendarrWatchComplications.appex */; settings = {ATTRIBUTES = (RemoveHeadersOnCopy, ); }; }; + AA9701000001000000000001 /* AppAuth in Frameworks */ = {isa = PBXBuildFile; productRef = AA9701000002000000000001 /* AppAuth */; }; CA1E4D0A0002000000000001 /* CalendarrCore in Frameworks */ = {isa = PBXBuildFile; productRef = CA1E4D0A0001000000000001 /* CalendarrCore */; }; CA1E4D0A0002000000000002 /* CalendarrCore in Frameworks */ = {isa = PBXBuildFile; productRef = CA1E4D0A0001000000000002 /* CalendarrCore */; }; - AA9701000001000000000001 /* AppAuth in Frameworks */ = {isa = PBXBuildFile; productRef = AA9701000002000000000001 /* AppAuth */; }; + CA1E4D0A0002000000000003 /* CalendarrCore in Frameworks */ = {isa = PBXBuildFile; productRef = CA1E4D0A0001000000000003 /* CalendarrCore */; }; + CA1E4D0A0002000000000004 /* CalendarrCore in Frameworks */ = {isa = PBXBuildFile; productRef = CA1E4D0A0001000000000004 /* CalendarrCore */; }; + D0001A0CABCDEF0100AB5001 /* CalendarrWidgets.appex in Embed Foundation Extensions */ = {isa = PBXBuildFile; fileRef = D0001A02ABCDEF0100AB5001 /* CalendarrWidgets.appex */; settings = {ATTRIBUTES = (RemoveHeadersOnCopy, ); }; }; + 39E1B0010001000000000001 /* CalendarrWatch.app in Embed Watch Content */ = {isa = PBXBuildFile; fileRef = 3934CF1A30544C01003958B8 /* CalendarrWatch.app */; settings = {ATTRIBUTES = (RemoveHeadersOnCopy, ); }; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -21,6 +27,27 @@ remoteGlobalIDString = C0000A01FB4E10100AB5001; remoteInfo = "Calendarr iOS"; }; + 3934CF2730544C02003958B8 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = C0000301FB4E10100AB5001 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 3934CF1930544C01003958B8; + remoteInfo = CalendarrWatch; + }; + 3934CF3130544C02003958B8 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = C0000301FB4E10100AB5001 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 3934CF1930544C01003958B8; + remoteInfo = CalendarrWatch; + }; + 3934CF5330544C2E003958B8 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = C0000301FB4E10100AB5001 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 3934CF4230544C2E003958B8; + remoteInfo = CalendarrWatchComplications; + }; D0001A0DABCDEF0100AB5001 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = C0000301FB4E10100AB5001 /* Project object */; @@ -28,9 +55,27 @@ remoteGlobalIDString = D0001A01ABCDEF0100AB5001; remoteInfo = CalendarrWidgets; }; + 39E1B0010003000000000001 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = C0000301FB4E10100AB5001 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 3934CF1930544C01003958B8; + remoteInfo = CalendarrWatch; + }; /* End PBXContainerItemProxy section */ /* Begin PBXCopyFilesBuildPhase section */ + 3934CF5A30544C2E003958B8 /* Embed Foundation Extensions */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 2147483647; + dstPath = ""; + dstSubfolderSpec = 13; + files = ( + 3934CF5530544C2E003958B8 /* CalendarrWatchComplications.appex in Embed Foundation Extensions */, + ); + name = "Embed Foundation Extensions"; + runOnlyForDeploymentPostprocessing = 0; + }; D0001A0BABCDEF0100AB5001 /* Embed Foundation Extensions */ = { isa = PBXCopyFilesBuildPhase; buildActionMask = 2147483647; @@ -42,15 +87,39 @@ name = "Embed Foundation Extensions"; runOnlyForDeploymentPostprocessing = 0; }; + 39E1B0010002000000000001 /* Embed Watch Content */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 2147483647; + dstPath = "$(CONTENTS_FOLDER_PATH)/Watch"; + dstSubfolderSpec = 16; + files = ( + 39E1B0010001000000000001 /* CalendarrWatch.app in Embed Watch Content */, + ); + name = "Embed Watch Content"; + runOnlyForDeploymentPostprocessing = 0; + }; /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ 3927C7BC2FB99D0E00EAD8ED /* Calendarr iOSTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = "Calendarr iOSTests.xctest"; sourceTree = BUILT_PRODUCTS_DIR; }; + 3934CF1A30544C01003958B8 /* CalendarrWatch.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = CalendarrWatch.app; sourceTree = BUILT_PRODUCTS_DIR; }; + 3934CF2630544C02003958B8 /* CalendarrWatchTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = CalendarrWatchTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; + 3934CF3030544C02003958B8 /* CalendarrWatchUITests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = CalendarrWatchUITests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; + 3934CF4330544C2E003958B8 /* CalendarrWatchComplications.appex */ = {isa = PBXFileReference; explicitFileType = "wrapper.app-extension"; includeInIndex = 0; path = CalendarrWatchComplications.appex; sourceTree = BUILT_PRODUCTS_DIR; }; + 3934CF4530544C2E003958B8 /* WidgetKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = WidgetKit.framework; path = System/Library/Frameworks/WidgetKit.framework; sourceTree = SDKROOT; }; + 3934CF4730544C2E003958B8 /* SwiftUI.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = SwiftUI.framework; path = System/Library/Frameworks/SwiftUI.framework; sourceTree = SDKROOT; }; C0000B01FC4E10100AB5001 /* Calendarr iOS.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "Calendarr iOS.app"; sourceTree = BUILT_PRODUCTS_DIR; }; D0001A02ABCDEF0100AB5001 /* CalendarrWidgets.appex */ = {isa = PBXFileReference; explicitFileType = "wrapper.app-extension"; includeInIndex = 0; path = CalendarrWidgets.appex; sourceTree = BUILT_PRODUCTS_DIR; }; /* End PBXFileReference section */ /* Begin PBXFileSystemSynchronizedBuildFileExceptionSet section */ + 3934CF5630544C2E003958B8 /* Exceptions for "CalendarrWatchComplications" folder in "CalendarrWatchComplications" target */ = { + isa = PBXFileSystemSynchronizedBuildFileExceptionSet; + membershipExceptions = ( + Info.plist, + ); + target = 3934CF4230544C2E003958B8 /* CalendarrWatchComplications */; + }; D0001A0FABCDEF0100AB5001 /* Exceptions for "CalendarrWidgets" folder in "CalendarrWidgets" target */ = { isa = PBXFileSystemSynchronizedBuildFileExceptionSet; membershipExceptions = ( @@ -66,6 +135,29 @@ path = "Calendarr iOSTests"; sourceTree = ""; }; + 3934CF1B30544C01003958B8 /* CalendarrWatch */ = { + isa = PBXFileSystemSynchronizedRootGroup; + path = CalendarrWatch; + sourceTree = ""; + }; + 3934CF2930544C02003958B8 /* CalendarrWatchTests */ = { + isa = PBXFileSystemSynchronizedRootGroup; + path = CalendarrWatchTests; + sourceTree = ""; + }; + 3934CF3330544C02003958B8 /* CalendarrWatchUITests */ = { + isa = PBXFileSystemSynchronizedRootGroup; + path = CalendarrWatchUITests; + sourceTree = ""; + }; + 3934CF4930544C2E003958B8 /* CalendarrWatchComplications */ = { + isa = PBXFileSystemSynchronizedRootGroup; + exceptions = ( + 3934CF5630544C2E003958B8 /* Exceptions for "CalendarrWatchComplications" folder in "CalendarrWatchComplications" target */, + ); + path = CalendarrWatchComplications; + sourceTree = ""; + }; C0000D01FC4E10100AB5001 /* Calendarr iOS */ = { isa = PBXFileSystemSynchronizedRootGroup; path = "Calendarr iOS"; @@ -94,6 +186,38 @@ ); runOnlyForDeploymentPostprocessing = 0; }; + 3934CF1730544C01003958B8 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + CA1E4D0A0002000000000003 /* CalendarrCore in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 3934CF2330544C02003958B8 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 3934CF2D30544C02003958B8 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 3934CF4030544C2E003958B8 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 3934CF4830544C2E003958B8 /* SwiftUI.framework in Frameworks */, + 3934CF4630544C2E003958B8 /* WidgetKit.framework in Frameworks */, + CA1E4D0A0002000000000004 /* CalendarrCore in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; C0000801FB4E10100AB5001 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; @@ -114,6 +238,15 @@ /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ + 3934CF4430544C2E003958B8 /* Frameworks */ = { + isa = PBXGroup; + children = ( + 3934CF4530544C2E003958B8 /* WidgetKit.framework */, + 3934CF4730544C2E003958B8 /* SwiftUI.framework */, + ); + name = Frameworks; + sourceTree = ""; + }; C0000201FB4E10100AB5001 = { isa = PBXGroup; children = ( @@ -121,6 +254,11 @@ D0001A03ABCDEF0100AB5001 /* CalendarrWidgets */, D0001A04ABCDEF0100AB5001 /* Shared */, 3927C7BD2FB99D0F00EAD8ED /* Calendarr iOSTests */, + 3934CF1B30544C01003958B8 /* CalendarrWatch */, + 3934CF2930544C02003958B8 /* CalendarrWatchTests */, + 3934CF3330544C02003958B8 /* CalendarrWatchUITests */, + 3934CF4930544C2E003958B8 /* CalendarrWatchComplications */, + 3934CF4430544C2E003958B8 /* Frameworks */, C0000C01FB4E10100AB5001 /* Products */, ); sourceTree = ""; @@ -131,6 +269,10 @@ C0000B01FC4E10100AB5001 /* Calendarr iOS.app */, 3927C7BC2FB99D0E00EAD8ED /* Calendarr iOSTests.xctest */, D0001A02ABCDEF0100AB5001 /* CalendarrWidgets.appex */, + 3934CF1A30544C01003958B8 /* CalendarrWatch.app */, + 3934CF2630544C02003958B8 /* CalendarrWatchTests.xctest */, + 3934CF3030544C02003958B8 /* CalendarrWatchUITests.xctest */, + 3934CF4330544C2E003958B8 /* CalendarrWatchComplications.appex */, ); name = Products; sourceTree = ""; @@ -161,6 +303,100 @@ productReference = 3927C7BC2FB99D0E00EAD8ED /* Calendarr iOSTests.xctest */; productType = "com.apple.product-type.bundle.unit-test"; }; + 3934CF1930544C01003958B8 /* CalendarrWatch */ = { + isa = PBXNativeTarget; + buildConfigurationList = 3934CF3C30544C02003958B8 /* Build configuration list for PBXNativeTarget "CalendarrWatch" */; + buildPhases = ( + 3934CF1630544C01003958B8 /* Sources */, + 3934CF1730544C01003958B8 /* Frameworks */, + 3934CF1830544C01003958B8 /* Resources */, + 3934CF5A30544C2E003958B8 /* Embed Foundation Extensions */, + ); + buildRules = ( + ); + dependencies = ( + 3934CF5430544C2E003958B8 /* PBXTargetDependency */, + ); + fileSystemSynchronizedGroups = ( + 3934CF1B30544C01003958B8 /* CalendarrWatch */, + ); + name = CalendarrWatch; + packageProductDependencies = ( + CA1E4D0A0001000000000003 /* CalendarrCore */, + ); + productName = CalendarrWatch; + productReference = 3934CF1A30544C01003958B8 /* CalendarrWatch.app */; + productType = "com.apple.product-type.application"; + }; + 3934CF2530544C02003958B8 /* CalendarrWatchTests */ = { + isa = PBXNativeTarget; + buildConfigurationList = 3934CF3D30544C02003958B8 /* Build configuration list for PBXNativeTarget "CalendarrWatchTests" */; + buildPhases = ( + 3934CF2230544C02003958B8 /* Sources */, + 3934CF2330544C02003958B8 /* Frameworks */, + 3934CF2430544C02003958B8 /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + 3934CF2830544C02003958B8 /* PBXTargetDependency */, + ); + fileSystemSynchronizedGroups = ( + 3934CF2930544C02003958B8 /* CalendarrWatchTests */, + ); + name = CalendarrWatchTests; + packageProductDependencies = ( + ); + productName = CalendarrWatchTests; + productReference = 3934CF2630544C02003958B8 /* CalendarrWatchTests.xctest */; + productType = "com.apple.product-type.bundle.unit-test"; + }; + 3934CF2F30544C02003958B8 /* CalendarrWatchUITests */ = { + isa = PBXNativeTarget; + buildConfigurationList = 3934CF3E30544C02003958B8 /* Build configuration list for PBXNativeTarget "CalendarrWatchUITests" */; + buildPhases = ( + 3934CF2C30544C02003958B8 /* Sources */, + 3934CF2D30544C02003958B8 /* Frameworks */, + 3934CF2E30544C02003958B8 /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + 3934CF3230544C02003958B8 /* PBXTargetDependency */, + ); + fileSystemSynchronizedGroups = ( + 3934CF3330544C02003958B8 /* CalendarrWatchUITests */, + ); + name = CalendarrWatchUITests; + packageProductDependencies = ( + ); + productName = CalendarrWatchUITests; + productReference = 3934CF3030544C02003958B8 /* CalendarrWatchUITests.xctest */; + productType = "com.apple.product-type.bundle.ui-testing"; + }; + 3934CF4230544C2E003958B8 /* CalendarrWatchComplications */ = { + isa = PBXNativeTarget; + buildConfigurationList = 3934CF5730544C2E003958B8 /* Build configuration list for PBXNativeTarget "CalendarrWatchComplications" */; + buildPhases = ( + 3934CF3F30544C2E003958B8 /* Sources */, + 3934CF4030544C2E003958B8 /* Frameworks */, + 3934CF4130544C2E003958B8 /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + ); + fileSystemSynchronizedGroups = ( + 3934CF4930544C2E003958B8 /* CalendarrWatchComplications */, + ); + name = CalendarrWatchComplications; + packageProductDependencies = ( + CA1E4D0A0001000000000004 /* CalendarrCore */, + ); + productName = CalendarrWatchComplications; + productReference = 3934CF4330544C2E003958B8 /* CalendarrWatchComplications.appex */; + productType = "com.apple.product-type.app-extension"; + }; C0000A01FB4E10100AB5001 /* Calendarr iOS */ = { isa = PBXNativeTarget; buildConfigurationList = C0001601FB4E10100AB5001 /* Build configuration list for PBXNativeTarget "Calendarr iOS" */; @@ -169,11 +405,13 @@ C0000801FB4E10100AB5001 /* Frameworks */, C0000901FB4E10100AB5001 /* Resources */, D0001A0BABCDEF0100AB5001 /* Embed Foundation Extensions */, + 39E1B0010002000000000001 /* Embed Watch Content */, ); buildRules = ( ); dependencies = ( D0001A0EABCDEF0100AB5001 /* PBXTargetDependency */, + 39E1B0010004000000000001 /* PBXTargetDependency */, ); fileSystemSynchronizedGroups = ( C0000D01FC4E10100AB5001 /* Calendarr iOS */, @@ -219,13 +457,27 @@ isa = PBXProject; attributes = { BuildIndependentTargetsInParallel = 1; - LastSwiftUpdateCheck = 2650; + LastSwiftUpdateCheck = 2700; LastUpgradeCheck = 2640; TargetAttributes = { 3927C7BB2FB99D0E00EAD8ED = { CreatedOnToolsVersion = 26.5; TestTargetID = C0000A01FB4E10100AB5001; }; + 3934CF1930544C01003958B8 = { + CreatedOnToolsVersion = 27.0; + }; + 3934CF2530544C02003958B8 = { + CreatedOnToolsVersion = 27.0; + TestTargetID = 3934CF1930544C01003958B8; + }; + 3934CF2F30544C02003958B8 = { + CreatedOnToolsVersion = 27.0; + TestTargetID = 3934CF1930544C01003958B8; + }; + 3934CF4230544C2E003958B8 = { + CreatedOnToolsVersion = 27.0; + }; C0000A01FB4E10100AB5001 = { CreatedOnToolsVersion = 26.4.1; }; @@ -256,6 +508,10 @@ C0000A01FB4E10100AB5001 /* Calendarr iOS */, D0001A01ABCDEF0100AB5001 /* CalendarrWidgets */, 3927C7BB2FB99D0E00EAD8ED /* Calendarr iOSTests */, + 3934CF1930544C01003958B8 /* CalendarrWatch */, + 3934CF2530544C02003958B8 /* CalendarrWatchTests */, + 3934CF2F30544C02003958B8 /* CalendarrWatchUITests */, + 3934CF4230544C2E003958B8 /* CalendarrWatchComplications */, ); }; /* End PBXProject section */ @@ -268,6 +524,34 @@ ); runOnlyForDeploymentPostprocessing = 0; }; + 3934CF1830544C01003958B8 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 3934CF2430544C02003958B8 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 3934CF2E30544C02003958B8 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 3934CF4130544C2E003958B8 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; C0000901FB4E10100AB5001 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; @@ -292,6 +576,34 @@ ); runOnlyForDeploymentPostprocessing = 0; }; + 3934CF1630544C01003958B8 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 3934CF2230544C02003958B8 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 3934CF2C30544C02003958B8 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 3934CF3F30544C2E003958B8 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; C0000701FB4E10100AB5001 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; @@ -314,11 +626,31 @@ target = C0000A01FB4E10100AB5001 /* Calendarr iOS */; targetProxy = 3927C7C02FB99D0F00EAD8ED /* PBXContainerItemProxy */; }; + 3934CF2830544C02003958B8 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = 3934CF1930544C01003958B8 /* CalendarrWatch */; + targetProxy = 3934CF2730544C02003958B8 /* PBXContainerItemProxy */; + }; + 3934CF3230544C02003958B8 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = 3934CF1930544C01003958B8 /* CalendarrWatch */; + targetProxy = 3934CF3130544C02003958B8 /* PBXContainerItemProxy */; + }; + 3934CF5430544C2E003958B8 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = 3934CF4230544C2E003958B8 /* CalendarrWatchComplications */; + targetProxy = 3934CF5330544C2E003958B8 /* PBXContainerItemProxy */; + }; D0001A0EABCDEF0100AB5001 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = D0001A01ABCDEF0100AB5001 /* CalendarrWidgets */; targetProxy = D0001A0DABCDEF0100AB5001 /* PBXContainerItemProxy */; }; + 39E1B0010004000000000001 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = 3934CF1930544C01003958B8 /* CalendarrWatch */; + targetProxy = 39E1B0010003000000000001 /* PBXContainerItemProxy */; + }; /* End PBXTargetDependency section */ /* Begin XCBuildConfiguration section */ @@ -372,6 +704,232 @@ }; name = Release; }; + 3934CF3630544C02003958B8 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 1; + DEVELOPMENT_TEAM = PP34X97WS3; + ENABLE_PREVIEWS = YES; + GENERATE_INFOPLIST_FILE = YES; + INFOPLIST_KEY_CFBundleDisplayName = CalendarrWatch; + INFOPLIST_KEY_UISupportedInterfaceOrientations = "UIInterfaceOrientationPortrait UIInterfaceOrientationPortraitUpsideDown"; + INFOPLIST_KEY_WKCompanionAppBundleIdentifier = com.scarriffleservices.calendarr.ios; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + ); + MARKETING_VERSION = 1.0; + CODE_SIGN_ENTITLEMENTS = CalendarrWatch/CalendarrWatch.entitlements; + PRODUCT_BUNDLE_IDENTIFIER = com.scarriffleservices.calendarr.ios.watchkitapp; + PRODUCT_NAME = "$(TARGET_NAME)"; + SDKROOT = watchos; + SKIP_INSTALL = YES; + STRING_CATALOG_GENERATE_SYMBOLS = YES; + SWIFT_APPROACHABLE_CONCURRENCY = YES; + SWIFT_DEFAULT_ACTOR_ISOLATION = MainActor; + SWIFT_EMIT_LOC_STRINGS = YES; + SWIFT_UPCOMING_FEATURE_MEMBER_IMPORT_VISIBILITY = YES; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = 4; + WATCHOS_DEPLOYMENT_TARGET = 26.0; + }; + name = Debug; + }; + 3934CF3730544C02003958B8 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 1; + DEVELOPMENT_TEAM = PP34X97WS3; + ENABLE_PREVIEWS = YES; + GENERATE_INFOPLIST_FILE = YES; + INFOPLIST_KEY_CFBundleDisplayName = CalendarrWatch; + INFOPLIST_KEY_UISupportedInterfaceOrientations = "UIInterfaceOrientationPortrait UIInterfaceOrientationPortraitUpsideDown"; + INFOPLIST_KEY_WKCompanionAppBundleIdentifier = com.scarriffleservices.calendarr.ios; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + ); + MARKETING_VERSION = 1.0; + CODE_SIGN_ENTITLEMENTS = CalendarrWatch/CalendarrWatch.entitlements; + PRODUCT_BUNDLE_IDENTIFIER = com.scarriffleservices.calendarr.ios.watchkitapp; + PRODUCT_NAME = "$(TARGET_NAME)"; + SDKROOT = watchos; + SKIP_INSTALL = YES; + STRING_CATALOG_GENERATE_SYMBOLS = YES; + SWIFT_APPROACHABLE_CONCURRENCY = YES; + SWIFT_DEFAULT_ACTOR_ISOLATION = MainActor; + SWIFT_EMIT_LOC_STRINGS = YES; + SWIFT_UPCOMING_FEATURE_MEMBER_IMPORT_VISIBILITY = YES; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = 4; + WATCHOS_DEPLOYMENT_TARGET = 26.0; + }; + name = Release; + }; + 3934CF3830544C02003958B8 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + BUNDLE_LOADER = "$(TEST_HOST)"; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 1; + DEVELOPMENT_TEAM = PP34X97WS3; + GENERATE_INFOPLIST_FILE = YES; + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = "com.scarriffleservices.calendarr.ios.watchkitapp.CalendarrWatch-Watch-AppTests"; + PRODUCT_NAME = "$(TARGET_NAME)"; + SDKROOT = watchos; + STRING_CATALOG_GENERATE_SYMBOLS = NO; + SWIFT_APPROACHABLE_CONCURRENCY = YES; + SWIFT_EMIT_LOC_STRINGS = NO; + SWIFT_UPCOMING_FEATURE_MEMBER_IMPORT_VISIBILITY = YES; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = 4; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/CalendarrWatch.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/CalendarrWatch"; + WATCHOS_DEPLOYMENT_TARGET = 26.0; + }; + name = Debug; + }; + 3934CF3930544C02003958B8 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + BUNDLE_LOADER = "$(TEST_HOST)"; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 1; + DEVELOPMENT_TEAM = PP34X97WS3; + GENERATE_INFOPLIST_FILE = YES; + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = "com.scarriffleservices.calendarr.ios.watchkitapp.CalendarrWatch-Watch-AppTests"; + PRODUCT_NAME = "$(TARGET_NAME)"; + SDKROOT = watchos; + STRING_CATALOG_GENERATE_SYMBOLS = NO; + SWIFT_APPROACHABLE_CONCURRENCY = YES; + SWIFT_EMIT_LOC_STRINGS = NO; + SWIFT_UPCOMING_FEATURE_MEMBER_IMPORT_VISIBILITY = YES; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = 4; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/CalendarrWatch.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/CalendarrWatch"; + WATCHOS_DEPLOYMENT_TARGET = 26.0; + }; + name = Release; + }; + 3934CF3A30544C02003958B8 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 1; + DEVELOPMENT_TEAM = PP34X97WS3; + GENERATE_INFOPLIST_FILE = YES; + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = "com.scarriffleservices.calendarr.ios.watchkitapp.CalendarrWatch-Watch-AppUITests"; + PRODUCT_NAME = "$(TARGET_NAME)"; + SDKROOT = watchos; + STRING_CATALOG_GENERATE_SYMBOLS = NO; + SWIFT_APPROACHABLE_CONCURRENCY = YES; + SWIFT_EMIT_LOC_STRINGS = NO; + SWIFT_UPCOMING_FEATURE_MEMBER_IMPORT_VISIBILITY = YES; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = 4; + TEST_TARGET_NAME = CalendarrWatch; + WATCHOS_DEPLOYMENT_TARGET = 26.0; + }; + name = Debug; + }; + 3934CF3B30544C02003958B8 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 1; + DEVELOPMENT_TEAM = PP34X97WS3; + GENERATE_INFOPLIST_FILE = YES; + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = "com.scarriffleservices.calendarr.ios.watchkitapp.CalendarrWatch-Watch-AppUITests"; + PRODUCT_NAME = "$(TARGET_NAME)"; + SDKROOT = watchos; + STRING_CATALOG_GENERATE_SYMBOLS = NO; + SWIFT_APPROACHABLE_CONCURRENCY = YES; + SWIFT_EMIT_LOC_STRINGS = NO; + SWIFT_UPCOMING_FEATURE_MEMBER_IMPORT_VISIBILITY = YES; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = 4; + TEST_TARGET_NAME = CalendarrWatch; + WATCHOS_DEPLOYMENT_TARGET = 26.0; + }; + name = Release; + }; + 3934CF5830544C2E003958B8 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; + ASSETCATALOG_COMPILER_WIDGET_BACKGROUND_COLOR_NAME = WidgetBackground; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 1; + DEVELOPMENT_TEAM = PP34X97WS3; + GENERATE_INFOPLIST_FILE = YES; + INFOPLIST_FILE = CalendarrWatchComplications/Info.plist; + INFOPLIST_KEY_CFBundleDisplayName = CalendarrWatch; + INFOPLIST_KEY_NSHumanReadableCopyright = ""; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + "@executable_path/../../Frameworks", + "@executable_path/../../../../Frameworks", + ); + MARKETING_VERSION = 1.0; + CODE_SIGN_ENTITLEMENTS = CalendarrWatchComplications/CalendarrWatchComplications.entitlements; + PRODUCT_BUNDLE_IDENTIFIER = com.scarriffleservices.calendarr.ios.watchkitapp.complications; + PRODUCT_NAME = "$(TARGET_NAME)"; + SDKROOT = watchos; + SKIP_INSTALL = YES; + STRING_CATALOG_GENERATE_SYMBOLS = YES; + SWIFT_APPROACHABLE_CONCURRENCY = YES; + SWIFT_EMIT_LOC_STRINGS = YES; + SWIFT_UPCOMING_FEATURE_MEMBER_IMPORT_VISIBILITY = YES; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = 4; + WATCHOS_DEPLOYMENT_TARGET = 26.0; + }; + name = Debug; + }; + 3934CF5930544C2E003958B8 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; + ASSETCATALOG_COMPILER_WIDGET_BACKGROUND_COLOR_NAME = WidgetBackground; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 1; + DEVELOPMENT_TEAM = PP34X97WS3; + GENERATE_INFOPLIST_FILE = YES; + INFOPLIST_FILE = CalendarrWatchComplications/Info.plist; + INFOPLIST_KEY_CFBundleDisplayName = CalendarrWatch; + INFOPLIST_KEY_NSHumanReadableCopyright = ""; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + "@executable_path/../../Frameworks", + "@executable_path/../../../../Frameworks", + ); + MARKETING_VERSION = 1.0; + CODE_SIGN_ENTITLEMENTS = CalendarrWatchComplications/CalendarrWatchComplications.entitlements; + PRODUCT_BUNDLE_IDENTIFIER = com.scarriffleservices.calendarr.ios.watchkitapp.complications; + PRODUCT_NAME = "$(TARGET_NAME)"; + SDKROOT = watchos; + SKIP_INSTALL = YES; + STRING_CATALOG_GENERATE_SYMBOLS = YES; + SWIFT_APPROACHABLE_CONCURRENCY = YES; + SWIFT_EMIT_LOC_STRINGS = YES; + SWIFT_UPCOMING_FEATURE_MEMBER_IMPORT_VISIBILITY = YES; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = 4; + WATCHOS_DEPLOYMENT_TARGET = 26.0; + }; + name = Release; + }; C0001401FB4E10100AB5001 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { @@ -678,6 +1236,42 @@ defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; + 3934CF3C30544C02003958B8 /* Build configuration list for PBXNativeTarget "CalendarrWatch" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 3934CF3630544C02003958B8 /* Debug */, + 3934CF3730544C02003958B8 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 3934CF3D30544C02003958B8 /* Build configuration list for PBXNativeTarget "CalendarrWatchTests" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 3934CF3830544C02003958B8 /* Debug */, + 3934CF3930544C02003958B8 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 3934CF3E30544C02003958B8 /* Build configuration list for PBXNativeTarget "CalendarrWatchUITests" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 3934CF3A30544C02003958B8 /* Debug */, + 3934CF3B30544C02003958B8 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 3934CF5730544C2E003958B8 /* Build configuration list for PBXNativeTarget "CalendarrWatchComplications" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 3934CF5830544C2E003958B8 /* Debug */, + 3934CF5930544C2E003958B8 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; C0000601FB4E10100AB5001 /* Build configuration list for PBXProject "Calendarr iOS" */ = { isa = XCConfigurationList; buildConfigurations = ( @@ -707,22 +1301,6 @@ }; /* End XCConfigurationList section */ -/* Begin XCSwiftPackageProductDependency section */ - CA1E4D0A0001000000000001 /* CalendarrCore */ = { - isa = XCSwiftPackageProductDependency; - productName = CalendarrCore; - }; - CA1E4D0A0001000000000002 /* CalendarrCore */ = { - isa = XCSwiftPackageProductDependency; - productName = CalendarrCore; - }; - AA9701000002000000000001 /* AppAuth */ = { - isa = XCSwiftPackageProductDependency; - package = AA9701000003000000000001 /* XCRemoteSwiftPackageReference "AppAuth-iOS" */; - productName = AppAuth; - }; -/* End XCSwiftPackageProductDependency section */ - /* Begin XCLocalSwiftPackageReference section */ 39450EFC302A266A0090DDD7 /* XCLocalSwiftPackageReference "../CalendarrKit" */ = { isa = XCLocalSwiftPackageReference; @@ -740,6 +1318,30 @@ }; }; /* End XCRemoteSwiftPackageReference section */ + +/* Begin XCSwiftPackageProductDependency section */ + AA9701000002000000000001 /* AppAuth */ = { + isa = XCSwiftPackageProductDependency; + package = AA9701000003000000000001 /* XCRemoteSwiftPackageReference "AppAuth-iOS" */; + productName = AppAuth; + }; + CA1E4D0A0001000000000001 /* CalendarrCore */ = { + isa = XCSwiftPackageProductDependency; + productName = CalendarrCore; + }; + CA1E4D0A0001000000000003 /* CalendarrCore */ = { + isa = XCSwiftPackageProductDependency; + productName = CalendarrCore; + }; + CA1E4D0A0001000000000004 /* CalendarrCore */ = { + isa = XCSwiftPackageProductDependency; + productName = CalendarrCore; + }; + CA1E4D0A0001000000000002 /* CalendarrCore */ = { + isa = XCSwiftPackageProductDependency; + productName = CalendarrCore; + }; +/* End XCSwiftPackageProductDependency section */ }; rootObject = C0000301FB4E10100AB5001 /* Project object */; } diff --git a/Calendarr iOS.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved b/Calendarr iOS.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved new file mode 100644 index 0000000..895da1c --- /dev/null +++ b/Calendarr iOS.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved @@ -0,0 +1,15 @@ +{ + "originHash" : "478d8419d86ca78c1539d3775396b811ce835c77379f2af98e26eefd35ee2311", + "pins" : [ + { + "identity" : "appauth-ios", + "kind" : "remoteSourceControl", + "location" : "https://github.com/openid/AppAuth-iOS.git", + "state" : { + "revision" : "2781038865a80e2c425a1da12cc1327bcd56501f", + "version" : "1.7.6" + } + } + ], + "version" : 3 +} diff --git a/Calendarr iOS.xcodeproj/xcuserdata/scarriffle.xcuserdatad/xcschemes/xcschememanagement.plist b/Calendarr iOS.xcodeproj/xcuserdata/scarriffle.xcuserdatad/xcschemes/xcschememanagement.plist index af12f91..d6bd252 100644 --- a/Calendarr iOS.xcodeproj/xcuserdata/scarriffle.xcuserdatad/xcschemes/xcschememanagement.plist +++ b/Calendarr iOS.xcodeproj/xcuserdata/scarriffle.xcuserdatad/xcschemes/xcschememanagement.plist @@ -9,11 +9,31 @@ orderHint 0 - CalendarrWidgets.xcscheme_^#shared#^_ + CalendarrWatch Watch App.xcscheme_^#shared#^_ + + orderHint + 3 + + CalendarrWatch.xcscheme_^#shared#^_ orderHint 2 + CalendarrWatchComplications.xcscheme_^#shared#^_ + + orderHint + 3 + + CalendarrWatchExtension.xcscheme_^#shared#^_ + + orderHint + 4 + + CalendarrWidgets.xcscheme_^#shared#^_ + + orderHint + 4 + SuppressBuildableAutocreation diff --git a/CalendarrWatch/Assets.xcassets/AccentColor.colorset/Contents.json b/CalendarrWatch/Assets.xcassets/AccentColor.colorset/Contents.json new file mode 100644 index 0000000..eb87897 --- /dev/null +++ b/CalendarrWatch/Assets.xcassets/AccentColor.colorset/Contents.json @@ -0,0 +1,11 @@ +{ + "colors" : [ + { + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/CalendarrWatch/Assets.xcassets/AppIcon.appiconset/Contents.json b/CalendarrWatch/Assets.xcassets/AppIcon.appiconset/Contents.json new file mode 100644 index 0000000..49c81cd --- /dev/null +++ b/CalendarrWatch/Assets.xcassets/AppIcon.appiconset/Contents.json @@ -0,0 +1,13 @@ +{ + "images" : [ + { + "idiom" : "universal", + "platform" : "watchos", + "size" : "1024x1024" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/CalendarrWatch/Assets.xcassets/Contents.json b/CalendarrWatch/Assets.xcassets/Contents.json new file mode 100644 index 0000000..73c0059 --- /dev/null +++ b/CalendarrWatch/Assets.xcassets/Contents.json @@ -0,0 +1,6 @@ +{ + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/CalendarrWatch/CalendarrWatch.entitlements b/CalendarrWatch/CalendarrWatch.entitlements new file mode 100644 index 0000000..bb88d59 --- /dev/null +++ b/CalendarrWatch/CalendarrWatch.entitlements @@ -0,0 +1,10 @@ + + + + + com.apple.security.application-groups + + group.com.scarriffleservices.calendarr + + + diff --git a/CalendarrWatch/CalendarrWatchApp.swift b/CalendarrWatch/CalendarrWatchApp.swift new file mode 100644 index 0000000..d059cc7 --- /dev/null +++ b/CalendarrWatch/CalendarrWatchApp.swift @@ -0,0 +1,17 @@ +// +// CalendarrWatchApp.swift +// CalendarrWatch Watch App +// +// Created by Guido Schmit on 11.09.2026. +// + +import SwiftUI + +@main +struct CalendarrWatch_Watch_AppApp: App { + var body: some Scene { + WindowGroup { + ContentView() + } + } +} diff --git a/CalendarrWatch/ContentView.swift b/CalendarrWatch/ContentView.swift new file mode 100644 index 0000000..01101ce --- /dev/null +++ b/CalendarrWatch/ContentView.swift @@ -0,0 +1,24 @@ +// +// ContentView.swift +// CalendarrWatch Watch App +// +// Created by Guido Schmit on 11.09.2026. +// + +import SwiftUI + +struct ContentView: View { + var body: some View { + VStack { + Image(systemName: "globe") + .imageScale(.large) + .foregroundStyle(.tint) + Text("Hello, world!") + } + .padding() + } +} + +#Preview { + ContentView() +} diff --git a/CalendarrWatchComplications/Assets.xcassets/AccentColor.colorset/Contents.json b/CalendarrWatchComplications/Assets.xcassets/AccentColor.colorset/Contents.json new file mode 100644 index 0000000..eb87897 --- /dev/null +++ b/CalendarrWatchComplications/Assets.xcassets/AccentColor.colorset/Contents.json @@ -0,0 +1,11 @@ +{ + "colors" : [ + { + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/CalendarrWatchComplications/Assets.xcassets/AppIcon.appiconset/Contents.json b/CalendarrWatchComplications/Assets.xcassets/AppIcon.appiconset/Contents.json new file mode 100644 index 0000000..49c81cd --- /dev/null +++ b/CalendarrWatchComplications/Assets.xcassets/AppIcon.appiconset/Contents.json @@ -0,0 +1,13 @@ +{ + "images" : [ + { + "idiom" : "universal", + "platform" : "watchos", + "size" : "1024x1024" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/CalendarrWatchComplications/Assets.xcassets/Contents.json b/CalendarrWatchComplications/Assets.xcassets/Contents.json new file mode 100644 index 0000000..73c0059 --- /dev/null +++ b/CalendarrWatchComplications/Assets.xcassets/Contents.json @@ -0,0 +1,6 @@ +{ + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/CalendarrWatchComplications/Assets.xcassets/WidgetBackground.colorset/Contents.json b/CalendarrWatchComplications/Assets.xcassets/WidgetBackground.colorset/Contents.json new file mode 100644 index 0000000..eb87897 --- /dev/null +++ b/CalendarrWatchComplications/Assets.xcassets/WidgetBackground.colorset/Contents.json @@ -0,0 +1,11 @@ +{ + "colors" : [ + { + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/CalendarrWatchComplications/CalendarrWatch.swift b/CalendarrWatchComplications/CalendarrWatch.swift new file mode 100644 index 0000000..ac6c300 --- /dev/null +++ b/CalendarrWatchComplications/CalendarrWatch.swift @@ -0,0 +1,86 @@ +// +// CalendarrWatch.swift +// CalendarrWatch +// +// Created by Guido Schmit on 11.09.2026. +// + +import WidgetKit +import SwiftUI + +struct Provider: TimelineProvider { + func placeholder(in context: Context) -> SimpleEntry { + SimpleEntry(date: Date(), emoji: "πŸ˜€") + } + + func getSnapshot(in context: Context, completion: @escaping (SimpleEntry) -> ()) { + let entry = SimpleEntry(date: Date(), emoji: "πŸ˜€") + completion(entry) + } + + func getTimeline(in context: Context, completion: @escaping (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, emoji: "πŸ˜€") + entries.append(entry) + } + + let timeline = Timeline(entries: entries, policy: .atEnd) + completion(timeline) + } + +// func relevances() async -> WidgetRelevances { +// // Generate a list containing the contexts this widget is relevant in. +// } +} + +struct SimpleEntry: TimelineEntry { + let date: Date + let emoji: String +} + +struct CalendarrWatchEntryView : View { + var entry: Provider.Entry + + var body: some View { + VStack { + HStack { + Text("Time:") + Text(entry.date, style: .time) + } + + Text("Emoji:") + Text(entry.emoji) + } + } +} + +struct CalendarrWatch: Widget { + let kind: String = "CalendarrWatch" + + var body: some WidgetConfiguration { + StaticConfiguration(kind: kind, provider: Provider()) { entry in + if #available(watchOS 10.0, *) { + CalendarrWatchEntryView(entry: entry) + .containerBackground(.fill.tertiary, for: .widget) + } else { + CalendarrWatchEntryView(entry: entry) + .padding() + .background() + } + } + .configurationDisplayName("My Widget") + .description("This is an example widget.") + } +} + +#Preview(as: .accessoryRectangular) { + CalendarrWatch() +} timeline: { + SimpleEntry(date: .now, emoji: "πŸ˜€") + SimpleEntry(date: .now, emoji: "🀩") +} diff --git a/CalendarrWatchComplications/CalendarrWatchBundle.swift b/CalendarrWatchComplications/CalendarrWatchBundle.swift new file mode 100644 index 0000000..e9dbbf2 --- /dev/null +++ b/CalendarrWatchComplications/CalendarrWatchBundle.swift @@ -0,0 +1,17 @@ +// +// CalendarrWatchBundle.swift +// CalendarrWatch +// +// Created by Guido Schmit on 11.09.2026. +// + +import WidgetKit +import SwiftUI + +@main +struct CalendarrWatchBundle: WidgetBundle { + var body: some Widget { + CalendarrWatch() + CalendarrWatchControl() + } +} diff --git a/CalendarrWatchComplications/CalendarrWatchComplications.entitlements b/CalendarrWatchComplications/CalendarrWatchComplications.entitlements new file mode 100644 index 0000000..bb88d59 --- /dev/null +++ b/CalendarrWatchComplications/CalendarrWatchComplications.entitlements @@ -0,0 +1,10 @@ + + + + + com.apple.security.application-groups + + group.com.scarriffleservices.calendarr + + + diff --git a/CalendarrWatchComplications/CalendarrWatchControl.swift b/CalendarrWatchComplications/CalendarrWatchControl.swift new file mode 100644 index 0000000..64e323e --- /dev/null +++ b/CalendarrWatchComplications/CalendarrWatchControl.swift @@ -0,0 +1,54 @@ +// +// CalendarrWatchControl.swift +// CalendarrWatch +// +// Created by Guido Schmit on 11.09.2026. +// + +import AppIntents +import SwiftUI +import WidgetKit + +struct CalendarrWatchControl: ControlWidget { + var body: some ControlWidgetConfiguration { + StaticControlConfiguration( + kind: ".watchkitapp.CalendarrWatch", + provider: Provider() + ) { value in + ControlWidgetToggle( + "Start Timer", + isOn: value, + action: StartTimerIntent() + ) { isRunning in + Label(isRunning ? "On" : "Off", systemImage: "timer") + } + } + .displayName("Timer") + .description("A an example control that runs a timer.") + } +} + +extension CalendarrWatchControl { + struct Provider: ControlValueProvider { + var previewValue: Bool { + false + } + + func currentValue() async throws -> Bool { + let isRunning = true // Check if the timer is running + return isRunning + } + } +} + +struct StartTimerIntent: SetValueIntent { + static let title: LocalizedStringResource = "Start a timer" + + @Parameter(title: "Timer is running") + var value: Bool + + func perform() async throws -> some IntentResult { + // Start / stop the timer based on `value`. + return .result() + } +} diff --git a/CalendarrWatchComplications/Info.plist b/CalendarrWatchComplications/Info.plist new file mode 100644 index 0000000..0f118fb --- /dev/null +++ b/CalendarrWatchComplications/Info.plist @@ -0,0 +1,11 @@ + + + + + NSExtension + + NSExtensionPointIdentifier + com.apple.widgetkit-extension + + + diff --git a/CalendarrWatchTests/CalendarrWatch_Watch_AppTests.swift b/CalendarrWatchTests/CalendarrWatch_Watch_AppTests.swift new file mode 100644 index 0000000..0f40448 --- /dev/null +++ b/CalendarrWatchTests/CalendarrWatch_Watch_AppTests.swift @@ -0,0 +1,19 @@ +// +// CalendarrWatch_Watch_AppTests.swift +// CalendarrWatch Watch AppTests +// +// Created by Guido Schmit on 11.09.2026. +// + +import Testing +@testable import CalendarrWatch_Watch_App + +struct CalendarrWatch_Watch_AppTests { + + @Test func example() async throws { + // Write your test here and use APIs like `#expect(...)` to check expected conditions. + // Swift Testing Documentation + // https://developer.apple.com/documentation/testing + } + +} diff --git a/CalendarrWatchUITests/CalendarrWatch_Watch_AppUITests.swift b/CalendarrWatchUITests/CalendarrWatch_Watch_AppUITests.swift new file mode 100644 index 0000000..5c27a48 --- /dev/null +++ b/CalendarrWatchUITests/CalendarrWatch_Watch_AppUITests.swift @@ -0,0 +1,43 @@ +// +// CalendarrWatch_Watch_AppUITests.swift +// CalendarrWatch Watch AppUITests +// +// Created by Guido Schmit on 11.09.2026. +// + +import XCTest + +final class CalendarrWatch_Watch_AppUITests: 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. + // XCUIAutomation Documentation + // https://developer.apple.com/documentation/xcuiautomation + } + + @MainActor + func testLaunchPerformance() throws { + // This measures how long it takes to launch your application. + measure(metrics: [XCTApplicationLaunchMetric()]) { + XCUIApplication().launch() + } + } +}