From b5bab1069459d368220528c822b03e7f0f86cb84 Mon Sep 17 00:00:00 2001 From: Arkadiusz Fal Date: Thu, 23 Apr 2026 05:32:42 +0200 Subject: [PATCH] Strip Sparkle from App Store (Release) macOS build Add -Wl,-dead_strip_dylibs to the Release config so the linker drops the unused Sparkle LC_LOAD_DYLIB, and a Run Script phase that removes the auto-embedded Sparkle.framework from the app bundle for every config except Release-DeveloperID. Disable user script sandboxing on the Yattee target so the rm is permitted. Release-DeveloperID keeps Sparkle linked and embedded for the notarized Developer ID channel. --- Yattee.xcodeproj/project.pbxproj | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) diff --git a/Yattee.xcodeproj/project.pbxproj b/Yattee.xcodeproj/project.pbxproj index 2f7e297c..06013408 100644 --- a/Yattee.xcodeproj/project.pbxproj +++ b/Yattee.xcodeproj/project.pbxproj @@ -192,6 +192,7 @@ 372D1A242EDB163800F58F7A /* Frameworks */, 372D1A252EDB163800F58F7A /* Resources */, 37BA19BA2EE4EB7F001D7B0F /* Embed Foundation Extensions */, + 37C0FEE100000000FEE100A1 /* Strip Sparkle (non-DeveloperID) */, ); buildRules = ( ); @@ -365,6 +366,28 @@ }; /* End PBXResourcesBuildPhase section */ +/* Begin PBXShellScriptBuildPhase section */ + 37C0FEE100000000FEE100A1 /* Strip Sparkle (non-DeveloperID) */ = { + isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + ); + name = "Strip Sparkle (non-DeveloperID)"; + outputFileListPaths = ( + ); + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "if [ \"${CONFIGURATION}\" != \"Release-DeveloperID\" ]; then\n FW=\"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/Sparkle.framework\"\n if [ -d \"$FW\" ]; then\n echo \"Stripping Sparkle.framework (config=${CONFIGURATION})\"\n rm -rf \"$FW\"\n fi\nfi\n"; + }; +/* End PBXShellScriptBuildPhase section */ + /* Begin PBXSourcesBuildPhase section */ 372D1A232EDB163800F58F7A /* Sources */ = { isa = PBXSourcesBuildPhase; @@ -549,6 +572,7 @@ CODE_SIGN_STYLE = Automatic; CURRENT_PROJECT_VERSION = 259; DEAD_CODE_STRIPPING = YES; + ENABLE_USER_SCRIPT_SANDBOXING = NO; DEVELOPMENT_TEAM = 78Z5H3M6RJ; ENABLE_APP_SANDBOX = YES; ENABLE_HARDENED_RUNTIME = YES; @@ -632,6 +656,7 @@ CODE_SIGN_STYLE = Automatic; CURRENT_PROJECT_VERSION = 259; DEAD_CODE_STRIPPING = YES; + ENABLE_USER_SCRIPT_SANDBOXING = NO; DEVELOPMENT_TEAM = 78Z5H3M6RJ; ENABLE_APP_SANDBOX = YES; ENABLE_HARDENED_RUNTIME = YES; @@ -678,6 +703,10 @@ "LD_RUNPATH_SEARCH_PATHS[sdk=macosx*]" = "@executable_path/../Frameworks"; MACOSX_DEPLOYMENT_TARGET = 15.0; MARKETING_VERSION = 2.0.0; + "OTHER_LDFLAGS[sdk=macosx*]" = ( + "$(inherited)", + "-Wl,-dead_strip_dylibs", + ); PRODUCT_BUNDLE_IDENTIFIER = stream.yattee.app; PRODUCT_NAME = "$(TARGET_NAME)"; REGISTER_APP_GROUPS = YES; @@ -769,6 +798,7 @@ CODE_SIGN_STYLE = Automatic; CURRENT_PROJECT_VERSION = 259; DEAD_CODE_STRIPPING = YES; + ENABLE_USER_SCRIPT_SANDBOXING = NO; DEVELOPMENT_TEAM = 78Z5H3M6RJ; ENABLE_APP_SANDBOX = YES; ENABLE_HARDENED_RUNTIME = YES;