Add SecureStorageSampleApp, SecureStorageSampleTests, SecureStorageSampleUITests, SecureStorageSampleUITestsLaunchTests; Remove SecureStorgageSampleApp, SecureStorgageSampleTests, SecureStorgageSampleUITests, SecureStorgageSampleUITestsLaunchTests

This commit is contained in:
Matt Bruce 2026-01-14 13:07:02 -06:00
parent 6d45015152
commit 7e3d7ba407
44 changed files with 245 additions and 51 deletions

View File

@ -1,4 +1,4 @@
# SecureStorgageSample # SecureStorageSample
A sample iOS app demonstrating the LocalData package capabilities for secure, typed storage across multiple domains. A sample iOS app demonstrating the LocalData package capabilities for secure, typed storage across multiple domains.
@ -24,7 +24,7 @@ The project also includes a watchOS companion app target for watch-specific demo
## Getting Started ## Getting Started
1. Open `SecureStorgageSample.xcodeproj` 1. Open `SecureStorageSample.xcodeproj`
2. Select an iOS simulator or device 2. Select an iOS simulator or device
3. Build and run (⌘R) 3. Build and run (⌘R)
4. To use App Group demos, enable the App Group entitlement for each target that should share data. The identifier is derived from the bundle ID via SharedKit constants. 4. To use App Group demos, enable the App Group entitlement for each target that should share data. The identifier is derived from the bundle ID via SharedKit constants.
@ -41,7 +41,7 @@ SharedPackage/
│ └── StorageServiceIdentifiers.swift │ └── StorageServiceIdentifiers.swift
└── Models/ └── Models/
└── UserProfile.swift └── UserProfile.swift
SecureStorgageSample/ SecureStorageSample/
├── ContentView.swift # Tabbed navigation ├── ContentView.swift # Tabbed navigation
├── Models/ ├── Models/
│ ├── Credential.swift │ ├── Credential.swift

View File

@ -20,14 +20,14 @@
containerPortal = EA179CF92F1722BB00B1D54A /* Project object */; containerPortal = EA179CF92F1722BB00B1D54A /* Project object */;
proxyType = 1; proxyType = 1;
remoteGlobalIDString = EA179D002F1722BB00B1D54A; remoteGlobalIDString = EA179D002F1722BB00B1D54A;
remoteInfo = SecureStorgageSample; remoteInfo = SecureStorageSample;
}; };
EA179D192F1722BC00B1D54A /* PBXContainerItemProxy */ = { EA179D192F1722BC00B1D54A /* PBXContainerItemProxy */ = {
isa = PBXContainerItemProxy; isa = PBXContainerItemProxy;
containerPortal = EA179CF92F1722BB00B1D54A /* Project object */; containerPortal = EA179CF92F1722BB00B1D54A /* Project object */;
proxyType = 1; proxyType = 1;
remoteGlobalIDString = EA179D002F1722BB00B1D54A; remoteGlobalIDString = EA179D002F1722BB00B1D54A;
remoteInfo = SecureStorgageSample; remoteInfo = SecureStorageSample;
}; };
EA65D6F22F17DD6800C48466 /* PBXContainerItemProxy */ = { EA65D6F22F17DD6800C48466 /* PBXContainerItemProxy */ = {
isa = PBXContainerItemProxy; isa = PBXContainerItemProxy;
@ -76,19 +76,19 @@
/* End PBXFileReference section */ /* End PBXFileReference section */
/* Begin PBXFileSystemSynchronizedRootGroup section */ /* Begin PBXFileSystemSynchronizedRootGroup section */
EA179D032F1722BB00B1D54A /* SecureStorgageSample */ = { EA179D032F1722BB00B1D54A /* SecureStorageSample */ = {
isa = PBXFileSystemSynchronizedRootGroup; isa = PBXFileSystemSynchronizedRootGroup;
path = SecureStorgageSample; path = SecureStorageSample;
sourceTree = "<group>"; sourceTree = "<group>";
}; };
EA179D112F1722BC00B1D54A /* SecureStorgageSampleTests */ = { EA179D112F1722BC00B1D54A /* SecureStorageSampleTests */ = {
isa = PBXFileSystemSynchronizedRootGroup; isa = PBXFileSystemSynchronizedRootGroup;
path = SecureStorgageSampleTests; path = SecureStorageSampleTests;
sourceTree = "<group>"; sourceTree = "<group>";
}; };
EA179D1B2F1722BC00B1D54A /* SecureStorgageSampleUITests */ = { EA179D1B2F1722BC00B1D54A /* SecureStorageSampleUITests */ = {
isa = PBXFileSystemSynchronizedRootGroup; isa = PBXFileSystemSynchronizedRootGroup;
path = SecureStorgageSampleUITests; path = SecureStorageSampleUITests;
sourceTree = "<group>"; sourceTree = "<group>";
}; };
EA65D6E62F17DD6700C48466 /* SecureStorageSample Watch App */ = { EA65D6E62F17DD6700C48466 /* SecureStorageSample Watch App */ = {
@ -161,9 +161,9 @@
EA179CF82F1722BB00B1D54A = { EA179CF82F1722BB00B1D54A = {
isa = PBXGroup; isa = PBXGroup;
children = ( children = (
EA179D032F1722BB00B1D54A /* SecureStorgageSample */, EA179D032F1722BB00B1D54A /* SecureStorageSample */,
EA179D112F1722BC00B1D54A /* SecureStorgageSampleTests */, EA179D112F1722BC00B1D54A /* SecureStorageSampleTests */,
EA179D1B2F1722BC00B1D54A /* SecureStorgageSampleUITests */, EA179D1B2F1722BC00B1D54A /* SecureStorageSampleUITests */,
EA65D6E62F17DD6700C48466 /* SecureStorageSample Watch App */, EA65D6E62F17DD6700C48466 /* SecureStorageSample Watch App */,
EA65D6F42F17DD6800C48466 /* SecureStorageSample Watch AppTests */, EA65D6F42F17DD6800C48466 /* SecureStorageSample Watch AppTests */,
EA65D6FE2F17DD6800C48466 /* SecureStorageSample Watch AppUITests */, EA65D6FE2F17DD6800C48466 /* SecureStorageSample Watch AppUITests */,
@ -210,14 +210,14 @@
EA65D70F2F17DDEB00C48466 /* PBXTargetDependency */, EA65D70F2F17DDEB00C48466 /* PBXTargetDependency */,
); );
fileSystemSynchronizedGroups = ( fileSystemSynchronizedGroups = (
EA179D032F1722BB00B1D54A /* SecureStorgageSample */, EA179D032F1722BB00B1D54A /* SecureStorageSample */,
); );
name = SecureStorageSample; name = SecureStorageSample;
packageProductDependencies = ( packageProductDependencies = (
EA179D552F17379800B1D54A /* LocalData */, EA179D552F17379800B1D54A /* LocalData */,
EA65D7312F17DDEB00C48466 /* SharedKit */, EA65D7312F17DDEB00C48466 /* SharedKit */,
); );
productName = SecureStorgageSample; productName = SecureStorageSample;
productReference = EA179D012F1722BB00B1D54A /* SecureStorageSample.app */; productReference = EA179D012F1722BB00B1D54A /* SecureStorageSample.app */;
productType = "com.apple.product-type.application"; productType = "com.apple.product-type.application";
}; };
@ -235,13 +235,13 @@
EA179D102F1722BC00B1D54A /* PBXTargetDependency */, EA179D102F1722BC00B1D54A /* PBXTargetDependency */,
); );
fileSystemSynchronizedGroups = ( fileSystemSynchronizedGroups = (
EA179D112F1722BC00B1D54A /* SecureStorgageSampleTests */, EA179D112F1722BC00B1D54A /* SecureStorageSampleTests */,
); );
name = SecureStorageSampleTests; name = SecureStorageSampleTests;
packageProductDependencies = ( packageProductDependencies = (
EA65D7312F17DDEB00C48466 /* SharedKit */, EA65D7312F17DDEB00C48466 /* SharedKit */,
); );
productName = SecureStorgageSampleTests; productName = SecureStorageSampleTests;
productReference = EA179D0E2F1722BC00B1D54A /* SecureStorageSampleTests.xctest */; productReference = EA179D0E2F1722BC00B1D54A /* SecureStorageSampleTests.xctest */;
productType = "com.apple.product-type.bundle.unit-test"; productType = "com.apple.product-type.bundle.unit-test";
}; };
@ -259,12 +259,12 @@
EA179D1A2F1722BC00B1D54A /* PBXTargetDependency */, EA179D1A2F1722BC00B1D54A /* PBXTargetDependency */,
); );
fileSystemSynchronizedGroups = ( fileSystemSynchronizedGroups = (
EA179D1B2F1722BC00B1D54A /* SecureStorgageSampleUITests */, EA179D1B2F1722BC00B1D54A /* SecureStorageSampleUITests */,
); );
name = SecureStorageSampleUITests; name = SecureStorageSampleUITests;
packageProductDependencies = ( packageProductDependencies = (
); );
productName = SecureStorgageSampleUITests; productName = SecureStorageSampleUITests;
productReference = EA179D182F1722BC00B1D54A /* SecureStorageSampleUITests.xctest */; productReference = EA179D182F1722BC00B1D54A /* SecureStorageSampleUITests.xctest */;
productType = "com.apple.product-type.bundle.ui-testing"; productType = "com.apple.product-type.bundle.ui-testing";
}; };
@ -642,7 +642,7 @@
buildSettings = { buildSettings = {
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor;
CODE_SIGN_ENTITLEMENTS = SecureStorgageSample/SecureStorgageSample.entitlements; CODE_SIGN_ENTITLEMENTS = SecureStorageSample/SecureStorageSample.entitlements;
CODE_SIGN_STYLE = Automatic; CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 1; CURRENT_PROJECT_VERSION = 1;
DEVELOPMENT_TEAM = 6R7KLBPBLZ; DEVELOPMENT_TEAM = 6R7KLBPBLZ;
@ -659,7 +659,7 @@
"@executable_path/Frameworks", "@executable_path/Frameworks",
); );
MARKETING_VERSION = 1.0; MARKETING_VERSION = 1.0;
PRODUCT_BUNDLE_IDENTIFIER = com.mbrucedogs.SecureStorgageSample; PRODUCT_BUNDLE_IDENTIFIER = com.mbrucedogs.SecureStorageSample;
PRODUCT_NAME = "$(TARGET_NAME)"; PRODUCT_NAME = "$(TARGET_NAME)";
STRING_CATALOG_GENERATE_SYMBOLS = YES; STRING_CATALOG_GENERATE_SYMBOLS = YES;
SWIFT_APPROACHABLE_CONCURRENCY = YES; SWIFT_APPROACHABLE_CONCURRENCY = YES;
@ -676,7 +676,7 @@
buildSettings = { buildSettings = {
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor;
CODE_SIGN_ENTITLEMENTS = SecureStorgageSample/SecureStorgageSample.entitlements; CODE_SIGN_ENTITLEMENTS = SecureStorageSample/SecureStorageSample.entitlements;
CODE_SIGN_STYLE = Automatic; CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 1; CURRENT_PROJECT_VERSION = 1;
DEVELOPMENT_TEAM = 6R7KLBPBLZ; DEVELOPMENT_TEAM = 6R7KLBPBLZ;
@ -693,7 +693,7 @@
"@executable_path/Frameworks", "@executable_path/Frameworks",
); );
MARKETING_VERSION = 1.0; MARKETING_VERSION = 1.0;
PRODUCT_BUNDLE_IDENTIFIER = com.mbrucedogs.SecureStorgageSample; PRODUCT_BUNDLE_IDENTIFIER = com.mbrucedogs.SecureStorageSample;
PRODUCT_NAME = "$(TARGET_NAME)"; PRODUCT_NAME = "$(TARGET_NAME)";
STRING_CATALOG_GENERATE_SYMBOLS = YES; STRING_CATALOG_GENERATE_SYMBOLS = YES;
SWIFT_APPROACHABLE_CONCURRENCY = YES; SWIFT_APPROACHABLE_CONCURRENCY = YES;
@ -714,7 +714,7 @@
GENERATE_INFOPLIST_FILE = YES; GENERATE_INFOPLIST_FILE = YES;
IPHONEOS_DEPLOYMENT_TARGET = 26.0; IPHONEOS_DEPLOYMENT_TARGET = 26.0;
MARKETING_VERSION = 1.0; MARKETING_VERSION = 1.0;
PRODUCT_BUNDLE_IDENTIFIER = com.mbrucedogs.SecureStorgageSampleTests; PRODUCT_BUNDLE_IDENTIFIER = com.mbrucedogs.SecureStorageSampleTests;
PRODUCT_NAME = "$(TARGET_NAME)"; PRODUCT_NAME = "$(TARGET_NAME)";
STRING_CATALOG_GENERATE_SYMBOLS = NO; STRING_CATALOG_GENERATE_SYMBOLS = NO;
SWIFT_APPROACHABLE_CONCURRENCY = YES; SWIFT_APPROACHABLE_CONCURRENCY = YES;
@ -735,7 +735,7 @@
GENERATE_INFOPLIST_FILE = YES; GENERATE_INFOPLIST_FILE = YES;
IPHONEOS_DEPLOYMENT_TARGET = 26.0; IPHONEOS_DEPLOYMENT_TARGET = 26.0;
MARKETING_VERSION = 1.0; MARKETING_VERSION = 1.0;
PRODUCT_BUNDLE_IDENTIFIER = com.mbrucedogs.SecureStorgageSampleTests; PRODUCT_BUNDLE_IDENTIFIER = com.mbrucedogs.SecureStorageSampleTests;
PRODUCT_NAME = "$(TARGET_NAME)"; PRODUCT_NAME = "$(TARGET_NAME)";
STRING_CATALOG_GENERATE_SYMBOLS = NO; STRING_CATALOG_GENERATE_SYMBOLS = NO;
SWIFT_APPROACHABLE_CONCURRENCY = YES; SWIFT_APPROACHABLE_CONCURRENCY = YES;
@ -754,7 +754,7 @@
CURRENT_PROJECT_VERSION = 1; CURRENT_PROJECT_VERSION = 1;
GENERATE_INFOPLIST_FILE = YES; GENERATE_INFOPLIST_FILE = YES;
MARKETING_VERSION = 1.0; MARKETING_VERSION = 1.0;
PRODUCT_BUNDLE_IDENTIFIER = com.mbrucedogs.SecureStorgageSampleUITests; PRODUCT_BUNDLE_IDENTIFIER = com.mbrucedogs.SecureStorageSampleUITests;
PRODUCT_NAME = "$(TARGET_NAME)"; PRODUCT_NAME = "$(TARGET_NAME)";
STRING_CATALOG_GENERATE_SYMBOLS = NO; STRING_CATALOG_GENERATE_SYMBOLS = NO;
SWIFT_APPROACHABLE_CONCURRENCY = YES; SWIFT_APPROACHABLE_CONCURRENCY = YES;
@ -762,7 +762,7 @@
SWIFT_UPCOMING_FEATURE_MEMBER_IMPORT_VISIBILITY = YES; SWIFT_UPCOMING_FEATURE_MEMBER_IMPORT_VISIBILITY = YES;
SWIFT_VERSION = 5.0; SWIFT_VERSION = 5.0;
TARGETED_DEVICE_FAMILY = "1,2"; TARGETED_DEVICE_FAMILY = "1,2";
TEST_TARGET_NAME = SecureStorgageSample; TEST_TARGET_NAME = SecureStorageSample;
}; };
name = Debug; name = Debug;
}; };
@ -773,7 +773,7 @@
CURRENT_PROJECT_VERSION = 1; CURRENT_PROJECT_VERSION = 1;
GENERATE_INFOPLIST_FILE = YES; GENERATE_INFOPLIST_FILE = YES;
MARKETING_VERSION = 1.0; MARKETING_VERSION = 1.0;
PRODUCT_BUNDLE_IDENTIFIER = com.mbrucedogs.SecureStorgageSampleUITests; PRODUCT_BUNDLE_IDENTIFIER = com.mbrucedogs.SecureStorageSampleUITests;
PRODUCT_NAME = "$(TARGET_NAME)"; PRODUCT_NAME = "$(TARGET_NAME)";
STRING_CATALOG_GENERATE_SYMBOLS = NO; STRING_CATALOG_GENERATE_SYMBOLS = NO;
SWIFT_APPROACHABLE_CONCURRENCY = YES; SWIFT_APPROACHABLE_CONCURRENCY = YES;
@ -781,7 +781,7 @@
SWIFT_UPCOMING_FEATURE_MEMBER_IMPORT_VISIBILITY = YES; SWIFT_UPCOMING_FEATURE_MEMBER_IMPORT_VISIBILITY = YES;
SWIFT_VERSION = 5.0; SWIFT_VERSION = 5.0;
TARGETED_DEVICE_FAMILY = "1,2"; TARGETED_DEVICE_FAMILY = "1,2";
TEST_TARGET_NAME = SecureStorgageSample; TEST_TARGET_NAME = SecureStorageSample;
}; };
name = Release; name = Release;
}; };
@ -803,7 +803,7 @@
"@executable_path/Frameworks", "@executable_path/Frameworks",
); );
MARKETING_VERSION = 1.0; MARKETING_VERSION = 1.0;
PRODUCT_BUNDLE_IDENTIFIER = com.mbrucedogs.SecureStorgageSample.watchkitapp; PRODUCT_BUNDLE_IDENTIFIER = com.mbrucedogs.SecureStorageSample.watchkitapp;
PRODUCT_NAME = "$(TARGET_NAME)"; PRODUCT_NAME = "$(TARGET_NAME)";
SDKROOT = watchos; SDKROOT = watchos;
SKIP_INSTALL = YES; SKIP_INSTALL = YES;
@ -836,7 +836,7 @@
"@executable_path/Frameworks", "@executable_path/Frameworks",
); );
MARKETING_VERSION = 1.0; MARKETING_VERSION = 1.0;
PRODUCT_BUNDLE_IDENTIFIER = com.mbrucedogs.SecureStorgageSample.watchkitapp; PRODUCT_BUNDLE_IDENTIFIER = com.mbrucedogs.SecureStorageSample.watchkitapp;
PRODUCT_NAME = "$(TARGET_NAME)"; PRODUCT_NAME = "$(TARGET_NAME)";
SDKROOT = watchos; SDKROOT = watchos;
SKIP_INSTALL = YES; SKIP_INSTALL = YES;

View File

@ -0,0 +1,116 @@
<?xml version="1.0" encoding="UTF-8"?>
<Scheme
LastUpgradeVersion = "2600"
version = "1.7">
<BuildAction
parallelizeBuildables = "YES"
buildImplicitDependencies = "YES"
buildArchitectures = "Automatic">
<BuildActionEntries>
<BuildActionEntry
buildForTesting = "YES"
buildForRunning = "YES"
buildForProfiling = "YES"
buildForArchiving = "YES"
buildForAnalyzing = "YES">
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "EA65D6E42F17DD6700C48466"
BuildableName = "SecureStorageSample Watch App.app"
BlueprintName = "SecureStorageSample Watch App"
ReferencedContainer = "container:SecureStorageSample.xcodeproj">
</BuildableReference>
</BuildActionEntry>
<BuildActionEntry
buildForTesting = "YES"
buildForRunning = "YES"
buildForProfiling = "YES"
buildForArchiving = "YES"
buildForAnalyzing = "YES">
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "EA179D002F1722BB00B1D54A"
BuildableName = "SecureStorageSample.app"
BlueprintName = "SecureStorageSample"
ReferencedContainer = "container:SecureStorageSample.xcodeproj">
</BuildableReference>
</BuildActionEntry>
</BuildActionEntries>
</BuildAction>
<TestAction
buildConfiguration = "Debug"
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
shouldUseLaunchSchemeArgsEnv = "YES"
shouldAutocreateTestPlan = "YES">
<Testables>
<TestableReference
skipped = "NO"
parallelizable = "YES">
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "EA65D6F02F17DD6800C48466"
BuildableName = "SecureStorageSample Watch AppTests.xctest"
BlueprintName = "SecureStorageSample Watch AppTests"
ReferencedContainer = "container:SecureStorageSample.xcodeproj">
</BuildableReference>
</TestableReference>
<TestableReference
skipped = "NO"
parallelizable = "YES">
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "EA65D6FA2F17DD6800C48466"
BuildableName = "SecureStorageSample Watch AppUITests.xctest"
BlueprintName = "SecureStorageSample Watch AppUITests"
ReferencedContainer = "container:SecureStorageSample.xcodeproj">
</BuildableReference>
</TestableReference>
</Testables>
</TestAction>
<LaunchAction
buildConfiguration = "Debug"
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
launchStyle = "0"
useCustomWorkingDirectory = "NO"
ignoresPersistentStateOnLaunch = "NO"
debugDocumentVersioning = "YES"
debugServiceExtension = "internal"
allowLocationSimulation = "YES">
<BuildableProductRunnable
runnableDebuggingMode = "0">
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "EA65D6E42F17DD6700C48466"
BuildableName = "SecureStorageSample Watch App.app"
BlueprintName = "SecureStorageSample Watch App"
ReferencedContainer = "container:SecureStorageSample.xcodeproj">
</BuildableReference>
</BuildableProductRunnable>
</LaunchAction>
<ProfileAction
buildConfiguration = "Release"
shouldUseLaunchSchemeArgsEnv = "YES"
savedToolIdentifier = ""
useCustomWorkingDirectory = "NO"
debugDocumentVersioning = "YES">
<BuildableProductRunnable
runnableDebuggingMode = "0">
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "EA65D6E42F17DD6700C48466"
BuildableName = "SecureStorageSample Watch App.app"
BlueprintName = "SecureStorageSample Watch App"
ReferencedContainer = "container:SecureStorageSample.xcodeproj">
</BuildableReference>
</BuildableProductRunnable>
</ProfileAction>
<AnalyzeAction
buildConfiguration = "Debug">
</AnalyzeAction>
<ArchiveAction
buildConfiguration = "Release"
revealArchiveInOrganizer = "YES">
</ArchiveAction>
</Scheme>

View File

@ -0,0 +1,78 @@
<?xml version="1.0" encoding="UTF-8"?>
<Scheme
LastUpgradeVersion = "2600"
version = "1.7">
<BuildAction
parallelizeBuildables = "YES"
buildImplicitDependencies = "YES"
buildArchitectures = "Automatic">
<BuildActionEntries>
<BuildActionEntry
buildForTesting = "YES"
buildForRunning = "YES"
buildForProfiling = "YES"
buildForArchiving = "YES"
buildForAnalyzing = "YES">
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "EA179D002F1722BB00B1D54A"
BuildableName = "SecureStorageSample.app"
BlueprintName = "SecureStorageSample"
ReferencedContainer = "container:SecureStorageSample.xcodeproj">
</BuildableReference>
</BuildActionEntry>
</BuildActionEntries>
</BuildAction>
<TestAction
buildConfiguration = "Debug"
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
shouldUseLaunchSchemeArgsEnv = "YES"
shouldAutocreateTestPlan = "YES">
</TestAction>
<LaunchAction
buildConfiguration = "Debug"
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
launchStyle = "0"
useCustomWorkingDirectory = "NO"
ignoresPersistentStateOnLaunch = "NO"
debugDocumentVersioning = "YES"
debugServiceExtension = "internal"
allowLocationSimulation = "YES">
<BuildableProductRunnable
runnableDebuggingMode = "0">
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "EA179D002F1722BB00B1D54A"
BuildableName = "SecureStorageSample.app"
BlueprintName = "SecureStorageSample"
ReferencedContainer = "container:SecureStorageSample.xcodeproj">
</BuildableReference>
</BuildableProductRunnable>
</LaunchAction>
<ProfileAction
buildConfiguration = "Release"
shouldUseLaunchSchemeArgsEnv = "YES"
savedToolIdentifier = ""
useCustomWorkingDirectory = "NO"
debugDocumentVersioning = "YES">
<BuildableProductRunnable
runnableDebuggingMode = "0">
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "EA179D002F1722BB00B1D54A"
BuildableName = "SecureStorageSample.app"
BlueprintName = "SecureStorageSample"
ReferencedContainer = "container:SecureStorageSample.xcodeproj">
</BuildableReference>
</BuildableProductRunnable>
</ProfileAction>
<AnalyzeAction
buildConfiguration = "Debug">
</AnalyzeAction>
<ArchiveAction
buildConfiguration = "Release"
revealArchiveInOrganizer = "YES">
</ArchiveAction>
</Scheme>

View File

@ -1,6 +1,6 @@
// //
// ContentView.swift // ContentView.swift
// SecureStorgageSample // SecureStorageSample
// //
// Main navigation view with tabbed interface for all LocalData demos. // Main navigation view with tabbed interface for all LocalData demos.
// //

View File

@ -1,6 +1,6 @@
// //
// SecureStorgageSampleApp.swift // SecureStorageSampleApp.swift
// SecureStorgageSample // SecureStorageSample
// //
// Created by Matt Bruce on 1/13/26. // Created by Matt Bruce on 1/13/26.
// //
@ -9,7 +9,7 @@ import SwiftUI
import LocalData import LocalData
@main @main
struct SecureStorgageSampleApp: App { struct SecureStorageSampleApp: App {
init() { init() {
_ = WatchConnectivityService.shared _ = WatchConnectivityService.shared
Task { Task {

View File

@ -1,6 +1,6 @@
// //
// EncryptedStorageDemo.swift // EncryptedStorageDemo.swift
// SecureStorgageSample // SecureStorageSample
// //
// Demonstrates encrypted file storage with LocalData package. // Demonstrates encrypted file storage with LocalData package.
// //

View File

@ -1,6 +1,6 @@
// //
// FileSystemDemo.swift // FileSystemDemo.swift
// SecureStorgageSample // SecureStorageSample
// //
// Demonstrates file system storage with LocalData package. // Demonstrates file system storage with LocalData package.
// //

View File

@ -1,6 +1,6 @@
// //
// KeychainDemo.swift // KeychainDemo.swift
// SecureStorgageSample // SecureStorageSample
// //
// Demonstrates Keychain storage with LocalData package. // Demonstrates Keychain storage with LocalData package.
// //

View File

@ -1,6 +1,6 @@
// //
// PlatformSyncDemo.swift // PlatformSyncDemo.swift
// SecureStorgageSample // SecureStorageSample
// //
// Demonstrates platform availability and sync policies with LocalData package. // Demonstrates platform availability and sync policies with LocalData package.
// //

View File

@ -1,6 +1,6 @@
// //
// UserDefaultsDemo.swift // UserDefaultsDemo.swift
// SecureStorgageSample // SecureStorageSample
// //
// Demonstrates UserDefaults storage with LocalData package. // Demonstrates UserDefaults storage with LocalData package.
// //

View File

@ -1,14 +1,14 @@
// //
// SecureStorgageSampleTests.swift // SecureStorageSampleTests.swift
// SecureStorgageSampleTests // SecureStorageSampleTests
// //
// Created by Matt Bruce on 1/13/26. // Created by Matt Bruce on 1/13/26.
// //
import Testing import Testing
@testable import SecureStorgageSample @testable import SecureStorageSample
struct SecureStorgageSampleTests { struct SecureStorageSampleTests {
@Test func example() async throws { @Test func example() async throws {
// Write your test here and use APIs like `#expect(...)` to check expected conditions. // Write your test here and use APIs like `#expect(...)` to check expected conditions.

View File

@ -1,13 +1,13 @@
// //
// SecureStorgageSampleUITests.swift // SecureStorageSampleUITests.swift
// SecureStorgageSampleUITests // SecureStorageSampleUITests
// //
// Created by Matt Bruce on 1/13/26. // Created by Matt Bruce on 1/13/26.
// //
import XCTest import XCTest
final class SecureStorgageSampleUITests: XCTestCase { final class SecureStorageSampleUITests: XCTestCase {
override func setUpWithError() throws { override func setUpWithError() throws {
// Put setup code here. This method is called before the invocation of each test method in the class. // Put setup code here. This method is called before the invocation of each test method in the class.

View File

@ -1,13 +1,13 @@
// //
// SecureStorgageSampleUITestsLaunchTests.swift // SecureStorageSampleUITestsLaunchTests.swift
// SecureStorgageSampleUITests // SecureStorageSampleUITests
// //
// Created by Matt Bruce on 1/13/26. // Created by Matt Bruce on 1/13/26.
// //
import XCTest import XCTest
final class SecureStorgageSampleUITestsLaunchTests: XCTestCase { final class SecureStorageSampleUITestsLaunchTests: XCTestCase {
override class var runsForEachTargetApplicationUIConfiguration: Bool { override class var runsForEachTargetApplicationUIConfiguration: Bool {
true true