Add MoonWatch app, widget extension, shared module, and .gitignore

Adds the real MoonWatch implementation on top of the initial Xcode
template: new SwiftUI views (MoonDiskView, StarFieldView), the
MoonWatchWidget extension, and a Shared module containing the moon
phase calculator, shadow shape, and shared asset catalog. Also adds a
Swift/Xcode/macOS .gitignore and untracks per-user xcuserdata files.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
2026-05-07 21:05:16 -07:00
parent 1698e3ce15
commit 87f8c7173c
17 changed files with 1211 additions and 24 deletions

View File

@@ -6,7 +6,18 @@
objectVersion = 77;
objects = {
/* Begin PBXBuildFile section */
D0CAFE00000000000000000E /* MoonWatchWidget.appex in Embed Foundation Extensions */ = {isa = PBXBuildFile; fileRef = D0CAFE000000000000000003 /* MoonWatchWidget.appex */; settings = {ATTRIBUTES = (RemoveHeadersOnCopy, ); }; };
/* End PBXBuildFile section */
/* Begin PBXContainerItemProxy section */
D0CAFE000000000000000009 /* PBXContainerItemProxy */ = {
isa = PBXContainerItemProxy;
containerPortal = EBC8997D2F9E7FA200246C26 /* Project object */;
proxyType = 1;
remoteGlobalIDString = D0CAFE000000000000000008;
remoteInfo = MoonWatchWidget;
};
EBC899932F9E7FA300246C26 /* PBXContainerItemProxy */ = {
isa = PBXContainerItemProxy;
containerPortal = EBC8997D2F9E7FA200246C26 /* Project object */;
@@ -23,13 +34,51 @@
};
/* End PBXContainerItemProxy section */
/* Begin PBXCopyFilesBuildPhase section */
D0CAFE000000000000000007 /* Embed Foundation Extensions */ = {
isa = PBXCopyFilesBuildPhase;
buildActionMask = 2147483647;
dstPath = "";
dstSubfolderSpec = 13;
files = (
D0CAFE00000000000000000E /* MoonWatchWidget.appex in Embed Foundation Extensions */,
);
name = "Embed Foundation Extensions";
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXCopyFilesBuildPhase section */
/* Begin PBXFileReference section */
D0CAFE000000000000000003 /* MoonWatchWidget.appex */ = {isa = PBXFileReference; explicitFileType = "wrapper.app-extension"; includeInIndex = 0; path = MoonWatchWidget.appex; sourceTree = BUILT_PRODUCTS_DIR; };
EBC899852F9E7FA200246C26 /* MoonWatch.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = MoonWatch.app; sourceTree = BUILT_PRODUCTS_DIR; };
EBC899922F9E7FA300246C26 /* MoonWatchTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = MoonWatchTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; };
EBC8999C2F9E7FA300246C26 /* MoonWatchUITests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = MoonWatchUITests.xctest; sourceTree = BUILT_PRODUCTS_DIR; };
/* End PBXFileReference section */
/* Begin PBXFileSystemSynchronizedBuildFileExceptionSet section */
D0CAFE000000000000000010 /* Exceptions for "MoonWatchWidget" folder in "MoonWatchWidget" target */ = {
isa = PBXFileSystemSynchronizedBuildFileExceptionSet;
membershipExceptions = (
Info.plist,
);
target = D0CAFE000000000000000008 /* MoonWatchWidget */;
};
/* End PBXFileSystemSynchronizedBuildFileExceptionSet section */
/* Begin PBXFileSystemSynchronizedRootGroup section */
D0CAFE000000000000000001 /* Shared */ = {
isa = PBXFileSystemSynchronizedRootGroup;
path = Shared;
sourceTree = "<group>";
};
D0CAFE000000000000000002 /* MoonWatchWidget */ = {
isa = PBXFileSystemSynchronizedRootGroup;
exceptions = (
D0CAFE000000000000000010 /* Exceptions for "MoonWatchWidget" folder in "MoonWatchWidget" target */,
);
path = MoonWatchWidget;
sourceTree = "<group>";
};
EBC899872F9E7FA200246C26 /* MoonWatch */ = {
isa = PBXFileSystemSynchronizedRootGroup;
path = MoonWatch;
@@ -48,6 +97,13 @@
/* End PBXFileSystemSynchronizedRootGroup section */
/* Begin PBXFrameworksBuildPhase section */
D0CAFE000000000000000005 /* Frameworks */ = {
isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647;
files = (
);
runOnlyForDeploymentPostprocessing = 0;
};
EBC899822F9E7FA200246C26 /* Frameworks */ = {
isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647;
@@ -75,7 +131,9 @@
EBC8997C2F9E7FA200246C26 = {
isa = PBXGroup;
children = (
D0CAFE000000000000000001 /* Shared */,
EBC899872F9E7FA200246C26 /* MoonWatch */,
D0CAFE000000000000000002 /* MoonWatchWidget */,
EBC899952F9E7FA300246C26 /* MoonWatchTests */,
EBC8999F2F9E7FA300246C26 /* MoonWatchUITests */,
EBC899862F9E7FA200246C26 /* Products */,
@@ -88,6 +146,7 @@
EBC899852F9E7FA200246C26 /* MoonWatch.app */,
EBC899922F9E7FA300246C26 /* MoonWatchTests.xctest */,
EBC8999C2F9E7FA300246C26 /* MoonWatchUITests.xctest */,
D0CAFE000000000000000003 /* MoonWatchWidget.appex */,
);
name = Products;
sourceTree = "<group>";
@@ -95,6 +154,29 @@
/* End PBXGroup section */
/* Begin PBXNativeTarget section */
D0CAFE000000000000000008 /* MoonWatchWidget */ = {
isa = PBXNativeTarget;
buildConfigurationList = D0CAFE00000000000000000D /* Build configuration list for PBXNativeTarget "MoonWatchWidget" */;
buildPhases = (
D0CAFE000000000000000004 /* Sources */,
D0CAFE000000000000000005 /* Frameworks */,
D0CAFE000000000000000006 /* Resources */,
);
buildRules = (
);
dependencies = (
);
fileSystemSynchronizedGroups = (
D0CAFE000000000000000001 /* Shared */,
D0CAFE000000000000000002 /* MoonWatchWidget */,
);
name = MoonWatchWidget;
packageProductDependencies = (
);
productName = MoonWatchWidget;
productReference = D0CAFE000000000000000003 /* MoonWatchWidget.appex */;
productType = "com.apple.product-type.app-extension";
};
EBC899842F9E7FA200246C26 /* MoonWatch */ = {
isa = PBXNativeTarget;
buildConfigurationList = EBC899A62F9E7FA300246C26 /* Build configuration list for PBXNativeTarget "MoonWatch" */;
@@ -102,12 +184,15 @@
EBC899812F9E7FA200246C26 /* Sources */,
EBC899822F9E7FA200246C26 /* Frameworks */,
EBC899832F9E7FA200246C26 /* Resources */,
D0CAFE000000000000000007 /* Embed Foundation Extensions */,
);
buildRules = (
);
dependencies = (
D0CAFE00000000000000000A /* PBXTargetDependency */,
);
fileSystemSynchronizedGroups = (
D0CAFE000000000000000001 /* Shared */,
EBC899872F9E7FA200246C26 /* MoonWatch */,
);
name = MoonWatch;
@@ -173,6 +258,9 @@
LastSwiftUpdateCheck = 2640;
LastUpgradeCheck = 2640;
TargetAttributes = {
D0CAFE000000000000000008 = {
CreatedOnToolsVersion = 26.4.1;
};
EBC899842F9E7FA200246C26 = {
CreatedOnToolsVersion = 26.4.1;
};
@@ -201,6 +289,7 @@
projectRoot = "";
targets = (
EBC899842F9E7FA200246C26 /* MoonWatch */,
D0CAFE000000000000000008 /* MoonWatchWidget */,
EBC899912F9E7FA300246C26 /* MoonWatchTests */,
EBC8999B2F9E7FA300246C26 /* MoonWatchUITests */,
);
@@ -208,6 +297,13 @@
/* End PBXProject section */
/* Begin PBXResourcesBuildPhase section */
D0CAFE000000000000000006 /* Resources */ = {
isa = PBXResourcesBuildPhase;
buildActionMask = 2147483647;
files = (
);
runOnlyForDeploymentPostprocessing = 0;
};
EBC899832F9E7FA200246C26 /* Resources */ = {
isa = PBXResourcesBuildPhase;
buildActionMask = 2147483647;
@@ -232,6 +328,13 @@
/* End PBXResourcesBuildPhase section */
/* Begin PBXSourcesBuildPhase section */
D0CAFE000000000000000004 /* Sources */ = {
isa = PBXSourcesBuildPhase;
buildActionMask = 2147483647;
files = (
);
runOnlyForDeploymentPostprocessing = 0;
};
EBC899812F9E7FA200246C26 /* Sources */ = {
isa = PBXSourcesBuildPhase;
buildActionMask = 2147483647;
@@ -256,6 +359,11 @@
/* End PBXSourcesBuildPhase section */
/* Begin PBXTargetDependency section */
D0CAFE00000000000000000A /* PBXTargetDependency */ = {
isa = PBXTargetDependency;
target = D0CAFE000000000000000008 /* MoonWatchWidget */;
targetProxy = D0CAFE000000000000000009 /* PBXContainerItemProxy */;
};
EBC899942F9E7FA300246C26 /* PBXTargetDependency */ = {
isa = PBXTargetDependency;
target = EBC899842F9E7FA200246C26 /* MoonWatch */;
@@ -269,6 +377,66 @@
/* End PBXTargetDependency section */
/* Begin XCBuildConfiguration section */
D0CAFE00000000000000000B /* Debug */ = {
isa = XCBuildConfiguration;
buildSettings = {
CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 1;
ENABLE_PREVIEWS = YES;
GENERATE_INFOPLIST_FILE = NO;
INFOPLIST_FILE = MoonWatchWidget/Info.plist;
INFOPLIST_KEY_CFBundleDisplayName = "MoonWatch Widget";
INFOPLIST_KEY_NSHumanReadableCopyright = "";
IPHONEOS_DEPLOYMENT_TARGET = 26.4;
LD_RUNPATH_SEARCH_PATHS = (
"$(inherited)",
"@executable_path/Frameworks",
"@executable_path/../../Frameworks",
);
MARKETING_VERSION = 1.0;
PRODUCT_BUNDLE_IDENTIFIER = "dave-enterprise.MoonWatch.MoonWatchWidget";
PRODUCT_NAME = "$(TARGET_NAME)";
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 = "1,2";
};
name = Debug;
};
D0CAFE00000000000000000C /* Release */ = {
isa = XCBuildConfiguration;
buildSettings = {
CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 1;
ENABLE_PREVIEWS = YES;
GENERATE_INFOPLIST_FILE = NO;
INFOPLIST_FILE = MoonWatchWidget/Info.plist;
INFOPLIST_KEY_CFBundleDisplayName = "MoonWatch Widget";
INFOPLIST_KEY_NSHumanReadableCopyright = "";
IPHONEOS_DEPLOYMENT_TARGET = 26.4;
LD_RUNPATH_SEARCH_PATHS = (
"$(inherited)",
"@executable_path/Frameworks",
"@executable_path/../../Frameworks",
);
MARKETING_VERSION = 1.0;
PRODUCT_BUNDLE_IDENTIFIER = "dave-enterprise.MoonWatch.MoonWatchWidget";
PRODUCT_NAME = "$(TARGET_NAME)";
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 = "1,2";
};
name = Release;
};
EBC899A42F9E7FA300246C26 /* Debug */ = {
isa = XCBuildConfiguration;
buildSettings = {
@@ -533,6 +701,15 @@
/* End XCBuildConfiguration section */
/* Begin XCConfigurationList section */
D0CAFE00000000000000000D /* Build configuration list for PBXNativeTarget "MoonWatchWidget" */ = {
isa = XCConfigurationList;
buildConfigurations = (
D0CAFE00000000000000000B /* Debug */,
D0CAFE00000000000000000C /* Release */,
);
defaultConfigurationIsVisible = 0;
defaultConfigurationName = Release;
};
EBC899802F9E7FA200246C26 /* Build configuration list for PBXProject "MoonWatch" */ = {
isa = XCConfigurationList;
buildConfigurations = (