feat: add macOS task board widget app

This commit is contained in:
loveuer
2026-09-02 00:27:33 -07:00
commit 9dafdce855
13 changed files with 485 additions and 0 deletions
+111
View File
@@ -0,0 +1,111 @@
// !$*UTF8*$!
{
archiveVersion = 1;
classes = {};
objectVersion = 56;
objects = {
/* Begin PBXBuildFile section */
A10000000000000000000001 /* UTrelloApp.swift in Sources */ = {isa = PBXBuildFile; fileRef = A10000000000000000000011 /* UTrelloApp.swift */; };
A10000000000000000000002 /* BoardView.swift in Sources */ = {isa = PBXBuildFile; fileRef = A10000000000000000000012 /* BoardView.swift */; };
A10000000000000000000003 /* TaskItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = A10000000000000000000013 /* TaskItem.swift */; };
A10000000000000000000004 /* TaskStore.swift in Sources */ = {isa = PBXBuildFile; fileRef = A10000000000000000000014 /* TaskStore.swift */; };
A10000000000000000000005 /* WidgetKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A10000000000000000000021 /* WidgetKit.framework */; };
A10000000000000000000006 /* UTrelloWidget.swift in Sources */ = {isa = PBXBuildFile; fileRef = A10000000000000000000031 /* UTrelloWidget.swift */; };
A10000000000000000000007 /* UTrelloWidgetBundle.swift in Sources */ = {isa = PBXBuildFile; fileRef = A10000000000000000000032 /* UTrelloWidgetBundle.swift */; };
A10000000000000000000008 /* TaskItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = A10000000000000000000013 /* TaskItem.swift */; };
A10000000000000000000009 /* TaskStore.swift in Sources */ = {isa = PBXBuildFile; fileRef = A10000000000000000000014 /* TaskStore.swift */; };
A1000000000000000000000A /* WidgetKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A10000000000000000000021 /* WidgetKit.framework */; };
A1000000000000000000000B /* UTrelloWidget.appex in Embed App Extensions */ = {isa = PBXBuildFile; fileRef = A10000000000000000000041 /* UTrelloWidget.appex */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
/* End PBXBuildFile section */
/* Begin PBXContainerItemProxy section */
A10000000000000000000051 /* PBXContainerItemProxy */ = {
isa = PBXContainerItemProxy;
containerPortal = A10000000000000000000061 /* Project object */;
proxyType = 1;
remoteGlobalIDString = A10000000000000000000071;
remoteInfo = UTrelloWidget;
};
/* End PBXContainerItemProxy section */
/* Begin PBXCopyFilesBuildPhase section */
A10000000000000000000081 /* Embed App Extensions */ = {
isa = PBXCopyFilesBuildPhase;
buildActionMask = 2147483647;
dstPath = "";
dstSubfolderSpec = 13;
files = (A1000000000000000000000B /* UTrelloWidget.appex in Embed App Extensions */, );
name = "Embed App Extensions";
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXCopyFilesBuildPhase section */
/* Begin PBXFileReference section */
A10000000000000000000011 /* UTrelloApp.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UTrelloApp.swift; sourceTree = "<group>"; };
A10000000000000000000012 /* BoardView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BoardView.swift; sourceTree = "<group>"; };
A10000000000000000000013 /* TaskItem.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TaskItem.swift; sourceTree = "<group>"; };
A10000000000000000000014 /* TaskStore.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TaskStore.swift; sourceTree = "<group>"; };
A10000000000000000000015 /* UTrello.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.xml; path = UTrello.entitlements; sourceTree = "<group>"; };
A10000000000000000000021 /* WidgetKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = WidgetKit.framework; path = System/Library/Frameworks/WidgetKit.framework; sourceTree = SDKROOT; };
A10000000000000000000031 /* UTrelloWidget.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UTrelloWidget.swift; sourceTree = "<group>"; };
A10000000000000000000032 /* UTrelloWidgetBundle.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UTrelloWidgetBundle.swift; sourceTree = "<group>"; };
A10000000000000000000033 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
A10000000000000000000034 /* UTrelloWidget.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.xml; path = UTrelloWidget.entitlements; sourceTree = "<group>"; };
A10000000000000000000040 /* UTrello.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = UTrello.app; sourceTree = BUILT_PRODUCTS_DIR; };
A10000000000000000000041 /* UTrelloWidget.appex */ = {isa = PBXFileReference; explicitFileType = wrapper.app-extension; includeInIndex = 0; path = UTrelloWidget.appex; sourceTree = BUILT_PRODUCTS_DIR; };
/* End PBXFileReference section */
/* Begin PBXFrameworksBuildPhase section */
A10000000000000000000091 /* Frameworks */ = {isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = (A10000000000000000000005 /* WidgetKit.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; };
A10000000000000000000092 /* Frameworks */ = {isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = (A1000000000000000000000A /* WidgetKit.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; };
/* End PBXFrameworksBuildPhase section */
/* Begin PBXGroup section */
A100000000000000000000A1 = {isa = PBXGroup; children = (A100000000000000000000A2 /* UTrello */, A100000000000000000000A5 /* UTrelloWidget */, A100000000000000000000A8 /* Frameworks */, A100000000000000000000A9 /* Products */, ); sourceTree = "<group>"; };
A100000000000000000000A2 /* UTrello */ = {isa = PBXGroup; path = UTrello; sourceTree = "<group>"; children = (A100000000000000000000A3 /* App */, A100000000000000000000A4 /* Shared */, A10000000000000000000015 /* UTrello.entitlements */, ); };
A100000000000000000000A3 /* App */ = {isa = PBXGroup; path = App; sourceTree = "<group>"; children = (A10000000000000000000011 /* UTrelloApp.swift */, A10000000000000000000012 /* BoardView.swift */, ); };
A100000000000000000000A4 /* Shared */ = {isa = PBXGroup; path = Shared; sourceTree = "<group>"; children = (A10000000000000000000013 /* TaskItem.swift */, A10000000000000000000014 /* TaskStore.swift */, ); };
A100000000000000000000A5 /* UTrelloWidget */ = {isa = PBXGroup; path = UTrelloWidget; sourceTree = "<group>"; children = (A10000000000000000000031 /* UTrelloWidget.swift */, A10000000000000000000032 /* UTrelloWidgetBundle.swift */, A10000000000000000000033 /* Info.plist */, A10000000000000000000034 /* UTrelloWidget.entitlements */, ); };
A100000000000000000000A8 /* Frameworks */ = {isa = PBXGroup; children = (A10000000000000000000021 /* WidgetKit.framework */, ); name = Frameworks; sourceTree = "<group>"; };
A100000000000000000000A9 /* Products */ = {isa = PBXGroup; children = (A10000000000000000000040 /* UTrello.app */, A10000000000000000000041 /* UTrelloWidget.appex */, ); name = Products; sourceTree = "<group>"; };
/* End PBXGroup section */
/* Begin PBXNativeTarget section */
A10000000000000000000070 /* UTrello */ = {isa = PBXNativeTarget; buildConfigurationList = A100000000000000000000B1 /* Build configuration list for PBXNativeTarget \"UTrello\" */; buildPhases = (A10000000000000000000093 /* Sources */, A10000000000000000000091 /* Frameworks */, A10000000000000000000081 /* Embed App Extensions */, ); buildRules = (); dependencies = (A100000000000000000000B2 /* PBXTargetDependency */, ); name = UTrello; productName = UTrello; productReference = A10000000000000000000040 /* UTrello.app */; productType = "com.apple.product-type.application"; };
A10000000000000000000071 /* UTrelloWidget */ = {isa = PBXNativeTarget; buildConfigurationList = A100000000000000000000B3 /* Build configuration list for PBXNativeTarget \"UTrelloWidget\" */; buildPhases = (A10000000000000000000094 /* Sources */, A10000000000000000000092 /* Frameworks */, ); buildRules = (); dependencies = (); name = UTrelloWidget; productName = UTrelloWidget; productReference = A10000000000000000000041 /* UTrelloWidget.appex */; productType = "com.apple.product-type.app-extension"; };
/* End PBXNativeTarget section */
/* Begin PBXProject section */
A10000000000000000000061 /* Project object */ = {isa = PBXProject; attributes = {BuildIndependentTargetsInParallel = 1; LastUpgradeCheck = 1500; TargetAttributes = {A10000000000000000000071 = {CreatedOnToolsVersion = 15.0; }; }; }; buildConfigurationList = A100000000000000000000B0 /* Build configuration list for PBXProject \"UTrello\" */; compatibilityVersion = "Xcode 14.0"; developmentRegion = en; hasScannedForEncodings = 0; knownRegions = (en, Base, ); mainGroup = A100000000000000000000A1; productRefGroup = A100000000000000000000A9 /* Products */; projectDirPath = ""; projectRoot = ""; targets = (A10000000000000000000070 /* UTrello */, A10000000000000000000071 /* UTrelloWidget */, ); };
/* End PBXProject section */
/* Begin PBXResourcesBuildPhase section */
/* End PBXResourcesBuildPhase section */
/* Begin PBXSourcesBuildPhase section */
A10000000000000000000093 /* Sources */ = {isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = (A10000000000000000000001 /* UTrelloApp.swift in Sources */, A10000000000000000000002 /* BoardView.swift in Sources */, A10000000000000000000003 /* TaskItem.swift in Sources */, A10000000000000000000004 /* TaskStore.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; };
A10000000000000000000094 /* Sources */ = {isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = (A10000000000000000000006 /* UTrelloWidget.swift in Sources */, A10000000000000000000007 /* UTrelloWidgetBundle.swift in Sources */, A10000000000000000000008 /* TaskItem.swift in Sources */, A10000000000000000000009 /* TaskStore.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; };
/* End PBXSourcesBuildPhase section */
/* Begin PBXTargetDependency section */
A100000000000000000000B2 /* PBXTargetDependency */ = {isa = PBXTargetDependency; target = A10000000000000000000071 /* UTrelloWidget */; targetProxy = A10000000000000000000051 /* PBXContainerItemProxy */; };
/* End PBXTargetDependency section */
/* Begin XCBuildConfiguration section */
A100000000000000000000C1 /* Debug */ = {isa = XCBuildConfiguration; buildSettings = {CLANG_ENABLE_MODULES = YES; SWIFT_VERSION = 5.0; }; name = Debug; };
A100000000000000000000C2 /* Release */ = {isa = XCBuildConfiguration; buildSettings = {CLANG_ENABLE_MODULES = YES; SWIFT_VERSION = 5.0; }; name = Release; };
A100000000000000000000C3 /* Debug */ = {isa = XCBuildConfiguration; buildSettings = {CODE_SIGN_ENTITLEMENTS = UTrello/UTrello.entitlements; CODE_SIGN_STYLE = Automatic; COMBINE_HIDPI_IMAGES = YES; DEVELOPMENT_TEAM = ""; GENERATE_INFOPLIST_FILE = YES; INFOPLIST_KEY_CFBundleDisplayName = UTrello; INFOPLIST_KEY_LSApplicationCategoryType = "public.app-category.productivity"; MACOSX_DEPLOYMENT_TARGET = 14.0; PRODUCT_BUNDLE_IDENTIFIER = com.example.UTrello; PRODUCT_NAME = "$(TARGET_NAME)"; SWIFT_VERSION = 5.0; }; name = Debug; };
A100000000000000000000C4 /* Release */ = {isa = XCBuildConfiguration; buildSettings = {CODE_SIGN_ENTITLEMENTS = UTrello/UTrello.entitlements; CODE_SIGN_STYLE = Automatic; COMBINE_HIDPI_IMAGES = YES; DEVELOPMENT_TEAM = ""; GENERATE_INFOPLIST_FILE = YES; INFOPLIST_KEY_CFBundleDisplayName = UTrello; INFOPLIST_KEY_LSApplicationCategoryType = "public.app-category.productivity"; MACOSX_DEPLOYMENT_TARGET = 14.0; PRODUCT_BUNDLE_IDENTIFIER = com.example.UTrello; PRODUCT_NAME = "$(TARGET_NAME)"; SWIFT_VERSION = 5.0; }; name = Release; };
A100000000000000000000C5 /* Debug */ = {isa = XCBuildConfiguration; buildSettings = {APPLICATION_EXTENSION_API_ONLY = YES; CODE_SIGN_ENTITLEMENTS = UTrelloWidget/UTrelloWidget.entitlements; CODE_SIGN_STYLE = Automatic; DEVELOPMENT_TEAM = ""; INFOPLIST_FILE = UTrelloWidget/Info.plist; MACOSX_DEPLOYMENT_TARGET = 14.0; PRODUCT_BUNDLE_IDENTIFIER = com.example.UTrello.widget; PRODUCT_NAME = "$(TARGET_NAME)"; SKIP_INSTALL = YES; SWIFT_VERSION = 5.0; }; name = Debug; };
A100000000000000000000C6 /* Release */ = {isa = XCBuildConfiguration; buildSettings = {APPLICATION_EXTENSION_API_ONLY = YES; CODE_SIGN_ENTITLEMENTS = UTrelloWidget/UTrelloWidget.entitlements; CODE_SIGN_STYLE = Automatic; DEVELOPMENT_TEAM = ""; INFOPLIST_FILE = UTrelloWidget/Info.plist; MACOSX_DEPLOYMENT_TARGET = 14.0; PRODUCT_BUNDLE_IDENTIFIER = com.example.UTrello.widget; PRODUCT_NAME = "$(TARGET_NAME)"; SKIP_INSTALL = YES; SWIFT_VERSION = 5.0; }; name = Release; };
/* End XCBuildConfiguration section */
/* Begin XCConfigurationList section */
A100000000000000000000B0 /* Build configuration list for PBXProject \"UTrello\" */ = {isa = XCConfigurationList; buildConfigurations = (A100000000000000000000C1 /* Debug */, A100000000000000000000C2 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; };
A100000000000000000000B1 /* Build configuration list for PBXNativeTarget \"UTrello\" */ = {isa = XCConfigurationList; buildConfigurations = (A100000000000000000000C3 /* Debug */, A100000000000000000000C4 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; };
A100000000000000000000B3 /* Build configuration list for PBXNativeTarget \"UTrelloWidget\" */ = {isa = XCConfigurationList; buildConfigurations = (A100000000000000000000C5 /* Debug */, A100000000000000000000C6 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; };
/* End XCConfigurationList section */
};
rootObject = A10000000000000000000061 /* Project object */;
}
@@ -0,0 +1,22 @@
<?xml version="1.0" encoding="UTF-8"?>
<Scheme LastUpgradeVersion="1500" version="1.7">
<BuildAction parallelizeBuildables="YES" buildImplicitDependencies="YES">
<BuildActionEntries>
<BuildActionEntry buildForTesting="YES" buildForRunning="YES" buildForProfiling="YES" buildForArchiving="YES" buildForAnalyzing="YES">
<BuildableReference BuildableIdentifier="primary" BlueprintIdentifier="A10000000000000000000070" BuildableName="UTrello.app" BlueprintName="UTrello" ReferencedContainer="container:UTrello.xcodeproj"/>
</BuildActionEntry>
</BuildActionEntries>
</BuildAction>
<LaunchAction buildConfiguration="Debug" selectedDebuggerIdentifier="Xcode.DebuggerFoundation.Debugger.LLDB" selectedLauncherIdentifier="Xcode.DebuggerFoundation.Launcher.LLDB" launchStyle="0" useCustomWorkingDirectory="NO" ignoresPersistentStateOnLaunch="NO" debugDocumentVersioning="YES" allowLocationSimulation="YES">
<BuildableProductRunnable runnableDebuggingMode="0">
<BuildableReference BuildableIdentifier="primary" BlueprintIdentifier="A10000000000000000000070" BuildableName="UTrello.app" BlueprintName="UTrello" ReferencedContainer="container:UTrello.xcodeproj"/>
</BuildableProductRunnable>
</LaunchAction>
<ProfileAction buildConfiguration="Release" shouldUseLaunchSchemeArgsEnv="YES" savedToolIdentifier="" useCustomWorkingDirectory="NO" debugDocumentVersioning="YES">
<BuildableProductRunnable runnableDebuggingMode="0">
<BuildableReference BuildableIdentifier="primary" BlueprintIdentifier="A10000000000000000000070" BuildableName="UTrello.app" BlueprintName="UTrello" ReferencedContainer="container:UTrello.xcodeproj"/>
</BuildableProductRunnable>
</ProfileAction>
<AnalyzeAction buildConfiguration="Debug"/>
<ArchiveAction buildConfiguration="Release" revealArchiveInOrganizer="YES"/>
</Scheme>