From 3edf64f5bad597b4886bf86f9baa786b4ce786a1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Felix=20F=C3=B6rtsch?= Date: Tue, 3 Mar 2026 13:20:39 +0100 Subject: [PATCH] add root .gitignore, stop tracking .DS_Store Co-Authored-By: Claude Opus 4.6 --- .DS_Store | Bin 6148 -> 6148 bytes .claude/settings.local.json | 8 + .gitignore | 1 + .../Assets.xcassets/Contents.json | 6 + .../Contents.json | 78 +++ .../Base.lproj/MainInterface.storyboard | 37 ++ .../Info.plist | 13 + .../MessagesViewController.swift | 66 +++ .../StickerCloner.xcodeproj/project.pbxproj | 488 ++++++++++++++++++ .../contents.xcworkspacedata | 7 + .../UserInterfaceState.xcuserstate | Bin 0 -> 6760 bytes .../xcschemes/xcschememanagement.plist | 14 + .../AppIcon.appiconset/Contents.json | 35 ++ .../Assets.xcassets/Contents.json | 6 + 14 files changed, 759 insertions(+) create mode 100644 .claude/settings.local.json create mode 100644 .gitignore create mode 100644 StickerCloner/StickerCloner MessagesExtension/Assets.xcassets/Contents.json create mode 100644 StickerCloner/StickerCloner MessagesExtension/Assets.xcassets/iMessage App Icon.stickersiconset/Contents.json create mode 100644 StickerCloner/StickerCloner MessagesExtension/Base.lproj/MainInterface.storyboard create mode 100644 StickerCloner/StickerCloner MessagesExtension/Info.plist create mode 100644 StickerCloner/StickerCloner MessagesExtension/MessagesViewController.swift create mode 100644 StickerCloner/StickerCloner.xcodeproj/project.pbxproj create mode 100644 StickerCloner/StickerCloner.xcodeproj/project.xcworkspace/contents.xcworkspacedata create mode 100644 StickerCloner/StickerCloner.xcodeproj/project.xcworkspace/xcuserdata/felixfoertsch.xcuserdatad/UserInterfaceState.xcuserstate create mode 100644 StickerCloner/StickerCloner.xcodeproj/xcuserdata/felixfoertsch.xcuserdatad/xcschemes/xcschememanagement.plist create mode 100644 StickerCloner/StickerCloner/Assets.xcassets/AppIcon.appiconset/Contents.json create mode 100644 StickerCloner/StickerCloner/Assets.xcassets/Contents.json diff --git a/.DS_Store b/.DS_Store index cbfb2bc660784c1ae799f67c3d6fda7f95f94324..4af525dde997c9f95eed305d869d3ba7fe395ae5 100644 GIT binary patch literal 6148 zcmeHK!AiqG5S?uUt%%U0$KavIN(C?CA(r?BJ$Mpql2XOg6twrCet-u*pk7t*AM_yp zhyUQkgKu`XY0|`#AR;p``!=&PJF_oKHcLdRH;uYPEh1_{8EY$ODul;bOH#9zHK5XS zOevyaJnHttq~tAzzsLZ;y9RYAq?iVjdw=7JEq74%7$?3T#7TgWX6NPe;OgOZugWXR zymn@{yO)(-lVjd3^K85i$w56MI-v`*ljdX3o%~q7hQs#V{a81ypCRM zg9306(kTt;jH2i~jDsYJxum6`d|~ys4?|)hIA7k)##WS3wB)rY@_oDY)V{Yw7QFJM zI-4`DM?@G9284khF@Q6hrMYTQT46vK5C$>^`1{~O89j@sLH+4Kqptu!2WBnk>wh?) z%LbrlF*OJaM43>a303xrp-edJuJ!XQrUp$oDV-Vf*v!h_P?XLNyQ|$vc?P8w284kk z19kJ*;`4w1`}=<}NS=fNVc=gepd7#N_pl^;ww4yhXRQl8g0iq*YA_2yM<2!T<)e5V ass(nJJ3!B3Y7iEP{0L|oq!9*wm4Pn|4RCh= delta 365 zcmZoMXfc@JFUZNjz`)4BAi$85ZWx@LpIfl`AoFTQM$XA|n563Gw*zHa81xv@88R74 za`RnWl5+BsfMOh<7UyVfUVhvWRXzo;d_e}p2B01W24)8k$-@xLPy#eN9SBnyiWpoN zd>EV<@)=4}ij#Aa>htq+@T!8j8Kj8$ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/StickerCloner/StickerCloner MessagesExtension/Info.plist b/StickerCloner/StickerCloner MessagesExtension/Info.plist new file mode 100644 index 0000000..52e0429 --- /dev/null +++ b/StickerCloner/StickerCloner MessagesExtension/Info.plist @@ -0,0 +1,13 @@ + + + + + NSExtension + + NSExtensionMainStoryboard + MainInterface + NSExtensionPointIdentifier + com.apple.message-payload-provider + + + diff --git a/StickerCloner/StickerCloner MessagesExtension/MessagesViewController.swift b/StickerCloner/StickerCloner MessagesExtension/MessagesViewController.swift new file mode 100644 index 0000000..4d184f8 --- /dev/null +++ b/StickerCloner/StickerCloner MessagesExtension/MessagesViewController.swift @@ -0,0 +1,66 @@ +// +// MessagesViewController.swift +// StickerCloner MessagesExtension +// +// Created by Felix Förtsch on 03.03.26. +// + +import UIKit +import Messages + +class MessagesViewController: MSMessagesAppViewController { + + override func viewDidLoad() { + super.viewDidLoad() + // Do any additional setup after loading the view. + } + + // MARK: - Conversation Handling + + override func willBecomeActive(with conversation: MSConversation) { + // Called when the extension is about to move from the inactive to active state. + // This will happen when the extension is about to present UI. + + // Use this method to configure the extension and restore previously stored state. + } + + override func didResignActive(with conversation: MSConversation) { + // Called when the extension is about to move from the active to inactive state. + // This will happen when the user dismisses the extension, changes to a different + // conversation or quits Messages. + + // Use this method to release shared resources, save user data, invalidate timers, + // and store enough state information to restore your extension to its current state + // in case it is terminated later. + } + + override func didReceive(_ message: MSMessage, conversation: MSConversation) { + // Called when a message arrives that was generated by another instance of this + // extension on a remote device. + + // Use this method to trigger UI updates in response to the message. + } + + override func didStartSending(_ message: MSMessage, conversation: MSConversation) { + // Called when the user taps the send button. + } + + override func didCancelSending(_ message: MSMessage, conversation: MSConversation) { + // Called when the user deletes the message without sending it. + + // Use this to clean up state related to the deleted message. + } + + override func willTransition(to presentationStyle: MSMessagesAppPresentationStyle) { + // Called before the extension transitions to a new presentation style. + + // Use this method to prepare for the change in presentation style. + } + + override func didTransition(to presentationStyle: MSMessagesAppPresentationStyle) { + // Called after the extension transitions to a new presentation style. + + // Use this method to finalize any behaviors associated with the change in presentation style. + } + +} diff --git a/StickerCloner/StickerCloner.xcodeproj/project.pbxproj b/StickerCloner/StickerCloner.xcodeproj/project.pbxproj new file mode 100644 index 0000000..bc321dd --- /dev/null +++ b/StickerCloner/StickerCloner.xcodeproj/project.pbxproj @@ -0,0 +1,488 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 77; + objects = { + +/* Begin PBXBuildFile section */ + 3FD2D0012F57098D00B76B50 /* StickerCloner MessagesExtension.appex in Embed Foundation Extensions */ = {isa = PBXBuildFile; fileRef = 3FD2D0002F57098D00B76B50 /* StickerCloner MessagesExtension.appex */; settings = {ATTRIBUTES = (RemoveHeadersOnCopy, ); }; }; + 3FD2D0062F57098D00B76B50 /* Messages.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 3FD2D0052F57098D00B76B50 /* Messages.framework */; }; +/* End PBXBuildFile section */ + +/* Begin PBXContainerItemProxy section */ + 3FD2D0022F57098D00B76B50 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 3FD2CFF12F57098B00B76B50 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 3FD2CFFF2F57098D00B76B50; + remoteInfo = "StickerCloner MessagesExtension"; + }; +/* End PBXContainerItemProxy section */ + +/* Begin PBXCopyFilesBuildPhase section */ + 3FD2D0162F57098E00B76B50 /* Embed Foundation Extensions */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 2147483647; + dstPath = ""; + dstSubfolderSpec = 13; + files = ( + 3FD2D0012F57098D00B76B50 /* StickerCloner MessagesExtension.appex in Embed Foundation Extensions */, + ); + name = "Embed Foundation Extensions"; + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXCopyFilesBuildPhase section */ + +/* Begin PBXFileReference section */ + 3FD2CFF72F57098B00B76B50 /* StickerCloner.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = StickerCloner.app; sourceTree = BUILT_PRODUCTS_DIR; }; + 3FD2D0002F57098D00B76B50 /* StickerCloner MessagesExtension.appex */ = {isa = PBXFileReference; explicitFileType = "wrapper.app-extension"; includeInIndex = 0; path = "StickerCloner MessagesExtension.appex"; sourceTree = BUILT_PRODUCTS_DIR; }; + 3FD2D0052F57098D00B76B50 /* Messages.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Messages.framework; path = System/Library/Frameworks/Messages.framework; sourceTree = SDKROOT; }; +/* End PBXFileReference section */ + +/* Begin PBXFileSystemSynchronizedBuildFileExceptionSet section */ + 3FD2D0102F57098E00B76B50 /* Exceptions for "StickerCloner MessagesExtension" folder in "StickerCloner MessagesExtension" target */ = { + isa = PBXFileSystemSynchronizedBuildFileExceptionSet; + membershipExceptions = ( + Info.plist, + ); + target = 3FD2CFFF2F57098D00B76B50 /* StickerCloner MessagesExtension */; + }; +/* End PBXFileSystemSynchronizedBuildFileExceptionSet section */ + +/* Begin PBXFileSystemSynchronizedRootGroup section */ + 3FD2CFF92F57098B00B76B50 /* StickerCloner */ = { + isa = PBXFileSystemSynchronizedRootGroup; + path = StickerCloner; + sourceTree = ""; + }; + 3FD2D0072F57098D00B76B50 /* StickerCloner MessagesExtension */ = { + isa = PBXFileSystemSynchronizedRootGroup; + exceptions = ( + 3FD2D0102F57098E00B76B50 /* Exceptions for "StickerCloner MessagesExtension" folder in "StickerCloner MessagesExtension" target */, + ); + path = "StickerCloner MessagesExtension"; + sourceTree = ""; + }; +/* End PBXFileSystemSynchronizedRootGroup section */ + +/* Begin PBXFrameworksBuildPhase section */ + 3FD2CFFD2F57098D00B76B50 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 3FD2D0062F57098D00B76B50 /* Messages.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + 3FD2CFF02F57098B00B76B50 = { + isa = PBXGroup; + children = ( + 3FD2CFF92F57098B00B76B50 /* StickerCloner */, + 3FD2D0072F57098D00B76B50 /* StickerCloner MessagesExtension */, + 3FD2D0042F57098D00B76B50 /* Frameworks */, + 3FD2CFF82F57098B00B76B50 /* Products */, + ); + sourceTree = ""; + }; + 3FD2CFF82F57098B00B76B50 /* Products */ = { + isa = PBXGroup; + children = ( + 3FD2CFF72F57098B00B76B50 /* StickerCloner.app */, + 3FD2D0002F57098D00B76B50 /* StickerCloner MessagesExtension.appex */, + ); + name = Products; + sourceTree = ""; + }; + 3FD2D0042F57098D00B76B50 /* Frameworks */ = { + isa = PBXGroup; + children = ( + 3FD2D0052F57098D00B76B50 /* Messages.framework */, + ); + name = Frameworks; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXNativeTarget section */ + 3FD2CFF62F57098B00B76B50 /* StickerCloner */ = { + isa = PBXNativeTarget; + buildConfigurationList = 3FD2D0172F57098E00B76B50 /* Build configuration list for PBXNativeTarget "StickerCloner" */; + buildPhases = ( + 3FD2CFF52F57098B00B76B50 /* Resources */, + 3FD2D0162F57098E00B76B50 /* Embed Foundation Extensions */, + ); + buildRules = ( + ); + dependencies = ( + 3FD2D0032F57098D00B76B50 /* PBXTargetDependency */, + ); + fileSystemSynchronizedGroups = ( + 3FD2CFF92F57098B00B76B50 /* StickerCloner */, + ); + name = StickerCloner; + packageProductDependencies = ( + ); + productName = StickerCloner; + productReference = 3FD2CFF72F57098B00B76B50 /* StickerCloner.app */; + productType = "com.apple.product-type.application.messages"; + }; + 3FD2CFFF2F57098D00B76B50 /* StickerCloner MessagesExtension */ = { + isa = PBXNativeTarget; + buildConfigurationList = 3FD2D0112F57098E00B76B50 /* Build configuration list for PBXNativeTarget "StickerCloner MessagesExtension" */; + buildPhases = ( + 3FD2CFFC2F57098D00B76B50 /* Sources */, + 3FD2CFFD2F57098D00B76B50 /* Frameworks */, + 3FD2CFFE2F57098D00B76B50 /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + ); + fileSystemSynchronizedGroups = ( + 3FD2D0072F57098D00B76B50 /* StickerCloner MessagesExtension */, + ); + name = "StickerCloner MessagesExtension"; + packageProductDependencies = ( + ); + productName = "StickerCloner MessagesExtension"; + productReference = 3FD2D0002F57098D00B76B50 /* StickerCloner MessagesExtension.appex */; + productType = "com.apple.product-type.app-extension.messages"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + 3FD2CFF12F57098B00B76B50 /* Project object */ = { + isa = PBXProject; + attributes = { + BuildIndependentTargetsInParallel = 1; + LastSwiftUpdateCheck = 2630; + LastUpgradeCheck = 2630; + TargetAttributes = { + 3FD2CFF62F57098B00B76B50 = { + CreatedOnToolsVersion = 26.3; + }; + 3FD2CFFF2F57098D00B76B50 = { + CreatedOnToolsVersion = 26.3; + }; + }; + }; + buildConfigurationList = 3FD2CFF42F57098B00B76B50 /* Build configuration list for PBXProject "StickerCloner" */; + developmentRegion = en; + hasScannedForEncodings = 0; + knownRegions = ( + en, + Base, + ); + mainGroup = 3FD2CFF02F57098B00B76B50; + minimizedProjectReferenceProxies = 1; + preferredProjectObjectVersion = 77; + productRefGroup = 3FD2CFF82F57098B00B76B50 /* Products */; + projectDirPath = ""; + projectRoot = ""; + targets = ( + 3FD2CFF62F57098B00B76B50 /* StickerCloner */, + 3FD2CFFF2F57098D00B76B50 /* StickerCloner MessagesExtension */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXResourcesBuildPhase section */ + 3FD2CFF52F57098B00B76B50 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 3FD2CFFE2F57098D00B76B50 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXResourcesBuildPhase section */ + +/* Begin PBXSourcesBuildPhase section */ + 3FD2CFFC2F57098D00B76B50 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin PBXTargetDependency section */ + 3FD2D0032F57098D00B76B50 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = 3FD2CFFF2F57098D00B76B50 /* StickerCloner MessagesExtension */; + targetProxy = 3FD2D0022F57098D00B76B50 /* PBXContainerItemProxy */; + }; +/* End PBXTargetDependency section */ + +/* Begin XCBuildConfiguration section */ + 3FD2D0122F57098E00B76B50 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = "iMessage App Icon"; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 1; + DEVELOPMENT_TEAM = NG5W75WE8U; + GENERATE_INFOPLIST_FILE = YES; + INFOPLIST_FILE = "StickerCloner MessagesExtension/Info.plist"; + INFOPLIST_KEY_CFBundleDisplayName = StickerCloner; + INFOPLIST_KEY_NSHumanReadableCopyright = ""; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + "@executable_path/../../Frameworks", + ); + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = de.felixfoertsch.StickerCloner.MessagesExtension; + PRODUCT_NAME = "$(TARGET_NAME)"; + SKIP_INSTALL = YES; + STRING_CATALOG_GENERATE_SYMBOLS = YES; + SWIFT_APPROACHABLE_CONCURRENCY = YES; + SWIFT_EMIT_LOC_STRINGS = YES; + SWIFT_UPCOMING_FEATURE_MEMBER_IMPORT_VISIBILITY = YES; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = Debug; + }; + 3FD2D0132F57098E00B76B50 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = "iMessage App Icon"; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 1; + DEVELOPMENT_TEAM = NG5W75WE8U; + GENERATE_INFOPLIST_FILE = YES; + INFOPLIST_FILE = "StickerCloner MessagesExtension/Info.plist"; + INFOPLIST_KEY_CFBundleDisplayName = StickerCloner; + INFOPLIST_KEY_NSHumanReadableCopyright = ""; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + "@executable_path/../../Frameworks", + ); + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = de.felixfoertsch.StickerCloner.MessagesExtension; + PRODUCT_NAME = "$(TARGET_NAME)"; + SKIP_INSTALL = YES; + STRING_CATALOG_GENERATE_SYMBOLS = YES; + SWIFT_APPROACHABLE_CONCURRENCY = YES; + SWIFT_EMIT_LOC_STRINGS = YES; + SWIFT_UPCOMING_FEATURE_MEMBER_IMPORT_VISIBILITY = YES; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = Release; + }; + 3FD2D0142F57098E00B76B50 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++20"; + 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; + DEVELOPMENT_TEAM = NG5W75WE8U; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_TESTABILITY = YES; + ENABLE_USER_SCRIPT_SANDBOXING = YES; + GCC_C_LANGUAGE_STANDARD = gnu17; + GCC_DYNAMIC_NO_PIC = NO; + GCC_NO_COMMON_BLOCKS = YES; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PREPROCESSOR_DEFINITIONS = ( + "DEBUG=1", + "$(inherited)", + ); + 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; + IPHONEOS_DEPLOYMENT_TARGET = 26.2; + LOCALIZATION_PREFERS_STRING_CATALOGS = YES; + MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; + MTL_FAST_MATH = YES; + ONLY_ACTIVE_ARCH = YES; + SDKROOT = iphoneos; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = "DEBUG $(inherited)"; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + }; + name = Debug; + }; + 3FD2D0152F57098E00B76B50 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++20"; + 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"; + DEVELOPMENT_TEAM = NG5W75WE8U; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_USER_SCRIPT_SANDBOXING = YES; + GCC_C_LANGUAGE_STANDARD = gnu17; + 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; + IPHONEOS_DEPLOYMENT_TARGET = 26.2; + LOCALIZATION_PREFERS_STRING_CATALOGS = YES; + MTL_ENABLE_DEBUG_INFO = NO; + MTL_FAST_MATH = YES; + SDKROOT = iphoneos; + SWIFT_COMPILATION_MODE = wholemodule; + VALIDATE_PRODUCT = YES; + }; + name = Release; + }; + 3FD2D0182F57098E00B76B50 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 1; + DEVELOPMENT_TEAM = NG5W75WE8U; + GENERATE_INFOPLIST_FILE = YES; + INFOPLIST_KEY_UILaunchStoryboardName = LaunchScreen; + INFOPLIST_KEY_UISupportedInterfaceOrientations_iPad = "UIInterfaceOrientationPortrait UIInterfaceOrientationPortraitUpsideDown UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight"; + INFOPLIST_KEY_UISupportedInterfaceOrientations_iPhone = "UIInterfaceOrientationPortrait UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight"; + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = de.felixfoertsch.StickerCloner; + PRODUCT_NAME = "$(TARGET_NAME)"; + STRING_CATALOG_GENERATE_SYMBOLS = YES; + SWIFT_APPROACHABLE_CONCURRENCY = YES; + SWIFT_EMIT_LOC_STRINGS = YES; + SWIFT_UPCOMING_FEATURE_MEMBER_IMPORT_VISIBILITY = YES; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = Debug; + }; + 3FD2D0192F57098E00B76B50 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 1; + DEVELOPMENT_TEAM = NG5W75WE8U; + GENERATE_INFOPLIST_FILE = YES; + INFOPLIST_KEY_UILaunchStoryboardName = LaunchScreen; + INFOPLIST_KEY_UISupportedInterfaceOrientations_iPad = "UIInterfaceOrientationPortrait UIInterfaceOrientationPortraitUpsideDown UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight"; + INFOPLIST_KEY_UISupportedInterfaceOrientations_iPhone = "UIInterfaceOrientationPortrait UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight"; + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = de.felixfoertsch.StickerCloner; + PRODUCT_NAME = "$(TARGET_NAME)"; + STRING_CATALOG_GENERATE_SYMBOLS = YES; + SWIFT_APPROACHABLE_CONCURRENCY = YES; + SWIFT_EMIT_LOC_STRINGS = YES; + SWIFT_UPCOMING_FEATURE_MEMBER_IMPORT_VISIBILITY = YES; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = Release; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + 3FD2CFF42F57098B00B76B50 /* Build configuration list for PBXProject "StickerCloner" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 3FD2D0142F57098E00B76B50 /* Debug */, + 3FD2D0152F57098E00B76B50 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 3FD2D0112F57098E00B76B50 /* Build configuration list for PBXNativeTarget "StickerCloner MessagesExtension" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 3FD2D0122F57098E00B76B50 /* Debug */, + 3FD2D0132F57098E00B76B50 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 3FD2D0172F57098E00B76B50 /* Build configuration list for PBXNativeTarget "StickerCloner" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 3FD2D0182F57098E00B76B50 /* Debug */, + 3FD2D0192F57098E00B76B50 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; +/* End XCConfigurationList section */ + }; + rootObject = 3FD2CFF12F57098B00B76B50 /* Project object */; +} diff --git a/StickerCloner/StickerCloner.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/StickerCloner/StickerCloner.xcodeproj/project.xcworkspace/contents.xcworkspacedata new file mode 100644 index 0000000..919434a --- /dev/null +++ b/StickerCloner/StickerCloner.xcodeproj/project.xcworkspace/contents.xcworkspacedata @@ -0,0 +1,7 @@ + + + + + diff --git a/StickerCloner/StickerCloner.xcodeproj/project.xcworkspace/xcuserdata/felixfoertsch.xcuserdatad/UserInterfaceState.xcuserstate b/StickerCloner/StickerCloner.xcodeproj/project.xcworkspace/xcuserdata/felixfoertsch.xcuserdatad/UserInterfaceState.xcuserstate new file mode 100644 index 0000000000000000000000000000000000000000..dacdb267b5e8ca020aa23e9699f623a50cde8c1e GIT binary patch literal 6760 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 literal 0 HcmV?d00001 diff --git a/StickerCloner/StickerCloner.xcodeproj/xcuserdata/felixfoertsch.xcuserdatad/xcschemes/xcschememanagement.plist b/StickerCloner/StickerCloner.xcodeproj/xcuserdata/felixfoertsch.xcuserdatad/xcschemes/xcschememanagement.plist new file mode 100644 index 0000000..aa33cc2 --- /dev/null +++ b/StickerCloner/StickerCloner.xcodeproj/xcuserdata/felixfoertsch.xcuserdatad/xcschemes/xcschememanagement.plist @@ -0,0 +1,14 @@ + + + + + SchemeUserState + + StickerCloner MessagesExtension.xcscheme_^#shared#^_ + + orderHint + 0 + + + + diff --git a/StickerCloner/StickerCloner/Assets.xcassets/AppIcon.appiconset/Contents.json b/StickerCloner/StickerCloner/Assets.xcassets/AppIcon.appiconset/Contents.json new file mode 100644 index 0000000..2305880 --- /dev/null +++ b/StickerCloner/StickerCloner/Assets.xcassets/AppIcon.appiconset/Contents.json @@ -0,0 +1,35 @@ +{ + "images" : [ + { + "idiom" : "universal", + "platform" : "ios", + "size" : "1024x1024" + }, + { + "appearances" : [ + { + "appearance" : "luminosity", + "value" : "dark" + } + ], + "idiom" : "universal", + "platform" : "ios", + "size" : "1024x1024" + }, + { + "appearances" : [ + { + "appearance" : "luminosity", + "value" : "tinted" + } + ], + "idiom" : "universal", + "platform" : "ios", + "size" : "1024x1024" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/StickerCloner/StickerCloner/Assets.xcassets/Contents.json b/StickerCloner/StickerCloner/Assets.xcassets/Contents.json new file mode 100644 index 0000000..73c0059 --- /dev/null +++ b/StickerCloner/StickerCloner/Assets.xcassets/Contents.json @@ -0,0 +1,6 @@ +{ + "info" : { + "author" : "xcode", + "version" : 1 + } +}