project rename

Signed-off-by: Matt Bruce <mbrucedogs@gmail.com>
This commit is contained in:
Matt Bruce 2026-01-14 13:07:02 -06:00
parent e88a1fca56
commit be65f4610c
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.
@ -24,7 +24,7 @@ The project also includes a watchOS companion app target for watch-specific demo
## Getting Started
1. Open `SecureStorgageSample.xcodeproj`
1. Open `SecureStorageSample.xcodeproj`
2. Select an iOS simulator or device
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.
@ -41,7 +41,7 @@ SharedPackage/
│ └── StorageServiceIdentifiers.swift
└── Models/
└── UserProfile.swift
SecureStorgageSample/
SecureStorageSample/
├── ContentView.swift # Tabbed navigation
├── Models/
│ ├── Credential.swift

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -1,13 +1,13 @@
//
// SecureStorgageSampleUITests.swift
// SecureStorgageSampleUITests
// SecureStorageSampleUITests.swift
// SecureStorageSampleUITests
//
// Created by Matt Bruce on 1/13/26.
//
import XCTest
final class SecureStorgageSampleUITests: XCTestCase {
final class SecureStorageSampleUITests: XCTestCase {
override func setUpWithError() throws {
// 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
// SecureStorgageSampleUITests
// SecureStorageSampleUITestsLaunchTests.swift
// SecureStorageSampleUITests
//
// Created by Matt Bruce on 1/13/26.
//
import XCTest
final class SecureStorgageSampleUITestsLaunchTests: XCTestCase {
final class SecureStorageSampleUITestsLaunchTests: XCTestCase {
override class var runsForEachTargetApplicationUIConfiguration: Bool {
true