restructure as standalone iOS app + iMessage extension

convert container from Messages-only app to regular iOS app,
move shared code (models, api client, store) to Shared/ group,
add app group entitlements for cross-process data sharing,
rewrite StickerStore for shared UserDefaults + container,
create SwiftUI app entry point, simplify extension to read-only browser

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-03-03 15:40:52 +01:00
parent 027def42f9
commit 31040c3ca5
11 changed files with 127 additions and 93 deletions

View File

@@ -65,9 +65,21 @@
path = "StickerCloner MessagesExtension";
sourceTree = "<group>";
};
3FD2D01C2F57098E00B76B50 /* Shared */ = {
isa = PBXFileSystemSynchronizedRootGroup;
path = Shared;
sourceTree = "<group>";
};
/* End PBXFileSystemSynchronizedRootGroup section */
/* Begin PBXFrameworksBuildPhase section */
3FD2D01B2F57098E00B76B50 /* Frameworks */ = {
isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647;
files = (
);
runOnlyForDeploymentPostprocessing = 0;
};
3FD2CFFD2F57098D00B76B50 /* Frameworks */ = {
isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647;
@@ -83,6 +95,7 @@
isa = PBXGroup;
children = (
3FD2CFF92F57098B00B76B50 /* StickerCloner */,
3FD2D01C2F57098E00B76B50 /* Shared */,
3FD2D0072F57098D00B76B50 /* StickerCloner MessagesExtension */,
3FD2D0042F57098D00B76B50 /* Frameworks */,
3FD2CFF82F57098B00B76B50 /* Products */,
@@ -113,6 +126,8 @@
isa = PBXNativeTarget;
buildConfigurationList = 3FD2D0172F57098E00B76B50 /* Build configuration list for PBXNativeTarget "StickerCloner" */;
buildPhases = (
3FD2D01A2F57098E00B76B50 /* Sources */,
3FD2D01B2F57098E00B76B50 /* Frameworks */,
3FD2CFF52F57098B00B76B50 /* Resources */,
3FD2D0162F57098E00B76B50 /* Embed Foundation Extensions */,
);
@@ -123,13 +138,14 @@
);
fileSystemSynchronizedGroups = (
3FD2CFF92F57098B00B76B50 /* StickerCloner */,
3FD2D01C2F57098E00B76B50 /* Shared */,
);
name = StickerCloner;
packageProductDependencies = (
);
productName = StickerCloner;
productReference = 3FD2CFF72F57098B00B76B50 /* StickerCloner.app */;
productType = "com.apple.product-type.application.messages";
productType = "com.apple.product-type.application";
};
3FD2CFFF2F57098D00B76B50 /* StickerCloner MessagesExtension */ = {
isa = PBXNativeTarget;
@@ -145,6 +161,7 @@
);
fileSystemSynchronizedGroups = (
3FD2D0072F57098D00B76B50 /* StickerCloner MessagesExtension */,
3FD2D01C2F57098E00B76B50 /* Shared */,
);
name = "StickerCloner MessagesExtension";
packageProductDependencies = (
@@ -209,6 +226,13 @@
/* End PBXResourcesBuildPhase section */
/* Begin PBXSourcesBuildPhase section */
3FD2D01A2F57098E00B76B50 /* Sources */ = {
isa = PBXSourcesBuildPhase;
buildActionMask = 2147483647;
files = (
);
runOnlyForDeploymentPostprocessing = 0;
};
3FD2CFFC2F57098D00B76B50 /* Sources */ = {
isa = PBXSourcesBuildPhase;
buildActionMask = 2147483647;
@@ -231,6 +255,7 @@
isa = XCBuildConfiguration;
buildSettings = {
ASSETCATALOG_COMPILER_APPICON_NAME = "iMessage App Icon";
CODE_SIGN_ENTITLEMENTS = "StickerCloner MessagesExtension/StickerClonerMessagesExtension.entitlements";
CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 1;
DEVELOPMENT_TEAM = NG5W75WE8U;
@@ -260,6 +285,7 @@
isa = XCBuildConfiguration;
buildSettings = {
ASSETCATALOG_COMPILER_APPICON_NAME = "iMessage App Icon";
CODE_SIGN_ENTITLEMENTS = "StickerCloner MessagesExtension/StickerClonerMessagesExtension.entitlements";
CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 1;
DEVELOPMENT_TEAM = NG5W75WE8U;
@@ -410,6 +436,7 @@
isa = XCBuildConfiguration;
buildSettings = {
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
CODE_SIGN_ENTITLEMENTS = StickerCloner/StickerCloner.entitlements;
CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 1;
DEVELOPMENT_TEAM = NG5W75WE8U;
@@ -433,6 +460,7 @@
isa = XCBuildConfiguration;
buildSettings = {
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
CODE_SIGN_ENTITLEMENTS = StickerCloner/StickerCloner.entitlements;
CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 1;
DEVELOPMENT_TEAM = NG5W75WE8U;

View File

@@ -35,27 +35,21 @@
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
launchStyle = "0"
askForAppToLaunch = "Yes"
launchAutomaticallySubstyle = "2"
useCustomWorkingDirectory = "NO"
ignoresPersistentStateOnLaunch = "NO"
debugDocumentVersioning = "YES"
debugServiceExtension = "internal"
allowLocationSimulation = "YES">
<RemoteRunnable
runnableDebuggingMode = "2"
BundleIdentifier = "com.apple.MobileSMS"
RemotePath = "/Applications/MobileSMS.app">
</RemoteRunnable>
<MacroExpansion>
<BuildableProductRunnable
runnableDebuggingMode = "0">
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "3FD2CFFF2F57098D00B76B50"
BuildableName = "StickerCloner MessagesExtension.appex"
BlueprintName = "StickerCloner MessagesExtension"
BlueprintIdentifier = "3FD2CFF62F57098B00B76B50"
BuildableName = "StickerCloner.app"
BlueprintName = "StickerCloner"
ReferencedContainer = "container:StickerCloner.xcodeproj">
</BuildableReference>
</MacroExpansion>
</BuildableProductRunnable>
</LaunchAction>
<ProfileAction
buildConfiguration = "Release"
@@ -63,6 +57,16 @@
savedToolIdentifier = ""
useCustomWorkingDirectory = "NO"
debugDocumentVersioning = "YES">
<BuildableProductRunnable
runnableDebuggingMode = "0">
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "3FD2CFF62F57098B00B76B50"
BuildableName = "StickerCloner.app"
BlueprintName = "StickerCloner"
ReferencedContainer = "container:StickerCloner.xcodeproj">
</BuildableReference>
</BuildableProductRunnable>
</ProfileAction>
<AnalyzeAction
buildConfiguration = "Debug">