macos-ai-menubar-usage/AIMenubarUsage.xcodeproj/project.pbxproj
Felipe M. 00c4e33171
Initial commit: AI Menubar Usage — macOS menu bar app for Cursor and Claude.
Includes provider integrations, settings, NSStatusItem UI, tests, Makefile, and README with screenshot.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-07-27 20:41:40 +02:00

558 lines
27 KiB
Text

// !$*UTF8*$!
{
archiveVersion = 1;
classes = {
};
objectVersion = 77;
objects = {
/* Begin PBXBuildFile section */
020588A97FA4F49E70833A88 /* CursorAuthService.swift in Sources */ = {isa = PBXBuildFile; fileRef = 952E850263D70B58A8622D84 /* CursorAuthService.swift */; };
0FDD856746B2EDD9346A380D /* ClaudeAuthTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = AA51A975D1EFCACAD5591EF2 /* ClaudeAuthTests.swift */; };
14C74ABCE2855AE766FC199F /* UsageRefreshService.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1E6D85517D87583670D54A8A /* UsageRefreshService.swift */; };
14EEEE6F7825B2B65AE18FC4 /* MenuBarController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2D5BC8D498AD23776B7EF6D7 /* MenuBarController.swift */; };
350A49467C190655A44A1B72 /* cursor-usage-summary.json in Resources */ = {isa = PBXBuildFile; fileRef = A5CAC3724673DBDC415CB9C1 /* cursor-usage-summary.json */; };
474CD6506A1028547A88F63E /* ProviderUsageSnapshot.swift in Sources */ = {isa = PBXBuildFile; fileRef = B1A929A7D2E06CA26E801EE5 /* ProviderUsageSnapshot.swift */; };
692ED3CCC92E543EEF808F06 /* PopoverView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 12BF3837FE5F27BCB9F05825 /* PopoverView.swift */; };
6AA6002791A3C8146BE308C8 /* CursorProviderTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7E90D01F19914785954D4054 /* CursorProviderTests.swift */; };
80377D42C74851D9C7CF9DDC /* ClaudeProvider.swift in Sources */ = {isa = PBXBuildFile; fileRef = 27BB9DEC72FBE9B5E3D71AE7 /* ClaudeProvider.swift */; };
84E50E6BE603EFED0E82E96A /* ClaudeAuthService.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7FCE5EFE595B010E1E54D98C /* ClaudeAuthService.swift */; };
859749885A4E61439D7E7399 /* MenuBarLabelView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2709A3685926703B69983D6E /* MenuBarLabelView.swift */; };
87D482510F45091FA971A374 /* MenuBarDisplayTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 93B331C96A907C7CB9172650 /* MenuBarDisplayTests.swift */; };
9226F7526F0F46F2265AE091 /* CursorProvider.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5AA4B4C369488D4FA6312484 /* CursorProvider.swift */; };
9ADC813DA1DC6C9F6AF03D96 /* claude-oauth-usage.json in Resources */ = {isa = PBXBuildFile; fileRef = C2DDCF0D74548E0E3EE8BBC2 /* claude-oauth-usage.json */; };
9C03E35D6CC3AE953BEB3EF7 /* ClaudeCLIParserTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = E0F49A20AA99ADBF5FA32D5A /* ClaudeCLIParserTests.swift */; };
B00F7D3788898A4FBDAA205D /* ProviderIcon.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3CA37F8450D730231198E183 /* ProviderIcon.swift */; };
B53990EEE51F907CCD4B5822 /* UsageMetric.swift in Sources */ = {isa = PBXBuildFile; fileRef = 15C24ACF2657E390A6F1EE20 /* UsageMetric.swift */; };
B9BA0C825207364FD8309DC7 /* UsageProvider.swift in Sources */ = {isa = PBXBuildFile; fileRef = 61452F7607C80021EAE24E6C /* UsageProvider.swift */; };
BDF64716296F11F448D0E604 /* UsageCache.swift in Sources */ = {isa = PBXBuildFile; fileRef = E57FF9519DD9DADBAA366503 /* UsageCache.swift */; };
C5715AEDEB19F7B36298B0FC /* ClaudeProviderTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3717BFFDC22E029B1CF81C65 /* ClaudeProviderTests.swift */; };
C940AAD549BFBF0DBCBB89C6 /* SettingsView.swift in Sources */ = {isa = PBXBuildFile; fileRef = B0F6E6ACBDD186D4701E4B63 /* SettingsView.swift */; };
C9CCA6B2E3EF24D42A7F96C2 /* ClaudeCLIUsageService.swift in Sources */ = {isa = PBXBuildFile; fileRef = B8BC68BB05A29514C7775589 /* ClaudeCLIUsageService.swift */; };
DACE19613E28C972D18338B9 /* ProviderCardView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1E8B7EBB88662A7526DC0DAC /* ProviderCardView.swift */; };
DBB881F7D74D8AF0A56987F3 /* AppSettings.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5CAAFDF70292C8F5EBF0B950 /* AppSettings.swift */; };
E4C0E55E8FE83106E2ED480B /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 62783B05EB9FEC95006D048D /* Assets.xcassets */; };
E80856A5BCA4400F795AB66F /* KeychainService.swift in Sources */ = {isa = PBXBuildFile; fileRef = F0E6E438C251CE8879D29C39 /* KeychainService.swift */; };
E86C79AD8EB57748E7383CC1 /* ProviderID.swift in Sources */ = {isa = PBXBuildFile; fileRef = 65D1EC45CD4695E90D8F58C5 /* ProviderID.swift */; };
E95AA83AAF822E74E8CD6027 /* LaunchAtLoginService.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8658C9C077212181A65D761F /* LaunchAtLoginService.swift */; };
EE77658E03D7D2B29ECEE8E2 /* AIMenubarUsageApp.swift in Sources */ = {isa = PBXBuildFile; fileRef = C7C6925E3576963CFDCD8FDB /* AIMenubarUsageApp.swift */; };
/* End PBXBuildFile section */
/* Begin PBXContainerItemProxy section */
C08A3AD24405E2B6ED28848F /* PBXContainerItemProxy */ = {
isa = PBXContainerItemProxy;
containerPortal = 4442254122661EEA6FBF630E /* Project object */;
proxyType = 1;
remoteGlobalIDString = 5B7C4FF9E298606E0E3DDE13;
remoteInfo = AIMenubarUsage;
};
/* End PBXContainerItemProxy section */
/* Begin PBXFileReference section */
12BF3837FE5F27BCB9F05825 /* PopoverView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PopoverView.swift; sourceTree = "<group>"; };
15C24ACF2657E390A6F1EE20 /* UsageMetric.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UsageMetric.swift; sourceTree = "<group>"; };
17BC6C419B57B4E3AB287296 /* AIMenubarUsage.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = AIMenubarUsage.entitlements; sourceTree = "<group>"; };
1E6D85517D87583670D54A8A /* UsageRefreshService.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UsageRefreshService.swift; sourceTree = "<group>"; };
1E8B7EBB88662A7526DC0DAC /* ProviderCardView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ProviderCardView.swift; sourceTree = "<group>"; };
2709A3685926703B69983D6E /* MenuBarLabelView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MenuBarLabelView.swift; sourceTree = "<group>"; };
27BB9DEC72FBE9B5E3D71AE7 /* ClaudeProvider.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ClaudeProvider.swift; sourceTree = "<group>"; };
2D5BC8D498AD23776B7EF6D7 /* MenuBarController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MenuBarController.swift; sourceTree = "<group>"; };
3717BFFDC22E029B1CF81C65 /* ClaudeProviderTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ClaudeProviderTests.swift; sourceTree = "<group>"; };
3B500F187AFF84E5C8BC212C /* AIMenubarUsage.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = AIMenubarUsage.app; sourceTree = BUILT_PRODUCTS_DIR; };
3CA37F8450D730231198E183 /* ProviderIcon.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ProviderIcon.swift; sourceTree = "<group>"; };
4416B8C95B50BCEDF54FA130 /* AIMenubarUsageTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = AIMenubarUsageTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; };
5AA4B4C369488D4FA6312484 /* CursorProvider.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CursorProvider.swift; sourceTree = "<group>"; };
5CAAFDF70292C8F5EBF0B950 /* AppSettings.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppSettings.swift; sourceTree = "<group>"; };
61452F7607C80021EAE24E6C /* UsageProvider.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UsageProvider.swift; sourceTree = "<group>"; };
62783B05EB9FEC95006D048D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = "<group>"; };
65D1EC45CD4695E90D8F58C5 /* ProviderID.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ProviderID.swift; sourceTree = "<group>"; };
7E90D01F19914785954D4054 /* CursorProviderTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CursorProviderTests.swift; sourceTree = "<group>"; };
7FCE5EFE595B010E1E54D98C /* ClaudeAuthService.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ClaudeAuthService.swift; sourceTree = "<group>"; };
8658C9C077212181A65D761F /* LaunchAtLoginService.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LaunchAtLoginService.swift; sourceTree = "<group>"; };
93B331C96A907C7CB9172650 /* MenuBarDisplayTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MenuBarDisplayTests.swift; sourceTree = "<group>"; };
952E850263D70B58A8622D84 /* CursorAuthService.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CursorAuthService.swift; sourceTree = "<group>"; };
A5CAC3724673DBDC415CB9C1 /* cursor-usage-summary.json */ = {isa = PBXFileReference; lastKnownFileType = text.json; path = "cursor-usage-summary.json"; sourceTree = "<group>"; };
AA51A975D1EFCACAD5591EF2 /* ClaudeAuthTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ClaudeAuthTests.swift; sourceTree = "<group>"; };
B0F6E6ACBDD186D4701E4B63 /* SettingsView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SettingsView.swift; sourceTree = "<group>"; };
B1A929A7D2E06CA26E801EE5 /* ProviderUsageSnapshot.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ProviderUsageSnapshot.swift; sourceTree = "<group>"; };
B8BC68BB05A29514C7775589 /* ClaudeCLIUsageService.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ClaudeCLIUsageService.swift; sourceTree = "<group>"; };
C2DDCF0D74548E0E3EE8BBC2 /* claude-oauth-usage.json */ = {isa = PBXFileReference; lastKnownFileType = text.json; path = "claude-oauth-usage.json"; sourceTree = "<group>"; };
C7C6925E3576963CFDCD8FDB /* AIMenubarUsageApp.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AIMenubarUsageApp.swift; sourceTree = "<group>"; };
DE93F3CBB065D23A36D4BE3D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist; path = Info.plist; sourceTree = "<group>"; };
E0F49A20AA99ADBF5FA32D5A /* ClaudeCLIParserTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ClaudeCLIParserTests.swift; sourceTree = "<group>"; };
E57FF9519DD9DADBAA366503 /* UsageCache.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UsageCache.swift; sourceTree = "<group>"; };
F0E6E438C251CE8879D29C39 /* KeychainService.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = KeychainService.swift; sourceTree = "<group>"; };
/* End PBXFileReference section */
/* Begin PBXGroup section */
78437CF65E89E1611E94DB24 /* AIMenubarUsageTests */ = {
isa = PBXGroup;
children = (
AA51A975D1EFCACAD5591EF2 /* ClaudeAuthTests.swift */,
E0F49A20AA99ADBF5FA32D5A /* ClaudeCLIParserTests.swift */,
3717BFFDC22E029B1CF81C65 /* ClaudeProviderTests.swift */,
7E90D01F19914785954D4054 /* CursorProviderTests.swift */,
93B331C96A907C7CB9172650 /* MenuBarDisplayTests.swift */,
AB234C351A82D7F8C29D59FC /* Fixtures */,
);
path = AIMenubarUsageTests;
sourceTree = "<group>";
};
91A35F24DF9917494BB27990 /* Services */ = {
isa = PBXGroup;
children = (
7FCE5EFE595B010E1E54D98C /* ClaudeAuthService.swift */,
B8BC68BB05A29514C7775589 /* ClaudeCLIUsageService.swift */,
952E850263D70B58A8622D84 /* CursorAuthService.swift */,
F0E6E438C251CE8879D29C39 /* KeychainService.swift */,
8658C9C077212181A65D761F /* LaunchAtLoginService.swift */,
2D5BC8D498AD23776B7EF6D7 /* MenuBarController.swift */,
E57FF9519DD9DADBAA366503 /* UsageCache.swift */,
1E6D85517D87583670D54A8A /* UsageRefreshService.swift */,
);
path = Services;
sourceTree = "<group>";
};
A1A0EF17AB5D144FA3159EC3 /* Models */ = {
isa = PBXGroup;
children = (
5CAAFDF70292C8F5EBF0B950 /* AppSettings.swift */,
65D1EC45CD4695E90D8F58C5 /* ProviderID.swift */,
B1A929A7D2E06CA26E801EE5 /* ProviderUsageSnapshot.swift */,
15C24ACF2657E390A6F1EE20 /* UsageMetric.swift */,
);
path = Models;
sourceTree = "<group>";
};
A91DF5929DCEC7901CF8EBAC /* AIMenubarUsage */ = {
isa = PBXGroup;
children = (
17BC6C419B57B4E3AB287296 /* AIMenubarUsage.entitlements */,
C7C6925E3576963CFDCD8FDB /* AIMenubarUsageApp.swift */,
A1A0EF17AB5D144FA3159EC3 /* Models */,
E9887E1F5E66E9471D6346EB /* Providers */,
C9F3FBB15851AB6341C6D569 /* Resources */,
91A35F24DF9917494BB27990 /* Services */,
DCB8603EF37DBBF207522891 /* Views */,
);
path = AIMenubarUsage;
sourceTree = "<group>";
};
AB234C351A82D7F8C29D59FC /* Fixtures */ = {
isa = PBXGroup;
children = (
C2DDCF0D74548E0E3EE8BBC2 /* claude-oauth-usage.json */,
A5CAC3724673DBDC415CB9C1 /* cursor-usage-summary.json */,
);
path = Fixtures;
sourceTree = "<group>";
};
C9F3FBB15851AB6341C6D569 /* Resources */ = {
isa = PBXGroup;
children = (
62783B05EB9FEC95006D048D /* Assets.xcassets */,
DE93F3CBB065D23A36D4BE3D /* Info.plist */,
);
path = Resources;
sourceTree = "<group>";
};
DCB8603EF37DBBF207522891 /* Views */ = {
isa = PBXGroup;
children = (
2709A3685926703B69983D6E /* MenuBarLabelView.swift */,
12BF3837FE5F27BCB9F05825 /* PopoverView.swift */,
1E8B7EBB88662A7526DC0DAC /* ProviderCardView.swift */,
3CA37F8450D730231198E183 /* ProviderIcon.swift */,
B0F6E6ACBDD186D4701E4B63 /* SettingsView.swift */,
);
path = Views;
sourceTree = "<group>";
};
E9887E1F5E66E9471D6346EB /* Providers */ = {
isa = PBXGroup;
children = (
27BB9DEC72FBE9B5E3D71AE7 /* ClaudeProvider.swift */,
5AA4B4C369488D4FA6312484 /* CursorProvider.swift */,
61452F7607C80021EAE24E6C /* UsageProvider.swift */,
);
path = Providers;
sourceTree = "<group>";
};
EDE93DA9D53084C3A46F175D /* Products */ = {
isa = PBXGroup;
children = (
3B500F187AFF84E5C8BC212C /* AIMenubarUsage.app */,
4416B8C95B50BCEDF54FA130 /* AIMenubarUsageTests.xctest */,
);
name = Products;
sourceTree = "<group>";
};
FC7BA8D9B6A9344B89D0E1C4 = {
isa = PBXGroup;
children = (
A91DF5929DCEC7901CF8EBAC /* AIMenubarUsage */,
78437CF65E89E1611E94DB24 /* AIMenubarUsageTests */,
EDE93DA9D53084C3A46F175D /* Products */,
);
sourceTree = "<group>";
};
/* End PBXGroup section */
/* Begin PBXNativeTarget section */
5B7C4FF9E298606E0E3DDE13 /* AIMenubarUsage */ = {
isa = PBXNativeTarget;
buildConfigurationList = 8FADCE10B5FA15613E2DCAC8 /* Build configuration list for PBXNativeTarget "AIMenubarUsage" */;
buildPhases = (
05D3CE5EB67D2234B57F94F9 /* Sources */,
6FB7A96D83E643B30F0D85B4 /* Resources */,
);
buildRules = (
);
dependencies = (
);
name = AIMenubarUsage;
packageProductDependencies = (
);
productName = AIMenubarUsage;
productReference = 3B500F187AFF84E5C8BC212C /* AIMenubarUsage.app */;
productType = "com.apple.product-type.application";
};
8BB09FB7974A6B2BC908DD8A /* AIMenubarUsageTests */ = {
isa = PBXNativeTarget;
buildConfigurationList = FEC1289ABBD1483502BB095C /* Build configuration list for PBXNativeTarget "AIMenubarUsageTests" */;
buildPhases = (
89F1A81D2DA446CD0D6F9193 /* Sources */,
3F36465C632FB1572ABA4AFD /* Resources */,
);
buildRules = (
);
dependencies = (
3D9333642E34F3C856669BA2 /* PBXTargetDependency */,
);
name = AIMenubarUsageTests;
packageProductDependencies = (
);
productName = AIMenubarUsageTests;
productReference = 4416B8C95B50BCEDF54FA130 /* AIMenubarUsageTests.xctest */;
productType = "com.apple.product-type.bundle.unit-test";
};
/* End PBXNativeTarget section */
/* Begin PBXProject section */
4442254122661EEA6FBF630E /* Project object */ = {
isa = PBXProject;
attributes = {
BuildIndependentTargetsInParallel = YES;
LastUpgradeCheck = 1430;
TargetAttributes = {
};
};
buildConfigurationList = 255E71145EEBE7C8272C980F /* Build configuration list for PBXProject "AIMenubarUsage" */;
developmentRegion = en;
hasScannedForEncodings = 0;
knownRegions = (
Base,
en,
);
mainGroup = FC7BA8D9B6A9344B89D0E1C4;
minimizedProjectReferenceProxies = 1;
preferredProjectObjectVersion = 77;
productRefGroup = EDE93DA9D53084C3A46F175D /* Products */;
projectDirPath = "";
projectRoot = "";
targets = (
5B7C4FF9E298606E0E3DDE13 /* AIMenubarUsage */,
8BB09FB7974A6B2BC908DD8A /* AIMenubarUsageTests */,
);
};
/* End PBXProject section */
/* Begin PBXResourcesBuildPhase section */
3F36465C632FB1572ABA4AFD /* Resources */ = {
isa = PBXResourcesBuildPhase;
buildActionMask = 2147483647;
files = (
9ADC813DA1DC6C9F6AF03D96 /* claude-oauth-usage.json in Resources */,
350A49467C190655A44A1B72 /* cursor-usage-summary.json in Resources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
6FB7A96D83E643B30F0D85B4 /* Resources */ = {
isa = PBXResourcesBuildPhase;
buildActionMask = 2147483647;
files = (
E4C0E55E8FE83106E2ED480B /* Assets.xcassets in Resources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXResourcesBuildPhase section */
/* Begin PBXSourcesBuildPhase section */
05D3CE5EB67D2234B57F94F9 /* Sources */ = {
isa = PBXSourcesBuildPhase;
buildActionMask = 2147483647;
files = (
EE77658E03D7D2B29ECEE8E2 /* AIMenubarUsageApp.swift in Sources */,
DBB881F7D74D8AF0A56987F3 /* AppSettings.swift in Sources */,
84E50E6BE603EFED0E82E96A /* ClaudeAuthService.swift in Sources */,
C9CCA6B2E3EF24D42A7F96C2 /* ClaudeCLIUsageService.swift in Sources */,
80377D42C74851D9C7CF9DDC /* ClaudeProvider.swift in Sources */,
020588A97FA4F49E70833A88 /* CursorAuthService.swift in Sources */,
9226F7526F0F46F2265AE091 /* CursorProvider.swift in Sources */,
E80856A5BCA4400F795AB66F /* KeychainService.swift in Sources */,
E95AA83AAF822E74E8CD6027 /* LaunchAtLoginService.swift in Sources */,
14EEEE6F7825B2B65AE18FC4 /* MenuBarController.swift in Sources */,
859749885A4E61439D7E7399 /* MenuBarLabelView.swift in Sources */,
692ED3CCC92E543EEF808F06 /* PopoverView.swift in Sources */,
DACE19613E28C972D18338B9 /* ProviderCardView.swift in Sources */,
E86C79AD8EB57748E7383CC1 /* ProviderID.swift in Sources */,
B00F7D3788898A4FBDAA205D /* ProviderIcon.swift in Sources */,
474CD6506A1028547A88F63E /* ProviderUsageSnapshot.swift in Sources */,
C940AAD549BFBF0DBCBB89C6 /* SettingsView.swift in Sources */,
BDF64716296F11F448D0E604 /* UsageCache.swift in Sources */,
B53990EEE51F907CCD4B5822 /* UsageMetric.swift in Sources */,
B9BA0C825207364FD8309DC7 /* UsageProvider.swift in Sources */,
14C74ABCE2855AE766FC199F /* UsageRefreshService.swift in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
89F1A81D2DA446CD0D6F9193 /* Sources */ = {
isa = PBXSourcesBuildPhase;
buildActionMask = 2147483647;
files = (
0FDD856746B2EDD9346A380D /* ClaudeAuthTests.swift in Sources */,
9C03E35D6CC3AE953BEB3EF7 /* ClaudeCLIParserTests.swift in Sources */,
C5715AEDEB19F7B36298B0FC /* ClaudeProviderTests.swift in Sources */,
6AA6002791A3C8146BE308C8 /* CursorProviderTests.swift in Sources */,
87D482510F45091FA971A374 /* MenuBarDisplayTests.swift in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXSourcesBuildPhase section */
/* Begin PBXTargetDependency section */
3D9333642E34F3C856669BA2 /* PBXTargetDependency */ = {
isa = PBXTargetDependency;
target = 5B7C4FF9E298606E0E3DDE13 /* AIMenubarUsage */;
targetProxy = C08A3AD24405E2B6ED28848F /* PBXContainerItemProxy */;
};
/* End PBXTargetDependency section */
/* Begin XCBuildConfiguration section */
4B02290733EF5FC0EE0E23FE /* Debug */ = {
isa = XCBuildConfiguration;
buildSettings = {
BUNDLE_LOADER = "$(TEST_HOST)";
COMBINE_HIDPI_IMAGES = YES;
GENERATE_INFOPLIST_FILE = YES;
LD_RUNPATH_SEARCH_PATHS = (
"$(inherited)",
"@executable_path/../Frameworks",
"@loader_path/../Frameworks",
);
PRODUCT_BUNDLE_IDENTIFIER = com.aiusage.app.tests;
SDKROOT = macosx;
TEST_HOST = "$(BUILT_PRODUCTS_DIR)/AIMenubarUsage.app/Contents/MacOS/AIMenubarUsage";
};
name = Debug;
};
4C4FEB1AD74921143F2BF021 /* Release */ = {
isa = XCBuildConfiguration;
buildSettings = {
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
CODE_SIGN_ENTITLEMENTS = AIMenubarUsage/AIMenubarUsage.entitlements;
COMBINE_HIDPI_IMAGES = YES;
ENABLE_HARDENED_RUNTIME = YES;
INFOPLIST_FILE = AIMenubarUsage/Resources/Info.plist;
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks";
PRODUCT_BUNDLE_IDENTIFIER = com.aiusage.app;
PRODUCT_NAME = "AI Menubar Usage";
SDKROOT = macosx;
};
name = Release;
};
9A50E3E4CDB6E10A5D3F42CB /* Release */ = {
isa = XCBuildConfiguration;
buildSettings = {
BUNDLE_LOADER = "$(TEST_HOST)";
COMBINE_HIDPI_IMAGES = YES;
GENERATE_INFOPLIST_FILE = YES;
LD_RUNPATH_SEARCH_PATHS = (
"$(inherited)",
"@executable_path/../Frameworks",
"@loader_path/../Frameworks",
);
PRODUCT_BUNDLE_IDENTIFIER = com.aiusage.app.tests;
SDKROOT = macosx;
TEST_HOST = "$(BUILT_PRODUCTS_DIR)/AIMenubarUsage.app/Contents/MacOS/AIMenubarUsage";
};
name = Release;
};
A0951BE6F1829B41173E1633 /* Release */ = {
isa = XCBuildConfiguration;
buildSettings = {
ALWAYS_SEARCH_USER_PATHS = NO;
CLANG_ANALYZER_NONNULL = YES;
CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
CLANG_CXX_LANGUAGE_STANDARD = "gnu++14";
CLANG_CXX_LIBRARY = "libc++";
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";
ENABLE_NS_ASSERTIONS = NO;
ENABLE_STRICT_OBJC_MSGSEND = YES;
GCC_C_LANGUAGE_STANDARD = gnu11;
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;
MACOSX_DEPLOYMENT_TARGET = 14.0;
MTL_ENABLE_DEBUG_INFO = NO;
MTL_FAST_MATH = YES;
PRODUCT_NAME = "$(TARGET_NAME)";
SDKROOT = macosx;
SWIFT_COMPILATION_MODE = wholemodule;
SWIFT_OPTIMIZATION_LEVEL = "-O";
SWIFT_VERSION = 5.9;
};
name = Release;
};
C4573F43EDBCE6DBB9DD5D21 /* Debug */ = {
isa = XCBuildConfiguration;
buildSettings = {
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
CODE_SIGN_ENTITLEMENTS = AIMenubarUsage/AIMenubarUsage.entitlements;
COMBINE_HIDPI_IMAGES = YES;
ENABLE_HARDENED_RUNTIME = YES;
INFOPLIST_FILE = AIMenubarUsage/Resources/Info.plist;
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks";
PRODUCT_BUNDLE_IDENTIFIER = com.aiusage.app;
PRODUCT_NAME = "AI Menubar Usage";
SDKROOT = macosx;
};
name = Debug;
};
F0F4ABE35D3D5935B964C881 /* Debug */ = {
isa = XCBuildConfiguration;
buildSettings = {
ALWAYS_SEARCH_USER_PATHS = NO;
CLANG_ANALYZER_NONNULL = YES;
CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
CLANG_CXX_LANGUAGE_STANDARD = "gnu++14";
CLANG_CXX_LIBRARY = "libc++";
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;
ENABLE_STRICT_OBJC_MSGSEND = YES;
ENABLE_TESTABILITY = YES;
GCC_C_LANGUAGE_STANDARD = gnu11;
GCC_DYNAMIC_NO_PIC = NO;
GCC_NO_COMMON_BLOCKS = YES;
GCC_OPTIMIZATION_LEVEL = 0;
GCC_PREPROCESSOR_DEFINITIONS = (
"$(inherited)",
"DEBUG=1",
);
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;
MACOSX_DEPLOYMENT_TARGET = 14.0;
MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE;
MTL_FAST_MATH = YES;
ONLY_ACTIVE_ARCH = YES;
PRODUCT_NAME = "$(TARGET_NAME)";
SDKROOT = macosx;
SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG;
SWIFT_OPTIMIZATION_LEVEL = "-Onone";
SWIFT_VERSION = 5.9;
};
name = Debug;
};
/* End XCBuildConfiguration section */
/* Begin XCConfigurationList section */
255E71145EEBE7C8272C980F /* Build configuration list for PBXProject "AIMenubarUsage" */ = {
isa = XCConfigurationList;
buildConfigurations = (
F0F4ABE35D3D5935B964C881 /* Debug */,
A0951BE6F1829B41173E1633 /* Release */,
);
defaultConfigurationIsVisible = 0;
defaultConfigurationName = Debug;
};
8FADCE10B5FA15613E2DCAC8 /* Build configuration list for PBXNativeTarget "AIMenubarUsage" */ = {
isa = XCConfigurationList;
buildConfigurations = (
C4573F43EDBCE6DBB9DD5D21 /* Debug */,
4C4FEB1AD74921143F2BF021 /* Release */,
);
defaultConfigurationIsVisible = 0;
defaultConfigurationName = Debug;
};
FEC1289ABBD1483502BB095C /* Build configuration list for PBXNativeTarget "AIMenubarUsageTests" */ = {
isa = XCConfigurationList;
buildConfigurations = (
4B02290733EF5FC0EE0E23FE /* Debug */,
9A50E3E4CDB6E10A5D3F42CB /* Release */,
);
defaultConfigurationIsVisible = 0;
defaultConfigurationName = Debug;
};
/* End XCConfigurationList section */
};
rootObject = 4442254122661EEA6FBF630E /* Project object */;
}