Signed-off-by: Matt Bruce <mbrucedogs@gmail.com>
This commit is contained in:
Matt Bruce 2026-01-10 15:48:53 -06:00
parent fa8ef4ca1a
commit 09e3e8abc5
6 changed files with 2942 additions and 2780 deletions

1159
AGENTS.md

File diff suppressed because it is too large Load Diff

View File

@ -34,6 +34,8 @@
EA836ABF2F0ACE8A00077F87 /* SelfieCam.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = SelfieCam.app; sourceTree = BUILT_PRODUCTS_DIR; };
EA836ACC2F0ACE8B00077F87 /* SelfieCamTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = SelfieCamTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; };
EA836AD62F0ACE8B00077F87 /* SelfieCamUITests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = SelfieCamUITests.xctest; sourceTree = BUILT_PRODUCTS_DIR; };
EACONFIG002 /* SelfieCam/Configuration/Debug.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = SelfieCam/Configuration/Debug.xcconfig; sourceTree = SOURCE_ROOT; };
EACONFIG003 /* SelfieCam/Configuration/Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = SelfieCam/Configuration/Release.xcconfig; sourceTree = SOURCE_ROOT; };
/* End PBXFileReference section */
/* Begin PBXFileSystemSynchronizedRootGroup section */
@ -90,6 +92,7 @@
EA836ACF2F0ACE8B00077F87 /* SelfieCamTests */,
EA836AD92F0ACE8B00077F87 /* SelfieCamUITests */,
EA836AC02F0ACE8A00077F87 /* Products */,
EADCDD7D2F12FFC6007991B3 /* Recovered References */,
);
sourceTree = "<group>";
};
@ -103,6 +106,15 @@
name = Products;
sourceTree = "<group>";
};
EADCDD7D2F12FFC6007991B3 /* Recovered References */ = {
isa = PBXGroup;
children = (
EACONFIG002 /* SelfieCam/Configuration/Debug.xcconfig */,
EACONFIG003 /* SelfieCam/Configuration/Release.xcconfig */,
);
name = "Recovered References";
sourceTree = "<group>";
};
/* End PBXGroup section */
/* Begin PBXNativeTarget section */
@ -292,6 +304,7 @@
/* Begin XCBuildConfiguration section */
EA836ADE2F0ACE8B00077F87 /* Debug */ = {
isa = XCBuildConfiguration;
baseConfigurationReference = EACONFIG002 /* SelfieCam/Configuration/Debug.xcconfig */;
buildSettings = {
ALWAYS_SEARCH_USER_PATHS = NO;
ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES;
@ -325,7 +338,7 @@
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
COPY_PHASE_STRIP = NO;
DEBUG_INFORMATION_FORMAT = dwarf;
DEVELOPMENT_TEAM = 6R7KLBPBLZ;
DEVELOPMENT_TEAM = "$(DEVELOPMENT_TEAM)";
ENABLE_STRICT_OBJC_MSGSEND = YES;
ENABLE_TESTABILITY = YES;
ENABLE_USER_SCRIPT_SANDBOXING = YES;
@ -356,6 +369,7 @@
};
EA836ADF2F0ACE8B00077F87 /* Release */ = {
isa = XCBuildConfiguration;
baseConfigurationReference = EACONFIG003 /* SelfieCam/Configuration/Release.xcconfig */;
buildSettings = {
ALWAYS_SEARCH_USER_PATHS = NO;
ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES;
@ -389,7 +403,7 @@
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
COPY_PHASE_STRIP = NO;
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
DEVELOPMENT_TEAM = 6R7KLBPBLZ;
DEVELOPMENT_TEAM = "$(DEVELOPMENT_TEAM)";
ENABLE_NS_ASSERTIONS = NO;
ENABLE_STRICT_OBJC_MSGSEND = YES;
ENABLE_USER_SCRIPT_SANDBOXING = YES;
@ -419,7 +433,7 @@
CODE_SIGN_ENTITLEMENTS = SelfieCam/SelfieCam.entitlements;
CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 1;
DEVELOPMENT_TEAM = 6R7KLBPBLZ;
DEVELOPMENT_TEAM = "$(DEVELOPMENT_TEAM)";
ENABLE_PREVIEWS = YES;
GENERATE_INFOPLIST_FILE = YES;
INFOPLIST_KEY_NSCameraUsageDescription = "SelfieCam needs camera access to display your live selfie preview, apply real-time filters and ring light effects, capture high-quality photos, and enable advanced features like Center Stage auto-framing.";
@ -437,7 +451,7 @@
"@executable_path/Frameworks",
);
MARKETING_VERSION = 1.0;
PRODUCT_BUNDLE_IDENTIFIER = com.mbrucedogs.SelfieCam;
PRODUCT_BUNDLE_IDENTIFIER = "$(APP_BUNDLE_IDENTIFIER)";
PRODUCT_NAME = "$(TARGET_NAME)";
STRING_CATALOG_GENERATE_SYMBOLS = YES;
SWIFT_APPROACHABLE_CONCURRENCY = YES;
@ -457,7 +471,7 @@
CODE_SIGN_ENTITLEMENTS = SelfieCam/SelfieCam.entitlements;
CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 1;
DEVELOPMENT_TEAM = 6R7KLBPBLZ;
DEVELOPMENT_TEAM = "$(DEVELOPMENT_TEAM)";
ENABLE_PREVIEWS = YES;
GENERATE_INFOPLIST_FILE = YES;
INFOPLIST_KEY_NSCameraUsageDescription = "SelfieCam needs camera access to display your live selfie preview, apply real-time filters and ring light effects, capture high-quality photos, and enable advanced features like Center Stage auto-framing.";
@ -475,7 +489,7 @@
"@executable_path/Frameworks",
);
MARKETING_VERSION = 1.0;
PRODUCT_BUNDLE_IDENTIFIER = com.mbrucedogs.SelfieCam;
PRODUCT_BUNDLE_IDENTIFIER = "$(APP_BUNDLE_IDENTIFIER)";
PRODUCT_NAME = "$(TARGET_NAME)";
STRING_CATALOG_GENERATE_SYMBOLS = YES;
SWIFT_APPROACHABLE_CONCURRENCY = YES;
@ -493,11 +507,11 @@
BUNDLE_LOADER = "$(TEST_HOST)";
CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 1;
DEVELOPMENT_TEAM = 6R7KLBPBLZ;
DEVELOPMENT_TEAM = "$(DEVELOPMENT_TEAM)";
GENERATE_INFOPLIST_FILE = YES;
IPHONEOS_DEPLOYMENT_TARGET = 26.0;
MARKETING_VERSION = 1.0;
PRODUCT_BUNDLE_IDENTIFIER = com.mbrucedogs.SelfieCamTests;
PRODUCT_BUNDLE_IDENTIFIER = "$(TESTS_BUNDLE_IDENTIFIER)";
PRODUCT_NAME = "$(TARGET_NAME)";
STRING_CATALOG_GENERATE_SYMBOLS = NO;
SWIFT_APPROACHABLE_CONCURRENCY = YES;
@ -515,11 +529,11 @@
BUNDLE_LOADER = "$(TEST_HOST)";
CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 1;
DEVELOPMENT_TEAM = 6R7KLBPBLZ;
DEVELOPMENT_TEAM = "$(DEVELOPMENT_TEAM)";
GENERATE_INFOPLIST_FILE = YES;
IPHONEOS_DEPLOYMENT_TARGET = 26.0;
MARKETING_VERSION = 1.0;
PRODUCT_BUNDLE_IDENTIFIER = com.mbrucedogs.SelfieCamTests;
PRODUCT_BUNDLE_IDENTIFIER = "$(TESTS_BUNDLE_IDENTIFIER)";
PRODUCT_NAME = "$(TARGET_NAME)";
STRING_CATALOG_GENERATE_SYMBOLS = NO;
SWIFT_APPROACHABLE_CONCURRENCY = YES;
@ -536,10 +550,10 @@
buildSettings = {
CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 1;
DEVELOPMENT_TEAM = 6R7KLBPBLZ;
DEVELOPMENT_TEAM = "$(DEVELOPMENT_TEAM)";
GENERATE_INFOPLIST_FILE = YES;
MARKETING_VERSION = 1.0;
PRODUCT_BUNDLE_IDENTIFIER = com.mbrucedogs.SelfieCamUITests;
PRODUCT_BUNDLE_IDENTIFIER = "$(UITESTS_BUNDLE_IDENTIFIER)";
PRODUCT_NAME = "$(TARGET_NAME)";
STRING_CATALOG_GENERATE_SYMBOLS = NO;
SWIFT_APPROACHABLE_CONCURRENCY = YES;
@ -556,10 +570,10 @@
buildSettings = {
CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 1;
DEVELOPMENT_TEAM = 6R7KLBPBLZ;
DEVELOPMENT_TEAM = "$(DEVELOPMENT_TEAM)";
GENERATE_INFOPLIST_FILE = YES;
MARKETING_VERSION = 1.0;
PRODUCT_BUNDLE_IDENTIFIER = com.mbrucedogs.SelfieCamUITests;
PRODUCT_BUNDLE_IDENTIFIER = "$(UITESTS_BUNDLE_IDENTIFIER)";
PRODUCT_NAME = "$(TARGET_NAME)";
STRING_CATALOG_GENERATE_SYMBOLS = NO;
SWIFT_APPROACHABLE_CONCURRENCY = YES;

View File

@ -0,0 +1,18 @@
// Base.xcconfig - Source of truth for all identifiers
// MIGRATION: Update COMPANY_IDENTIFIER and DEVELOPMENT_TEAM below
// =============================================================================
// COMPANY IDENTIFIER - CHANGE THIS FOR MIGRATION
// =============================================================================
COMPANY_IDENTIFIER = com.mbrucedogs
APP_NAME = SelfieCam
DEVELOPMENT_TEAM = 6R7KLBPBLZ
// =============================================================================
// DERIVED IDENTIFIERS - DO NOT EDIT
// =============================================================================
APP_BUNDLE_IDENTIFIER = $(COMPANY_IDENTIFIER).$(APP_NAME)
TESTS_BUNDLE_IDENTIFIER = $(COMPANY_IDENTIFIER).$(APP_NAME)Tests
UITESTS_BUNDLE_IDENTIFIER = $(COMPANY_IDENTIFIER).$(APP_NAME)UITests

View File

@ -1,6 +1,7 @@
// Debug.xcconfig
// Configuration for Debug builds
#include "Base.xcconfig"
#include? "Secrets.xcconfig"
// If Secrets.xcconfig doesn't exist (CI/CD), fall back to empty values

View File

@ -1,6 +1,7 @@
// Release.xcconfig
// Configuration for Release builds
#include "Base.xcconfig"
#include? "Secrets.xcconfig"
// If Secrets.xcconfig doesn't exist (CI/CD), fall back to empty values

View File

@ -3,6 +3,7 @@
"strings" : {
"%@" : {
"comment" : "A button with an icon and label. The argument is the text to display in the button.",
"extractionState" : "stale",
"isCommentAutoGenerated" : true,
"localizations" : {
"es-MX" : {
@ -99,6 +100,7 @@
},
"%lld%%" : {
"comment" : "A text label displaying the current brightness setting of the ring light, formatted as a percentage. The argument is the current brightness setting of the ring light, as a decimal between 0.0 and 1.",
"extractionState" : "stale",
"isCommentAutoGenerated" : true,
"localizations" : {
"es-MX" : {
@ -123,6 +125,7 @@
},
"%lldpt" : {
"comment" : "A label displaying the current ring size, formatted as a number followed by the unit \"pt\".",
"extractionState" : "stale",
"isCommentAutoGenerated" : true,
"localizations" : {
"es-MX" : {
@ -195,6 +198,7 @@
},
"10%" : {
"comment" : "A label displayed alongside the left edge of the opacity slider.",
"extractionState" : "stale",
"isCommentAutoGenerated" : true,
"localizations" : {
"es-MX" : {
@ -243,6 +247,7 @@
},
"100%" : {
"comment" : "A label displayed alongside the right edge of the opacity slider.",
"extractionState" : "stale",
"isCommentAutoGenerated" : true,
"localizations" : {
"es-MX" : {
@ -507,6 +512,7 @@
},
"Boomerang" : {
"comment" : "Display name for the \"Boomerang\" capture mode.",
"extractionState" : "stale",
"isCommentAutoGenerated" : true,
"localizations" : {
"es-MX" : {
@ -554,6 +560,7 @@
}
},
"Camera controls" : {
"extractionState" : "stale",
"localizations" : {
"es-MX" : {
"stringUnit" : {
@ -576,6 +583,7 @@
}
},
"Camera Controls" : {
"extractionState" : "stale",
"localizations" : {
"es-MX" : {
"stringUnit" : {
@ -623,6 +631,7 @@
},
"Captured photo" : {
"comment" : "A label describing a captured photo.",
"extractionState" : "stale",
"isCommentAutoGenerated" : true,
"localizations" : {
"es-MX" : {
@ -647,6 +656,7 @@
},
"Captured video" : {
"comment" : "A label describing a captured video.",
"extractionState" : "stale",
"isCommentAutoGenerated" : true,
"localizations" : {
"es-MX" : {
@ -813,6 +823,7 @@
},
"Close preview" : {
"comment" : "A button label that closes the preview screen.",
"extractionState" : "stale",
"isCommentAutoGenerated" : true,
"localizations" : {
"es-MX" : {
@ -1053,6 +1064,7 @@
},
"Enable Center Stage" : {
"comment" : "An accessibility label for the toggle that enables the \"Center Stage\" feature.",
"extractionState" : "stale",
"isCommentAutoGenerated" : true,
"localizations" : {
"es-MX" : {
@ -1293,6 +1305,7 @@
},
"Front Flash" : {
"comment" : "Title of a toggle in the Settings view that controls whether the front flash is enabled.",
"extractionState" : "stale",
"isCommentAutoGenerated" : true,
"localizations" : {
"es-MX" : {
@ -1437,6 +1450,7 @@
},
"Hide preview during capture for flash effect" : {
"comment" : "Text displayed in a toggle within the \"Camera Controls\" section, allowing the user to enable or disable the feature of hiding the camera preview during a photo capture to simulate a flash effect.",
"extractionState" : "stale",
"isCommentAutoGenerated" : true,
"localizations" : {
"es-MX" : {
@ -1556,6 +1570,7 @@
}
},
"Last synced %@" : {
"extractionState" : "stale",
"localizations" : {
"es-MX" : {
"stringUnit" : {
@ -1651,6 +1666,7 @@
},
"On" : {
"comment" : "A value that describes a control item as \"On\".",
"extractionState" : "stale",
"isCommentAutoGenerated" : true,
"localizations" : {
"es-MX" : {
@ -1722,6 +1738,7 @@
}
},
"Photo" : {
"extractionState" : "stale",
"localizations" : {
"es-MX" : {
"stringUnit" : {
@ -1961,6 +1978,7 @@
},
"Retake" : {
"comment" : "Title for a button that allows the user to retake a captured photo or video.",
"extractionState" : "stale",
"isCommentAutoGenerated" : true,
"localizations" : {
"es-MX" : {
@ -2008,6 +2026,7 @@
}
},
"Ring Light" : {
"extractionState" : "stale",
"localizations" : {
"es-MX" : {
"stringUnit" : {
@ -2079,6 +2098,7 @@
},
"Ring Light Color" : {
"comment" : "The title of the color picker overlay.",
"extractionState" : "stale",
"isCommentAutoGenerated" : true,
"localizations" : {
"es-MX" : {
@ -2103,6 +2123,7 @@
},
"Ring Light Size" : {
"comment" : "The title of the slider that allows the user to select the size of their ring light.",
"extractionState" : "stale",
"isCommentAutoGenerated" : true,
"localizations" : {
"es-MX" : {
@ -2175,6 +2196,7 @@
},
"Save" : {
"comment" : "Title for a button that saves the currently captured photo or video to the user's photo library.",
"extractionState" : "stale",
"isCommentAutoGenerated" : true,
"localizations" : {
"es-MX" : {
@ -2223,6 +2245,7 @@
},
"Saved to Photos" : {
"comment" : "Text shown as a toast message when a photo is successfully saved to Photos.",
"extractionState" : "stale",
"isCommentAutoGenerated" : true,
"localizations" : {
"es-MX" : {
@ -2463,6 +2486,7 @@
},
"Share" : {
"comment" : "Title for a button that shares the captured media.",
"extractionState" : "stale",
"isCommentAutoGenerated" : true,
"localizations" : {
"es-MX" : {
@ -2607,6 +2631,7 @@
},
"Sign in to iCloud to enable sync" : {
"comment" : "Subtitle of the iCloud sync section when the user is not signed into iCloud.",
"extractionState" : "stale",
"isCommentAutoGenerated" : true,
"localizations" : {
"es-MX" : {
@ -2733,6 +2758,7 @@
},
"Sync Now" : {
"comment" : "A button label that triggers a sync action.",
"extractionState" : "stale",
"isCommentAutoGenerated" : true,
"localizations" : {
"es-MX" : {
@ -2757,6 +2783,7 @@
},
"Sync Settings" : {
"comment" : "Title of a toggle that allows the user to enable or disable iCloud sync settings.",
"extractionState" : "stale",
"isCommentAutoGenerated" : true,
"localizations" : {
"es-MX" : {
@ -2781,6 +2808,7 @@
},
"Sync settings across all your devices" : {
"comment" : "Subtitle of the \"Sync Settings\" toggle in the Settings view, describing the functionality when sync is enabled.",
"extractionState" : "stale",
"isCommentAutoGenerated" : true,
"localizations" : {
"es-MX" : {
@ -2805,6 +2833,7 @@
},
"Synced" : {
"comment" : "Text displayed in the iCloud sync section when the user's settings have been successfully synced.",
"extractionState" : "stale",
"isCommentAutoGenerated" : true,
"localizations" : {
"es-MX" : {
@ -2828,6 +2857,7 @@
}
},
"Syncing..." : {
"extractionState" : "stale",
"localizations" : {
"es-MX" : {
"stringUnit" : {
@ -2875,6 +2905,7 @@
},
"Syncs settings across all your devices via iCloud" : {
"comment" : "An accessibility hint describing the functionality of the sync toggle in the settings view.",
"extractionState" : "stale",
"isCommentAutoGenerated" : true,
"localizations" : {
"es-MX" : {
@ -2922,6 +2953,7 @@
}
},
"Tap to collapse settings" : {
"extractionState" : "stale",
"localizations" : {
"es-MX" : {
"stringUnit" : {
@ -2944,6 +2976,7 @@
}
},
"Tap to expand camera settings" : {
"extractionState" : "stale",
"localizations" : {
"es-MX" : {
"stringUnit" : {
@ -3135,6 +3168,7 @@
},
"Use the buttons at the bottom to save or share your photo" : {
"comment" : "An accessibility hint for the photo review view, instructing the user on how to interact with the view.",
"extractionState" : "stale",
"isCommentAutoGenerated" : true,
"localizations" : {
"es-MX" : {
@ -3159,6 +3193,7 @@
},
"Uses screen flash when taking front camera photos" : {
"comment" : "A toggle that enables or disables the use of the front camera's flash during photo captures.",
"extractionState" : "stale",
"isCommentAutoGenerated" : true,
"localizations" : {
"es-MX" : {
@ -3183,6 +3218,7 @@
},
"Video" : {
"comment" : "Display name for the \"Video\" capture mode.",
"extractionState" : "stale",
"isCommentAutoGenerated" : true,
"localizations" : {
"es-MX" : {
@ -3207,6 +3243,7 @@
},
"View on GitHub" : {
"comment" : "A button label that says \"View on GitHub\".",
"extractionState" : "stale",
"isCommentAutoGenerated" : true,
"localizations" : {
"es-MX" : {