From dcaddcc2196e498ef93aabd45bc7ecc9d0fc8da2 Mon Sep 17 00:00:00 2001 From: Pratik Lohani <62761418+Or3nges@users.noreply.github.com> Date: Fri, 14 Nov 2025 20:24:35 +0100 Subject: [PATCH 01/11] Fix expired Discord link in README.md (#1101) --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 70ebb03a..1c8bbf47 100644 --- a/README.md +++ b/README.md @@ -6,7 +6,7 @@ [![PRs Welcome](https://img.shields.io/badge/PRs-welcome-brightgreen.svg)](https://makeapullrequest.com) [![Nightly SideStore build](https://github.com/SideStore/SideStore/actions/workflows/nightly.yml/badge.svg)](https://github.com/SideStore/SideStore/actions/workflows/nightly.yml) [![.github/workflows/beta.yml](https://github.com/SideStore/SideStore/actions/workflows/beta.yml/badge.svg)](https://github.com/SideStore/SideStore/actions/workflows/beta.yml) -[![Discord](https://img.shields.io/discord/949183273383395328?label=Discord)](https://discord.gg/sidestore) +[![Discord](https://img.shields.io/discord/949183273383395328?label=Discord)](https://dis.sidestore.io) ![Alt](https://repobeats.axiom.co/api/embed/3a329ce95955690b9a9366f8d5598626a847d96c.svg "Repobeats analytics image") From 25f13faa67a6ed36557a9fb57675f10ffe477925 Mon Sep 17 00:00:00 2001 From: mahee96 <47920326+mahee96@users.noreply.github.com> Date: Sun, 16 Nov 2025 00:46:51 +0530 Subject: [PATCH 02/11] Pods: removed pods entirely and replace pod dependencies with swift packages --- AltStore.xcodeproj/project.pbxproj | 164 ++++++++---------- AltStore.xcworkspace/contents.xcworkspacedata | 3 - .../Settings/SettingsViewController.swift | 2 + Podfile | 37 ---- Podfile.lock | 33 ---- 5 files changed, 74 insertions(+), 165 deletions(-) delete mode 100644 Podfile delete mode 100644 Podfile.lock diff --git a/AltStore.xcodeproj/project.pbxproj b/AltStore.xcodeproj/project.pbxproj index 87cd9574..d0295bb0 100644 --- a/AltStore.xcodeproj/project.pbxproj +++ b/AltStore.xcodeproj/project.pbxproj @@ -47,9 +47,7 @@ 0EE7FDCB2BE8D12B00D1E390 /* ALTLocalizedError.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0EE7FDC32BE8BC7900D1E390 /* ALTLocalizedError.swift */; }; 0EE7FDCD2BE9124400D1E390 /* ErrorDetailsViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0EE7FDCC2BE9124400D1E390 /* ErrorDetailsViewController.swift */; }; 19B9B7452845E6DF0076EF69 /* SelectTeamViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 19B9B7442845E6DF0076EF69 /* SelectTeamViewController.swift */; }; - 551A15E55999499418AC1022 /* Pods_AltStoreCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 707E746318F0B6F1A44935D3 /* Pods_AltStoreCore.framework */; }; A800F7042CE28E3800208744 /* View+AltWidget.swift in Sources */ = {isa = PBXBuildFile; fileRef = A800F7032CE28E2F00208744 /* View+AltWidget.swift */; }; - A805C3CD2D0C316A00E76BDD /* Pods_SideStore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A805C3CC2D0C316A00E76BDD /* Pods_SideStore.framework */; }; A8087E752D2D2958002DB21B /* ImportExport.swift in Sources */ = {isa = PBXBuildFile; fileRef = A8087E742D2D2958002DB21B /* ImportExport.swift */; }; A8096D182D30AD4F000C39C6 /* WidgetUpdateIntent.swift in Sources */ = {isa = PBXBuildFile; fileRef = A8096D172D30AD4F000C39C6 /* WidgetUpdateIntent.swift */; }; A8096D1C2D30ADA9000C39C6 /* ActiveAppsTimelineProvider+Simulator.swift in Sources */ = {isa = PBXBuildFile; fileRef = A8096D1B2D30ADA9000C39C6 /* ActiveAppsTimelineProvider+Simulator.swift */; }; @@ -84,6 +82,10 @@ A82067C42D03E0DE00645C0D /* SemanticVersion in Frameworks */ = {isa = PBXBuildFile; productRef = A82067C32D03E0DE00645C0D /* SemanticVersion */; }; A8228B5B2D6E2C0C00F7CE0E /* (null) in Sources */ = {isa = PBXBuildFile; }; A8228B5D2D6E361F00F7CE0E /* (null) in Sources */ = {isa = PBXBuildFile; }; + A83FE3672EC90482005ACE9A /* Starscream in Frameworks */ = {isa = PBXBuildFile; productRef = A83FE3662EC90482005ACE9A /* Starscream */; }; + A83FE36A2EC904FD005ACE9A /* AppCenterAnalytics in Frameworks */ = {isa = PBXBuildFile; productRef = A83FE3692EC904FD005ACE9A /* AppCenterAnalytics */; }; + A83FE36C2EC904FD005ACE9A /* AppCenterCrashes in Frameworks */ = {isa = PBXBuildFile; productRef = A83FE36B2EC904FD005ACE9A /* AppCenterCrashes */; }; + A83FE3772EC905E3005ACE9A /* KeychainAccess in Frameworks */ = {isa = PBXBuildFile; productRef = A83FE3762EC905E3005ACE9A /* KeychainAccess */; }; A859ED5C2D1EE827003DCC58 /* OpenSSL.xcframework in Frameworks */ = {isa = PBXBuildFile; fileRef = A859ED5B2D1EE80D003DCC58 /* OpenSSL.xcframework */; }; A859ED5D2D1EE827003DCC58 /* OpenSSL.xcframework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = A859ED5B2D1EE80D003DCC58 /* OpenSSL.xcframework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; A86315DF2D3EB2DE0048FA40 /* ErrorProcessing.swift in Sources */ = {isa = PBXBuildFile; fileRef = A86315DE2D3EB2D80048FA40 /* ErrorProcessing.swift */; }; @@ -101,6 +103,7 @@ A8B645FF2D70C1AD00125819 /* MarkdownKit in Frameworks */ = {isa = PBXBuildFile; productRef = A8B645FE2D70C1AD00125819 /* MarkdownKit */; }; A8B646012D70C23E00125819 /* MarkdownKit in Frameworks */ = {isa = PBXBuildFile; productRef = A8B646002D70C23E00125819 /* MarkdownKit */; }; A8BB34E52D04EC8E000A8B4D /* minimuxer-helpers.swift in Sources */ = {isa = PBXBuildFile; fileRef = A809F6A52D04DA1900F0F0F3 /* minimuxer-helpers.swift */; }; + A8C2260E2EC9039A00047C0D /* Nuke in Frameworks */ = {isa = PBXBuildFile; productRef = A8C2260D2EC9039A00047C0D /* Nuke */; }; A8C38C242D206A3A00E83DBD /* ConsoleLogger.swift in Sources */ = {isa = PBXBuildFile; fileRef = A8C38C1D2D206A3A00E83DBD /* ConsoleLogger.swift */; }; A8C38C262D206A3A00E83DBD /* ConsoleLog.swift in Sources */ = {isa = PBXBuildFile; fileRef = A8C38C1E2D206A3A00E83DBD /* ConsoleLog.swift */; }; A8C38C2A2D206AC100E83DBD /* OutputStream.swift in Sources */ = {isa = PBXBuildFile; fileRef = A8C38C282D206AC100E83DBD /* OutputStream.swift */; }; @@ -633,12 +636,7 @@ 0EE7FDCC2BE9124400D1E390 /* ErrorDetailsViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ErrorDetailsViewController.swift; sourceTree = ""; }; 191E5FAB290A5D92001A3B7C /* libminimuxer.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libminimuxer.a; sourceTree = BUILT_PRODUCTS_DIR; }; 19B9B7442845E6DF0076EF69 /* SelectTeamViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SelectTeamViewController.swift; sourceTree = ""; }; - 32741831F952989EC7E74FFA /* Pods-SideStore.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-SideStore.debug.xcconfig"; path = "Target Support Files/Pods-SideStore/Pods-SideStore.debug.xcconfig"; sourceTree = ""; }; - 37C39DA99ADEE21E3BDD056F /* Pods-AltStoreCore.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-AltStoreCore.debug.xcconfig"; path = "Target Support Files/Pods-AltStoreCore/Pods-AltStoreCore.debug.xcconfig"; sourceTree = ""; }; - 707E746318F0B6F1A44935D3 /* Pods_AltStoreCore.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_AltStoreCore.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 7935E4499B2FC11DA8BAB2CC /* Pods-AltStoreCore.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-AltStoreCore.release.xcconfig"; path = "Target Support Files/Pods-AltStoreCore/Pods-AltStoreCore.release.xcconfig"; sourceTree = ""; }; A800F7032CE28E2F00208744 /* View+AltWidget.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "View+AltWidget.swift"; sourceTree = ""; }; - A805C3CC2D0C316A00E76BDD /* Pods_SideStore.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = Pods_SideStore.framework; sourceTree = BUILT_PRODUCTS_DIR; }; A8087E742D2D2958002DB21B /* ImportExport.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ImportExport.swift; sourceTree = ""; }; A8096D172D30AD4F000C39C6 /* WidgetUpdateIntent.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = WidgetUpdateIntent.swift; sourceTree = ""; }; A8096D1B2D30ADA9000C39C6 /* ActiveAppsTimelineProvider+Simulator.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "ActiveAppsTimelineProvider+Simulator.swift"; sourceTree = ""; }; @@ -971,7 +969,6 @@ BFF767CB2489AB5C0097E58C /* ALTServerError+Conveniences.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "ALTServerError+Conveniences.swift"; sourceTree = ""; }; BFF767CD2489ABE90097E58C /* NetworkConnection.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NetworkConnection.swift; sourceTree = ""; }; BFF7EC4C25081E9300BDE521 /* AltStore 8.xcdatamodel */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcdatamodel; path = "AltStore 8.xcdatamodel"; sourceTree = ""; }; - C0ED2BA78F87A9001A13E715 /* Pods-SideStore.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-SideStore.release.xcconfig"; path = "Target Support Files/Pods-SideStore/Pods-SideStore.release.xcconfig"; sourceTree = ""; }; D50107EB2ADF2E1A0069F2A1 /* AddSourceTextFieldCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AddSourceTextFieldCell.swift; sourceTree = ""; }; D5084CCB2B1EA80100C02160 /* FeaturedComponents.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FeaturedComponents.swift; sourceTree = ""; }; D5144BA72B8684EF00738A5C /* Icons.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Icons.xcassets; sourceTree = ""; }; @@ -1114,8 +1111,8 @@ A8945AA62D059B6100D86CBE /* Roxas.framework in Frameworks */, A82067C42D03E0DE00645C0D /* SemanticVersion in Frameworks */, A859ED5C2D1EE827003DCC58 /* OpenSSL.xcframework in Frameworks */, - 551A15E55999499418AC1022 /* Pods_AltStoreCore.framework in Frameworks */, A8C6D50C2D1EE87600DF01F1 /* AltSign-Static in Frameworks */, + A83FE3772EC905E3005ACE9A /* KeychainAccess in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -1132,15 +1129,18 @@ buildActionMask = 2147483647; files = ( A8C6D5172D1EE95B00DF01F1 /* OpenSSL.xcframework in Frameworks */, + A83FE36C2EC904FD005ACE9A /* AppCenterCrashes in Frameworks */, A8A543302D04F14400D72399 /* libfragmentzip.a in Frameworks */, A8B646012D70C23E00125819 /* MarkdownKit in Frameworks */, - A805C3CD2D0C316A00E76BDD /* Pods_SideStore.framework in Frameworks */, + A8C2260E2EC9039A00047C0D /* Nuke in Frameworks */, A8F838942D048ECE00ED425D /* libimobiledevice.a in Frameworks */, A8F838932D048E8F00ED425D /* libminimuxer.a in Frameworks */, D533E8B72727841800A9B5DD /* libAppleArchive.tbd in Frameworks */, + A83FE36A2EC904FD005ACE9A /* AppCenterAnalytics in Frameworks */, D533E8BE2727BBF800A9B5DD /* libcurl.a in Frameworks */, BF1614F1250822F100767AEA /* Roxas.framework in Frameworks */, A8B645FF2D70C1AD00125819 /* MarkdownKit in Frameworks */, + A83FE3672EC90482005ACE9A /* Starscream in Frameworks */, BF66EE852501AE50007EE018 /* AltStoreCore.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; @@ -1997,7 +1997,6 @@ D586D39928EF58B0000E101F /* AltTests */, BFD247852284BB3300981D42 /* Frameworks */, BFD2476B2284B9A500981D42 /* Products */, - C2B79346E83FCBDE76D501CB /* Pods */, A85ACB942D1F31C400AA3DE7 /* xcconfigs */, B3C39607284F4C8400DA9E2F /* Build.xcconfig */, B3C39606284F4C8400DA9E2F /* CodeSigning.xcconfig */, @@ -2066,9 +2065,7 @@ D533E8B62727841800A9B5DD /* libAppleArchive.tbd */, BF580497246A3D19008AE704 /* UIKit.framework */, BFD247862284BB3B00981D42 /* Roxas.framework */, - A805C3CC2D0C316A00E76BDD /* Pods_SideStore.framework */, A8945AA52D059B6100D86CBE /* Roxas.framework */, - 707E746318F0B6F1A44935D3 /* Pods_AltStoreCore.framework */, ); name = Frameworks; sourceTree = ""; @@ -2259,17 +2256,6 @@ path = Connections; sourceTree = ""; }; - C2B79346E83FCBDE76D501CB /* Pods */ = { - isa = PBXGroup; - children = ( - 37C39DA99ADEE21E3BDD056F /* Pods-AltStoreCore.debug.xcconfig */, - 7935E4499B2FC11DA8BAB2CC /* Pods-AltStoreCore.release.xcconfig */, - 32741831F952989EC7E74FFA /* Pods-SideStore.debug.xcconfig */, - C0ED2BA78F87A9001A13E715 /* Pods-SideStore.release.xcconfig */, - ); - path = Pods; - sourceTree = ""; - }; D50107ED2ADF2E310069F2A1 /* Components */ = { isa = PBXGroup; children = ( @@ -2558,7 +2544,6 @@ isa = PBXNativeTarget; buildConfigurationList = BF66EE892501AE50007EE018 /* Build configuration list for PBXNativeTarget "AltStoreCore" */; buildPhases = ( - AEDB4E9409D2CEE1EA126980 /* [CP] Check Pods Manifest.lock */, BF66EE792501AE50007EE018 /* Headers */, BF66EE7A2501AE50007EE018 /* Sources */, BF66EE7B2501AE50007EE018 /* Frameworks */, @@ -2573,6 +2558,7 @@ packageProductDependencies = ( A82067C32D03E0DE00645C0D /* SemanticVersion */, A8C6D50B2D1EE87600DF01F1 /* AltSign-Static */, + A83FE3762EC905E3005ACE9A /* KeychainAccess */, ); productName = AltStoreCore; productReference = BF66EE7E2501AE50007EE018 /* AltStoreCore.framework */; @@ -2600,7 +2586,6 @@ isa = PBXNativeTarget; buildConfigurationList = BFD2477E2284B9A700981D42 /* Build configuration list for PBXNativeTarget "SideStore" */; buildPhases = ( - B0FAA6617CB97872E78D84CA /* [CP] Check Pods Manifest.lock */, 99F87D0629D8B51400B40039 /* ShellScript */, BFD247662284B9A500981D42 /* Sources */, BFD247672284B9A500981D42 /* Frameworks */, @@ -2608,7 +2593,6 @@ BFD247682284B9A500981D42 /* Resources */, BF088D2B2501A087008082D9 /* Embed Frameworks */, BF98917B250AABF4002ACF50 /* Embed Foundation Extensions */, - 884B4E831D26F2E18AF7916C /* [CP] Copy Pods Resources */, ); buildRules = ( ); @@ -2684,6 +2668,10 @@ D5FB7A2C2AA2859400EF863D /* XCRemoteSwiftPackageReference "swift-argument-parser" */, A82067C22D03E0DE00645C0D /* XCRemoteSwiftPackageReference "SemanticVersion" */, A8B645FD2D70C1AD00125819 /* XCRemoteSwiftPackageReference "MarkdownKit" */, + A8C2260C2EC9039A00047C0D /* XCRemoteSwiftPackageReference "Nuke" */, + A83FE3652EC90482005ACE9A /* XCRemoteSwiftPackageReference "Starscream" */, + A83FE3682EC904FD005ACE9A /* XCRemoteSwiftPackageReference "appcenter-sdk-apple" */, + A83FE36D2EC90512005ACE9A /* XCRemoteSwiftPackageReference "KeychainAccess" */, ); productRefGroup = BFD2476B2284B9A500981D42 /* Products */; projectDirPath = ""; @@ -2821,27 +2809,6 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ - 884B4E831D26F2E18AF7916C /* [CP] Copy Pods Resources */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-SideStore/Pods-SideStore-resources-${CONFIGURATION}-input-files.xcfilelist", - ); - inputPaths = ( - ); - name = "[CP] Copy Pods Resources"; - outputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-SideStore/Pods-SideStore-resources-${CONFIGURATION}-output-files.xcfilelist", - ); - outputPaths = ( - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-SideStore/Pods-SideStore-resources.sh\"\n"; - showEnvVarsInLog = 0; - }; 99F87D0629D8B51400B40039 /* ShellScript */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; @@ -2878,50 +2845,6 @@ shellPath = /bin/sh; shellScript = "#!/bin/sh\n\necho \"Build directory: $BUILD_DIR\"\necho \"Configuration build directory: $CONFIGURATION_BUILD_DIR\"\n\n# diagnostics\n# echo \">>>>>>>>> Xcode-Derived-Data <<<<<<<<<<\"\n# find \"$BUILD_DIR\" -maxdepth 7 -exec ls -ld {} + || true # List contents if directory exists \n# # ls -la ~/Library/Developer/Xcode/DerivedData || true # List contents if directory exists \n# echo \"\"\n\n# diagnostics\n# exit 0\n\n# Define the path to your Makefile\nMAKEFILE_PATH=\"${PROJECT_DIR}/\"\n\n# Navigate to the directory containing the Makefile\ncd \"$MAKEFILE_PATH\" || exit 1\n\n# Run the make target 'ipa-altbackup'\nmake -B clean-altbackup copy-altbackup ipa-altbackup\n\n# Ensure that the ipa-altbackup process finishes before continuing\nif [ $? -ne 0 ]; then\n echo \"Error: ipa-altbackup failed\"\n exit 1\nelse\n echo \"ipa-altbackup completed successfully\"\nfi\n# Type a script or drag a script file from your workspace to insert its path.\n"; }; - AEDB4E9409D2CEE1EA126980 /* [CP] Check Pods Manifest.lock */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputFileListPaths = ( - ); - inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; - outputFileListPaths = ( - ); - outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-AltStoreCore-checkManifestLockResult.txt", - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; - showEnvVarsInLog = 0; - }; - B0FAA6617CB97872E78D84CA /* [CP] Check Pods Manifest.lock */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputFileListPaths = ( - ); - inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; - outputFileListPaths = ( - ); - outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-SideStore-checkManifestLockResult.txt", - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; - showEnvVarsInLog = 0; - }; /* End PBXShellScriptBuildPhase section */ /* Begin PBXSourcesBuildPhase section */ @@ -4178,6 +4101,30 @@ version = 0.4.0; }; }; + A83FE3652EC90482005ACE9A /* XCRemoteSwiftPackageReference "Starscream" */ = { + isa = XCRemoteSwiftPackageReference; + repositoryURL = "https://github.com/daltoniam/Starscream"; + requirement = { + kind = upToNextMajorVersion; + minimumVersion = 4.0.8; + }; + }; + A83FE3682EC904FD005ACE9A /* XCRemoteSwiftPackageReference "appcenter-sdk-apple" */ = { + isa = XCRemoteSwiftPackageReference; + repositoryURL = "https://github.com/microsoft/appcenter-sdk-apple"; + requirement = { + kind = upToNextMajorVersion; + minimumVersion = 5.0.6; + }; + }; + A83FE36D2EC90512005ACE9A /* XCRemoteSwiftPackageReference "KeychainAccess" */ = { + isa = XCRemoteSwiftPackageReference; + repositoryURL = "https://github.com/kishikawakatsumi/KeychainAccess"; + requirement = { + branch = master; + kind = branch; + }; + }; A8B645FD2D70C1AD00125819 /* XCRemoteSwiftPackageReference "MarkdownKit" */ = { isa = XCRemoteSwiftPackageReference; repositoryURL = "https://github.com/bmoliveira/MarkdownKit.git"; @@ -4186,6 +4133,14 @@ minimumVersion = 1.7.1; }; }; + A8C2260C2EC9039A00047C0D /* XCRemoteSwiftPackageReference "Nuke" */ = { + isa = XCRemoteSwiftPackageReference; + repositoryURL = "https://github.com/kean/Nuke"; + requirement = { + kind = upToNextMinorVersion; + minimumVersion = 10.0.0; + }; + }; D58D5F2C26DFE68E00E55E38 /* XCRemoteSwiftPackageReference "LaunchAtLogin" */ = { isa = XCRemoteSwiftPackageReference; repositoryURL = "https://github.com/sindresorhus/LaunchAtLogin.git"; @@ -4210,6 +4165,26 @@ package = A82067C22D03E0DE00645C0D /* XCRemoteSwiftPackageReference "SemanticVersion" */; productName = SemanticVersion; }; + A83FE3662EC90482005ACE9A /* Starscream */ = { + isa = XCSwiftPackageProductDependency; + package = A83FE3652EC90482005ACE9A /* XCRemoteSwiftPackageReference "Starscream" */; + productName = Starscream; + }; + A83FE3692EC904FD005ACE9A /* AppCenterAnalytics */ = { + isa = XCSwiftPackageProductDependency; + package = A83FE3682EC904FD005ACE9A /* XCRemoteSwiftPackageReference "appcenter-sdk-apple" */; + productName = AppCenterAnalytics; + }; + A83FE36B2EC904FD005ACE9A /* AppCenterCrashes */ = { + isa = XCSwiftPackageProductDependency; + package = A83FE3682EC904FD005ACE9A /* XCRemoteSwiftPackageReference "appcenter-sdk-apple" */; + productName = AppCenterCrashes; + }; + A83FE3762EC905E3005ACE9A /* KeychainAccess */ = { + isa = XCSwiftPackageProductDependency; + package = A83FE36D2EC90512005ACE9A /* XCRemoteSwiftPackageReference "KeychainAccess" */; + productName = KeychainAccess; + }; A8B645FE2D70C1AD00125819 /* MarkdownKit */ = { isa = XCSwiftPackageProductDependency; package = A8B645FD2D70C1AD00125819 /* XCRemoteSwiftPackageReference "MarkdownKit" */; @@ -4220,6 +4195,11 @@ package = A8B645FD2D70C1AD00125819 /* XCRemoteSwiftPackageReference "MarkdownKit" */; productName = MarkdownKit; }; + A8C2260D2EC9039A00047C0D /* Nuke */ = { + isa = XCSwiftPackageProductDependency; + package = A8C2260C2EC9039A00047C0D /* XCRemoteSwiftPackageReference "Nuke" */; + productName = Nuke; + }; A8C6D50B2D1EE87600DF01F1 /* AltSign-Static */ = { isa = XCSwiftPackageProductDependency; productName = "AltSign-Static"; diff --git a/AltStore.xcworkspace/contents.xcworkspacedata b/AltStore.xcworkspace/contents.xcworkspacedata index d5c67065..4667a292 100644 --- a/AltStore.xcworkspace/contents.xcworkspacedata +++ b/AltStore.xcworkspace/contents.xcworkspacedata @@ -10,7 +10,4 @@ - - diff --git a/AltStore/Settings/SettingsViewController.swift b/AltStore/Settings/SettingsViewController.swift index eeaa8657..7af03813 100644 --- a/AltStore/Settings/SettingsViewController.swift +++ b/AltStore/Settings/SettingsViewController.swift @@ -257,7 +257,9 @@ final class SettingsViewController: UITableViewController } configureReleaseChannelButton() + #if !targetEnvironment(simulator) detectAndImportAccountFile() + #endif } func importAccountAtFile(_ file: URL, remove: Bool = false) { diff --git a/Podfile b/Podfile deleted file mode 100644 index 3c7e78b9..00000000 --- a/Podfile +++ /dev/null @@ -1,37 +0,0 @@ -inhibit_all_warnings! - -target 'SideStore' do - platform :ios, '15.0' - - use_frameworks! :linkage => :static - - # Pods for AltStore - pod 'Nuke', '~> 10.0' - pod 'AppCenter/Analytics', '~> 5.0' - pod 'AppCenter/Crashes', '~> 5.0' - pod 'Starscream', '~> 4.0.0' - -end - -target 'AltStoreCore' do - platform :ios, '15.0' - - use_frameworks! :linkage => :static - - # Pods for AltStoreCore - pod 'KeychainAccess', '~> 4.2.2' - # pod 'SemanticVersion', '~> 0.3.5' - # Add the Swift Package using the repository URL - # pod 'SemanticVersion', :git => 'https://github.com/SwiftPackageIndex/SemanticVersion.git', :tag => '0.4.0' - - -end - -post_install do |installer| - installer.pods_project.targets.each do |target| - target.build_configurations.each do |config| - config.build_settings['IPHONEOS_DEPLOYMENT_TARGET'] = '15.0' - config.build_settings['MACOSX_DEPLOYMENT_TARGET'] = '11.0' - end - end -end diff --git a/Podfile.lock b/Podfile.lock deleted file mode 100644 index 2b824479..00000000 --- a/Podfile.lock +++ /dev/null @@ -1,33 +0,0 @@ -PODS: - - AppCenter/Analytics (5.0.5): - - AppCenter/Core - - AppCenter/Core (5.0.5) - - AppCenter/Crashes (5.0.5): - - AppCenter/Core - - KeychainAccess (4.2.2) - - Nuke (10.7.1) - - Starscream (4.0.8) - -DEPENDENCIES: - - AppCenter/Analytics (~> 5.0) - - AppCenter/Crashes (~> 5.0) - - KeychainAccess (~> 4.2.2) - - Nuke (~> 10.0) - - Starscream (~> 4.0.0) - -SPEC REPOS: - trunk: - - AppCenter - - KeychainAccess - - Nuke - - Starscream - -SPEC CHECKSUMS: - AppCenter: 994875ea7941b9e168babb98299f900a94bcef13 - KeychainAccess: c0c4f7f38f6fc7bbe58f5702e25f7bd2f65abf51 - Nuke: 279f17a599fd1c83cf51de5e0e1f2db143a287b0 - Starscream: 19b5533ddb925208db698f0ac508a100b884a1b9 - -PODFILE CHECKSUM: c0b9b55044ebe3d841c52647f4f74ad4169f97f1 - -COCOAPODS: 1.16.2 From 31520354bd7357ed7391f60f1c177092dc350f79 Mon Sep 17 00:00:00 2001 From: mahee96 <47920326+mahee96@users.noreply.github.com> Date: Sun, 16 Nov 2025 00:51:02 +0530 Subject: [PATCH 03/11] CI: remove pod related steps --- .github/.obsolete/reusable-build-workflow.yml | 118 ------------------ .github/workflows/pr.yml | 45 ------- .github/workflows/sidestore-build.yml | 43 ------- .github/workflows/sidestore-tests-build.yml | 39 ------ .github/workflows/sidestore-tests-run.yml | 39 ------ .github/workflows/stable.yml | 41 ------ 6 files changed, 325 deletions(-) diff --git a/.github/.obsolete/reusable-build-workflow.yml b/.github/.obsolete/reusable-build-workflow.yml index 97d661cd..99a7123e 100644 --- a/.github/.obsolete/reusable-build-workflow.yml +++ b/.github/.obsolete/reusable-build-workflow.yml @@ -204,44 +204,6 @@ jobs: # swiftpm-cache-restore-keys: | # xcode-cache-sourcedata-build-${{ github.ref_name }}- - - name: (Build) Restore Pods from Cache (Exact match) - id: pods-restore - uses: actions/cache/restore@v3 - with: - path: | - ./Podfile.lock - ./Pods/ - ./AltStore.xcworkspace/ - key: pods-cache-build-${{ github.ref_name }}-${{ hashFiles('Podfile') }} - # restore-keys: | # commented out to strictly check cache for this particular podfile - # pods-cache- - - - name: (Build) Restore Pods from Cache (Last Available) - if: ${{ steps.pods-restore.outputs.cache-hit != 'true' }} - id: pods-restore-recent - uses: actions/cache/restore@v3 - with: - path: | - ./Podfile.lock - ./Pods/ - ./AltStore.xcworkspace/ - key: pods-cache-build-${{ github.ref_name }}- - - - - name: (Build) Install CocoaPods - run: pod install - - - name: (Build) Save Pods to Cache - id: save-pods - if: ${{ steps.pods-restore.outputs.cache-hit != 'true' }} - uses: actions/cache/save@v3 - with: - path: | - ./Podfile.lock - ./Pods/ - ./AltStore.xcworkspace/ - key: pods-cache-build-${{ github.ref_name }}-${{ hashFiles('Podfile') }} - - name: (Build) Clean previous build artifacts # using 'tee' to intercept stdout and log for detailed build-log run: | @@ -255,10 +217,6 @@ jobs: ls -la . echo "" - echo ">>>>>>>>> Pods <<<<<<<<<<" - find Pods -maxdepth 2 -exec ls -ld {} + || true # List contents if directory exists - echo "" - echo ">>>>>>>>> SideStore <<<<<<<<<<" find SideStore -maxdepth 2 -exec ls -ld {} + || true # List contents if directory exists echo "" @@ -474,40 +432,6 @@ jobs: ~/Library/Caches/org.swift.swiftpm key: xcode-cache-tests-${{ github.ref_name }}- - - name: (Tests-Build) Restore Pods from Cache (Exact match) - id: pods-restore - uses: actions/cache/restore@v3 - with: - path: | - ./Podfile.lock - ./Pods/ - ./AltStore.xcworkspace/ - key: pods-cache-test-${{ github.ref_name }}-${{ hashFiles('Podfile') }} - - - name: (Tests-Build) Restore Pods from Cache (Last Available) - if: ${{ steps.pods-restore.outputs.cache-hit != 'true' }} - id: pods-restore-recent - uses: actions/cache/restore@v3 - with: - path: | - ./Podfile.lock - ./Pods/ - ./AltStore.xcworkspace/ - key: pods-cache-test-${{ github.ref_name }}- - - - name: (Tests-Build) Install CocoaPods - run: pod install - - - name: (Tests-Build) Save Pods to Cache - if: ${{ steps.pods-restore.outputs.cache-hit != 'true' }} - uses: actions/cache/save@v3 - with: - path: | - ./Podfile.lock - ./Pods/ - ./AltStore.xcworkspace/ - key: pods-cache-test-${{ github.ref_name }}-${{ hashFiles('Podfile') }} - - name: Clean Derived Data (if required) if: ${{ vars.PERFORM_CLEAN_TESTS_BUILD == '1' }} run: | @@ -526,10 +450,6 @@ jobs: ls -la . echo "" - echo ">>>>>>>>> Pods <<<<<<<<<<" - find Pods -maxdepth 2 -exec ls -ld {} + || true # List contents if directory exists - echo "" - echo ">>>>>>>>> SideStore <<<<<<<<<<" find SideStore -maxdepth 2 -exec ls -ld {} + || true # List contents if directory exists echo "" @@ -646,40 +566,6 @@ jobs: ~/Library/Caches/org.swift.swiftpm key: xcode-cache-tests-${{ github.ref_name }}-${{ github.sha }} - - name: (Tests-Run) Restore Pods from Cache (Exact match) - id: pods-restore - uses: actions/cache/restore@v3 - with: - path: | - ./Podfile.lock - ./Pods/ - ./AltStore.xcworkspace/ - key: pods-cache-test-${{ github.ref_name }}-${{ hashFiles('Podfile') }} - - - name: (Tests-Run) Restore Pods from Cache (Last Available) - if: ${{ steps.pods-restore.outputs.cache-hit != 'true' }} - id: pods-restore-recent - uses: actions/cache/restore@v3 - with: - path: | - ./Podfile.lock - ./Pods/ - ./AltStore.xcworkspace/ - key: pods-cache-test-${{ github.ref_name }}- - - - name: (Tests-Run) Install CocoaPods - run: pod install - - - name: (Tests-Run) Save Pods to Cache - if: ${{ steps.pods-restore.outputs.cache-hit != 'true' }} - uses: actions/cache/save@v3 - with: - path: | - ./Podfile.lock - ./Pods/ - ./AltStore.xcworkspace/ - key: pods-cache-test-${{ github.ref_name }}-${{ hashFiles('Podfile') }} - - name: (Tests-Run) Clean previous build artifacts run: | make clean @@ -691,10 +577,6 @@ jobs: ls -la . echo "" - echo ">>>>>>>>> Pods <<<<<<<<<<" - find Pods -maxdepth 2 -exec ls -ld {} + || true # List contents if directory exists - echo "" - echo ">>>>>>>>> SideStore <<<<<<<<<<" find SideStore -maxdepth 2 -exec ls -ld {} + || true # List contents if directory exists echo "" diff --git a/.github/workflows/pr.yml b/.github/workflows/pr.yml index 535da38d..29b9fe32 100644 --- a/.github/workflows/pr.yml +++ b/.github/workflows/pr.yml @@ -54,57 +54,12 @@ jobs: swiftpm-cache-restore-keys: | xcode-cache-sourcedata- - - - name: Restore Pods from Cache (Exact match) - id: pods-restore - uses: actions/cache/restore@v3 - with: - path: | - ./Podfile.lock - ./Pods/ - ./AltStore.xcworkspace/ - key: pods-cache-${{ hashFiles('Podfile') }} - # restore-keys: | # commented out to strictly check cache for this particular podfile - # pods-cache- - - - name: Restore Pods from Cache (Last Available) - if: ${{ steps.pods-restore.outputs.cache-hit != 'true' }} - id: pods-restore-recent - uses: actions/cache/restore@v3 - with: - path: | - ./Podfile.lock - ./Pods/ - ./AltStore.xcworkspace/ - key: pods-cache- - - - name: Install CocoaPods - # if: ${{ steps.pods-restore.outputs.cache-hit != 'true'}} - id: pods-install - run: | - pod install - - - name: Save Pods to Cache - id: save-pods - if: ${{ steps.pods-restore.outputs.cache-hit != 'true' }} - uses: actions/cache/save@v3 - with: - path: | - ./Podfile.lock - ./Pods/ - ./AltStore.xcworkspace/ - key: pods-cache-${{ hashFiles('Podfile') }} - - name: List Files and derived data run: | echo ">>>>>>>>> Workdir <<<<<<<<<<" ls -la . echo "" - echo ">>>>>>>>> Pods <<<<<<<<<<" - find Pods -maxdepth 2 -exec ls -ld {} + || true # List contents if directory exists - echo "" - echo ">>>>>>>>> SideStore <<<<<<<<<<" find SideStore -maxdepth 2 -exec ls -ld {} + || true # List contents if directory exists echo "" diff --git a/.github/workflows/sidestore-build.yml b/.github/workflows/sidestore-build.yml index 8fc74437..ae5391a1 100644 --- a/.github/workflows/sidestore-build.yml +++ b/.github/workflows/sidestore-build.yml @@ -173,45 +173,6 @@ jobs: # swiftpm-cache-restore-keys: | # xcode-cache-sourcedata-build-${{ github.ref_name }}- - - name: (Build) Restore Pods from Cache (Exact match) - id: pods-restore - uses: actions/cache/restore@v3 - with: - path: | - ./Podfile.lock - ./Pods/ - ./AltStore.xcworkspace/ - key: pods-cache-build-${{ github.ref_name }}-${{ hashFiles('Podfile') }} - # restore-keys: | # commented out to strictly check cache for this particular podfile - # pods-cache- - - - name: (Build) Restore Pods from Cache (Last Available) - if: ${{ steps.pods-restore.outputs.cache-hit != 'true' }} - id: pods-restore-recent - uses: actions/cache/restore@v3 - with: - path: | - ./Podfile.lock - ./Pods/ - ./AltStore.xcworkspace/ - key: pods-cache-build-${{ github.ref_name }}- - - - - name: (Build) Install CocoaPods - run: pod install - shell: bash - - - name: (Build) Save Pods to Cache - id: save-pods - if: ${{ steps.pods-restore.outputs.cache-hit != 'true' }} - uses: actions/cache/save@v3 - with: - path: | - ./Podfile.lock - ./Pods/ - ./AltStore.xcworkspace/ - key: pods-cache-build-${{ github.ref_name }}-${{ hashFiles('Podfile') }} - - name: (Build) Clean previous build artifacts # using 'tee' to intercept stdout and log for detailed build-log run: | @@ -227,10 +188,6 @@ jobs: ls -la . echo "" - echo ">>>>>>>>> Pods <<<<<<<<<<" - find Pods -maxdepth 2 -exec ls -ld {} + || true # List contents if directory exists - echo "" - echo ">>>>>>>>> SideStore <<<<<<<<<<" find SideStore -maxdepth 2 -exec ls -ld {} + || true # List contents if directory exists echo "" diff --git a/.github/workflows/sidestore-tests-build.yml b/.github/workflows/sidestore-tests-build.yml index 4f8f6f6a..6338e114 100644 --- a/.github/workflows/sidestore-tests-build.yml +++ b/.github/workflows/sidestore-tests-build.yml @@ -68,41 +68,6 @@ jobs: ~/Library/Caches/org.swift.swiftpm key: xcode-cache-tests-${{ github.ref_name }}- - - name: (Tests-Build) Restore Pods from Cache (Exact match) - id: pods-restore - uses: actions/cache/restore@v3 - with: - path: | - ./Podfile.lock - ./Pods/ - ./AltStore.xcworkspace/ - key: pods-cache-test-${{ github.ref_name }}-${{ hashFiles('Podfile') }} - - - name: (Tests-Build) Restore Pods from Cache (Last Available) - if: ${{ steps.pods-restore.outputs.cache-hit != 'true' }} - id: pods-restore-recent - uses: actions/cache/restore@v3 - with: - path: | - ./Podfile.lock - ./Pods/ - ./AltStore.xcworkspace/ - key: pods-cache-test-${{ github.ref_name }}- - - - name: (Tests-Build) Install CocoaPods - run: pod install - shell: bash - - - name: (Tests-Build) Save Pods to Cache - if: ${{ steps.pods-restore.outputs.cache-hit != 'true' }} - uses: actions/cache/save@v3 - with: - path: | - ./Podfile.lock - ./Pods/ - ./AltStore.xcworkspace/ - key: pods-cache-test-${{ github.ref_name }}-${{ hashFiles('Podfile') }} - - name: Clean Derived Data (if required) if: ${{ vars.PERFORM_CLEAN_TESTS_BUILD == '1' }} run: | @@ -124,10 +89,6 @@ jobs: ls -la . echo "" - echo ">>>>>>>>> Pods <<<<<<<<<<" - find Pods -maxdepth 2 -exec ls -ld {} + || true # List contents if directory exists - echo "" - echo ">>>>>>>>> SideStore <<<<<<<<<<" find SideStore -maxdepth 2 -exec ls -ld {} + || true # List contents if directory exists echo "" diff --git a/.github/workflows/sidestore-tests-run.yml b/.github/workflows/sidestore-tests-run.yml index 5e2318a0..b2b4dadf 100644 --- a/.github/workflows/sidestore-tests-run.yml +++ b/.github/workflows/sidestore-tests-run.yml @@ -56,41 +56,6 @@ jobs: ~/Library/Caches/org.swift.swiftpm key: xcode-cache-tests-${{ github.ref_name }}-${{ github.sha }} - - name: (Tests-Run) Restore Pods from Cache (Exact match) - id: pods-restore - uses: actions/cache/restore@v3 - with: - path: | - ./Podfile.lock - ./Pods/ - ./AltStore.xcworkspace/ - key: pods-cache-test-${{ github.ref_name }}-${{ hashFiles('Podfile') }} - - - name: (Tests-Run) Restore Pods from Cache (Last Available) - if: ${{ steps.pods-restore.outputs.cache-hit != 'true' }} - id: pods-restore-recent - uses: actions/cache/restore@v3 - with: - path: | - ./Podfile.lock - ./Pods/ - ./AltStore.xcworkspace/ - key: pods-cache-test-${{ github.ref_name }}- - - - name: (Tests-Run) Install CocoaPods - run: pod install - shell: bash - - - name: (Tests-Run) Save Pods to Cache - if: ${{ steps.pods-restore.outputs.cache-hit != 'true' }} - uses: actions/cache/save@v3 - with: - path: | - ./Podfile.lock - ./Pods/ - ./AltStore.xcworkspace/ - key: pods-cache-test-${{ github.ref_name }}-${{ hashFiles('Podfile') }} - - name: (Tests-Run) Clean previous build artifacts run: | make clean @@ -104,10 +69,6 @@ jobs: ls -la . echo "" - echo ">>>>>>>>> Pods <<<<<<<<<<" - find Pods -maxdepth 2 -exec ls -ld {} + || true # List contents if directory exists - echo "" - echo ">>>>>>>>> SideStore <<<<<<<<<<" find SideStore -maxdepth 2 -exec ls -ld {} + || true # List contents if directory exists echo "" diff --git a/.github/workflows/stable.yml b/.github/workflows/stable.yml index 68f1ea92..b8edd762 100644 --- a/.github/workflows/stable.yml +++ b/.github/workflows/stable.yml @@ -89,43 +89,6 @@ jobs: ~/Library/Caches/org.swift.swiftpm key: xcode-cache-build-stable- - - name: (Build) Restore Pods from Cache (Exact match) - id: pods-restore - uses: actions/cache/restore@v3 - with: - path: | - ./Podfile.lock - ./Pods/ - ./AltStore.xcworkspace/ - key: pods-cache-build-stable-${{ hashFiles('Podfile') }} - - - name: (Build) Restore Pods from Cache (Last Available) - if: ${{ steps.pods-restore.outputs.cache-hit != 'true' }} - id: pods-restore-recent - uses: actions/cache/restore@v3 - with: - path: | - ./Podfile.lock - ./Pods/ - ./AltStore.xcworkspace/ - key: pods-cache-build-stable- - - - - name: (Build) Install CocoaPods - run: pod install - shell: bash - - - name: (Build) Save Pods to Cache - id: save-pods - if: ${{ steps.pods-restore.outputs.cache-hit != 'true' }} - uses: actions/cache/save@v3 - with: - path: | - ./Podfile.lock - ./Pods/ - ./AltStore.xcworkspace/ - key: pods-cache-build-stable-${{ hashFiles('Podfile') }} - - name: (Build) Clean previous build artifacts run: | make clean @@ -140,10 +103,6 @@ jobs: ls -la . echo "" - echo ">>>>>>>>> Pods <<<<<<<<<<" - find Pods -maxdepth 2 -exec ls -ld {} + || true # List contents if directory exists - echo "" - echo ">>>>>>>>> SideStore <<<<<<<<<<" find SideStore -maxdepth 2 -exec ls -ld {} + || true # List contents if directory exists echo "" From 2f2df9ca43adde13896f001f8bd09f9acf2301ad Mon Sep 17 00:00:00 2001 From: mahee96 <47920326+mahee96@users.noreply.github.com> Date: Sun, 16 Nov 2025 01:02:42 +0530 Subject: [PATCH 04/11] CI: refine upload list in deploy job based on test enablement --- .github/.obsolete/reusable-build-workflow.yml | 26 ++++++++++++++++++- 1 file changed, 25 insertions(+), 1 deletion(-) diff --git a/.github/.obsolete/reusable-build-workflow.yml b/.github/.obsolete/reusable-build-workflow.yml index 99a7123e..e644335f 100644 --- a/.github/.obsolete/reusable-build-workflow.yml +++ b/.github/.obsolete/reusable-build-workflow.yml @@ -776,6 +776,30 @@ jobs: id: date_altstore run: echo "date=$(date -u +'%Y-%m-%d')" >> $GITHUB_OUTPUT + - name: List files to upload + id: list_uploads + run: | + FILES="SideStore.ipa SideStore.dSYMs.zip encrypted-build-logs.zip" + + if [[ "${{ vars.ENABLE_TESTS }}" == "1" && "${{ vars.ENABLE_TESTS_BUILD }}" == "1" ]]; then + FILES="$FILES encrypted-tests-build-logs.zip" + fi + + if [[ "${{ vars.ENABLE_TESTS }}" == "1" && "${{ vars.ENABLE_TESTS_RUN }}" == "1" ]]; then + FILES="$FILES encrypted-tests-run-logs.zip test-results.zip tests-recording.mp4" + fi + + echo "Final upload list:" + for f in $FILES; do + if [[ -f "$f" ]]; then + echo " ✓ $f" + else + echo " - $f (missing)" + fi + done + + echo "files=$FILES" >> $GITHUB_OUTPUT + - name: Upload to releases uses: IsaacShelton/update-existing-release@v1.3.1 with: @@ -783,7 +807,7 @@ jobs: release: ${{ inputs.release_name }} tag: ${{ inputs.release_tag }} prerelease: ${{ inputs.is_beta }} - files: SideStore.ipa SideStore.dSYMs.zip encrypted-build-logs.zip encrypted-tests-build-logs.zip encrypted-tests-run-logs.zip test-results.zip tests-recording.mp4 + files: ${{ steps.list_uploads.outputs.files }} body: | This is an ⚠️ **EXPERIMENTAL** ⚠️ ${{ inputs.release_name }} build for commit [${{ github.sha }}](https://github.com/${{ github.repository }}/commit/${{ github.sha }}). From ecf5e2d770265abcfde376f2ed02a992a206c06d Mon Sep 17 00:00:00 2001 From: mahee96 <47920326+mahee96@users.noreply.github.com> Date: Sun, 16 Nov 2025 01:24:24 +0530 Subject: [PATCH 05/11] CI: delete obsoleted scripts --- .github/.obsolete/reusable-build-workflow.yml | 913 ------------------ 1 file changed, 913 deletions(-) delete mode 100644 .github/.obsolete/reusable-build-workflow.yml diff --git a/.github/.obsolete/reusable-build-workflow.yml b/.github/.obsolete/reusable-build-workflow.yml deleted file mode 100644 index e644335f..00000000 --- a/.github/.obsolete/reusable-build-workflow.yml +++ /dev/null @@ -1,913 +0,0 @@ -name: Reusable SideStore Build - -on: - workflow_call: - inputs: - is_beta: - required: false - default: false - type: boolean - publish: - required: false - default: false - type: boolean - is_shared_build_num: - required: false - default: true - type: boolean - release_name: - required: true - type: string - release_tag: - required: true - type: string - upstream_tag: - required: true - type: string - upstream_name: - required: true - type: string - bundle_id: - default: com.SideStore.SideStore - required: true - type: string - bundle_id_suffix: - default: '' - required: false - type: string - - secrets: - # GITHUB_TOKEN: - # required: true - CROSS_REPO_PUSH_KEY: - required: true - BUILD_LOG_ZIP_PASSWORD: - required: false - -jobs: - serialize: - name: Wait for other jobs - # since build cache, test-build cache, test-run cache are involved, out of order exec if serialization is on individual jobs will wreak all sorts of havoc - # so we serialize on the entire workflow - concurrency: - group: serialize-workflow - strategy: - fail-fast: false - runs-on: 'macos-15' - steps: - - run: echo "No other contending jobs are running now..." - - name: Set short commit hash - id: commit-id - run: | - # SHORT_COMMIT="${{ github.sha }}" - SHORT_COMMIT=${GITHUB_SHA:0:7} - echo "Short commit hash: $SHORT_COMMIT" - echo "SHORT_COMMIT=$SHORT_COMMIT" >> $GITHUB_OUTPUT - outputs: - short-commit: ${{ steps.commit-id.outputs.SHORT_COMMIT }} - - build: - name: Build SideStore - ${{ inputs.release_tag }} - needs: serialize - strategy: - fail-fast: false - matrix: - include: - - os: 'macos-26' - version: '26.0' - - runs-on: ${{ matrix.os }} - outputs: - version: ${{ steps.version.outputs.version }} - marketing-version: ${{ steps.marketing-version.outputs.MARKETING_VERSION }} - release-channel: ${{ steps.release-channel.outputs.RELEASE_CHANNEL }} - - steps: - - name: Set beta status - run: echo "IS_BETA=${{ inputs.is_beta }}" >> $GITHUB_ENV - - - name: Checkout code - uses: actions/checkout@v4 - with: - submodules: recursive - fetch-depth: 0 - - - name: Install dependencies - ldid & xcbeautify - run: | - brew install ldid xcbeautify - - - name: Set ref based on is_shared_build_num - if: ${{ inputs.is_beta }} - id: set_ref - run: | - if [ "${{ inputs.is_shared_build_num }}" == "true" ]; then - echo "ref=main" >> $GITHUB_ENV - else - echo "ref=${{ inputs.release_tag }}" >> $GITHUB_ENV - fi - - - name: Checkout SideStore/beta-build-num repo - if: ${{ inputs.is_beta }} - uses: actions/checkout@v4 - with: - repository: 'SideStore/beta-build-num' - ref: ${{ env.ref }} - token: ${{ secrets.CROSS_REPO_PUSH_KEY }} - path: 'SideStore/beta-build-num' - - - name: Copy build_number.txt to repo root - if: ${{ inputs.is_beta }} - run: | - cp SideStore/beta-build-num/build_number.txt . - echo "cat build_number.txt" - cat build_number.txt - - - name: Echo Build.xcconfig - run: | - echo "cat Build.xcconfig" - cat Build.xcconfig - - - name: Set Release Channel info for build number bumper - id: release-channel - run: | - RELEASE_CHANNEL="${{ inputs.release_tag }}" - echo "RELEASE_CHANNEL=${RELEASE_CHANNEL}" >> $GITHUB_ENV - echo "RELEASE_CHANNEL=${RELEASE_CHANNEL}" >> $GITHUB_OUTPUT - echo "RELEASE_CHANNEL=${RELEASE_CHANNEL}" - - - - name: Increase build number for beta builds - if: ${{ inputs.is_beta }} - run: | - bash .github/workflows/increase-beta-build-num.sh - - - name: Extract MARKETING_VERSION from Build.xcconfig - id: version - run: | - version=$(grep MARKETING_VERSION Build.xcconfig | sed -e 's/MARKETING_VERSION = //g') - echo "version=$version" >> $GITHUB_OUTPUT - echo "version=$version" - - - name: Set MARKETING_VERSION - if: ${{ inputs.is_beta }} - id: marketing-version - run: | - # Extract version number (e.g., "0.6.0") - version=$(echo "${{ steps.version.outputs.version }}" | sed -E 's/^[^0-9]*([0-9]+\.[0-9]+\.[0-9]+).*/\1/') - # Extract date (YYYYMMDD) (e.g., "20250205") - date=$(echo "${{ steps.version.outputs.version }}" | sed -E 's/.*\.([0-9]{4})\.([0-9]{2})\.([0-9]{2})\..*/\1\2\3/') - # Extract build number (e.g., "2") - build_num=$(echo "${{ steps.version.outputs.version }}" | sed -E 's/.*\.([0-9]+)\+.*/\1/') - - # Combine them into the final output - MARKETING_VERSION="${version}-${date}.${build_num}+${{ needs.serialize.outputs.short-commit }}" - - echo "MARKETING_VERSION=$MARKETING_VERSION" >> $GITHUB_ENV - echo "MARKETING_VERSION=$MARKETING_VERSION" >> $GITHUB_OUTPUT - echo "MARKETING_VERSION=$MARKETING_VERSION" - - - name: Echo Updated Build.xcconfig, build_number.txt - if: ${{ inputs.is_beta }} - run: | - cat Build.xcconfig - cat build_number.txt - - - name: Setup Xcode - uses: maxim-lobanov/setup-xcode@v1.6.0 - with: - xcode-version: ${{ matrix.version }} - - - name: (Build) Restore Xcode & SwiftPM Cache (Exact match) - id: xcode-cache-restore - uses: actions/cache/restore@v3 - with: - path: | - ~/Library/Developer/Xcode/DerivedData - ~/Library/Caches/org.swift.swiftpm - key: xcode-cache-build-${{ github.ref_name }}-${{ github.sha }} - - - name: (Build) Restore Xcode & SwiftPM Cache (Last Available) - id: xcode-cache-restore-recent - uses: actions/cache/restore@v3 - with: - path: | - ~/Library/Developer/Xcode/DerivedData - ~/Library/Caches/org.swift.swiftpm - key: xcode-cache-build-${{ github.ref_name }}- - - # - name: (Build) Cache Build - # uses: irgaly/xcode-cache@v1.8.1 - # with: - # key: xcode-cache-deriveddata-build-${{ github.ref_name }}-${{ github.sha }} - # restore-keys: xcode-cache-deriveddata-build-${{ github.ref_name }}- - # swiftpm-cache-key: xcode-cache-sourcedata-build-${{ github.ref_name }}-${{ github.sha }} - # swiftpm-cache-restore-keys: | - # xcode-cache-sourcedata-build-${{ github.ref_name }}- - - - name: (Build) Clean previous build artifacts - # using 'tee' to intercept stdout and log for detailed build-log - run: | - make clean - mkdir -p build/logs - - - name: (Build) List Files and derived data - if: always() - run: | - echo ">>>>>>>>> Workdir <<<<<<<<<<" - ls -la . - echo "" - - echo ">>>>>>>>> SideStore <<<<<<<<<<" - find SideStore -maxdepth 2 -exec ls -ld {} + || true # List contents if directory exists - echo "" - - echo ">>>>>>>>> Dependencies <<<<<<<<<<" - find Dependencies -maxdepth 2 -exec ls -ld {} + || true # List contents if directory exists - echo "" - - echo ">>>>>>>>> Xcode-Derived-Data <<<<<<<<<<" - ls -la ~/Library/Developer/Xcode/DerivedData || true # List contents if directory exists - echo "" - - - name: Set BundleID Suffix for Sidestore build - run: | - echo "BUNDLE_ID_SUFFIX=${{ inputs.bundle_id_suffix }}" >> $GITHUB_ENV - - - - name: Build SideStore.xcarchive - # using 'tee' to intercept stdout and log for detailed build-log - run: | - NSUnbufferedIO=YES make -B build 2>&1 | tee -a build/logs/build.log | xcbeautify --renderer github-actions && exit ${PIPESTATUS[0]} - - - name: Fakesign app - run: make fakesign | tee -a build/logs/build.log - - - name: Convert to IPA - run: make ipa | tee -a build/logs/build.log - - - name: (Build) Save Xcode & SwiftPM Cache - id: cache-save - if: ${{ steps.xcode-cache-restore.outputs.cache-hit != 'true' }} - uses: actions/cache/save@v3 - with: - path: | - ~/Library/Developer/Xcode/DerivedData - ~/Library/Caches/org.swift.swiftpm - key: xcode-cache-build-${{ github.ref_name }}-${{ github.sha }} - - - name: (Build) List Files and Build artifacts - run: | - echo ">>>>>>>>> Workdir <<<<<<<<<<" - ls -la . - echo "" - - echo ">>>>>>>>> Build <<<<<<<<<<" - find build -maxdepth 3 -exec ls -ld {} + || true # List contents if directory exists - echo "" - - echo ">>>>>>>>> SideStore <<<<<<<<<<" - find SideStore -maxdepth 3 -exec ls -ld {} + || true # List contents if directory exists - echo "" - - echo ">>>>>>>>> SideStore.xcarchive <<<<<<<<<<" - find SideStore.xcarchive -maxdepth 3 -exec ls -ld {} + || true # List contents if directory exists - echo "" - - echo ">>>>>>>>> Xcode-Derived-Data <<<<<<<<<<" - ls -la ~/Library/Developer/Xcode/DerivedData || true # List contents if directory exists - echo "" - - - name: Encrypt build-logs for upload - id: encrypt-build-log - run: | - DEFAULT_BUILD_LOG_PASSWORD=12345 - - BUILD_LOG_ZIP_PASSWORD=${{ secrets.BUILD_LOG_ZIP_PASSWORD }} - BUILD_LOG_ZIP_PASSWORD=${BUILD_LOG_ZIP_PASSWORD:-$DEFAULT_BUILD_LOG_PASSWORD} - - if [ "$BUILD_LOG_ZIP_PASSWORD" == "$DEFAULT_BUILD_LOG_PASSWORD" ]; then - echo "Warning: BUILD_LOG_ZIP_PASSWORD is not set. Defaulting to '${DEFAULT_BUILD_LOG_PASSWORD}'." - fi - - pushd build/logs && zip -e -P "$BUILD_LOG_ZIP_PASSWORD" ../../encrypted-build-logs.zip * || popd - echo "::set-output name=encrypted::true" - - - name: Upload encrypted-build-logs.zip - id: attach-encrypted-build-log - if: ${{ always() && steps.encrypt-build-log.outputs.encrypted == 'true' }} - uses: actions/upload-artifact@v4 - with: - name: encrypted-build-logs-${{ steps.version.outputs.version }}.zip - path: encrypted-build-logs.zip - - - name: Upload SideStore.ipa Artifact - uses: actions/upload-artifact@v4 - with: - name: SideStore-${{ steps.version.outputs.version }}.ipa - path: SideStore.ipa - - - name: Zip dSYMs - run: zip -r -9 ./SideStore.dSYMs.zip ./SideStore.xcarchive/dSYMs - - - name: Upload *.dSYM Artifact - uses: actions/upload-artifact@v4 - with: - name: SideStore-${{ steps.version.outputs.version }}-dSYMs.zip - path: SideStore.dSYMs.zip - - - name: Keep rolling the build numbers for each successful build - if: ${{ inputs.is_beta }} - run: | - pushd SideStore/beta-build-num/ - - echo "Configure Git user (committer details)" - git config user.name "GitHub Actions" - git config user.email "github-actions@github.com" - - echo "Adding files to commit" - git add --verbose build_number.txt - git commit -m " - updated for ${{ inputs.release_tag }} - ${{ needs.serialize.outputs.short-commit }} deployment" || echo "No changes to commit" - - echo "Pushing to remote repo" - git push --verbose - popd - - - name: Get last successful commit - id: get_last_commit - run: | - # Try to get the last successful workflow run commit - LAST_SUCCESS_SHA=$(gh run list --branch "${{ github.ref_name }}" --status success --json headSha --jq '.[0].headSha') - echo "LAST_SUCCESS_SHA=$LAST_SUCCESS_SHA" >> $GITHUB_OUTPUT - echo "LAST_SUCCESS_SHA=$LAST_SUCCESS_SHA" >> $GITHUB_ENV - env: - GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} - - - name: Create release notes - run: | - LAST_SUCCESS_SHA=${{ steps.get_last_commit.outputs.LAST_SUCCESS_SHA}} - echo "Last successful commit SHA: $LAST_SUCCESS_SHA" - - FROM_COMMIT=$LAST_SUCCESS_SHA - # Check if we got a valid SHA - if [ -z "$LAST_SUCCESS_SHA" ] || [ "$LAST_SUCCESS_SHA" = "null" ]; then - echo "No successful run found, using initial commit of branch" - # Get the first commit of the branch (initial commit) - FROM_COMMIT=$(git rev-list --max-parents=0 HEAD) - fi - - python3 update_release_notes.py $FROM_COMMIT ${{ inputs.release_tag }} ${{ github.ref_name }} - # cat release-notes.md - - - name: Upload release-notes.md - uses: actions/upload-artifact@v4 - with: - name: release-notes-${{ needs.serialize.outputs.short-commit }}.md - path: release-notes.md - - - name: Upload update_release_notes.py - uses: actions/upload-artifact@v4 - with: - name: update_release_notes-${{ needs.serialize.outputs.short-commit }}.py - path: update_release_notes.py - - - name: Upload update_apps.py - uses: actions/upload-artifact@v4 - with: - name: update_apps-${{ needs.serialize.outputs.short-commit }}.py - path: update_apps.py - - tests-build: - if: ${{ vars.ENABLE_TESTS == '1' && vars.ENABLE_TESTS_BUILD == '1' }} - name: Tests-Build SideStore - ${{ inputs.release_tag }} - needs: serialize - strategy: - fail-fast: false - matrix: - include: - - os: 'macos-26' - version: '26.0' - runs-on: ${{ matrix.os }} - - steps: - - name: Checkout code - uses: actions/checkout@v4 - with: - submodules: recursive - - - name: Install dependencies - xcbeautify - run: | - brew install xcbeautify - - - name: Setup Xcode - uses: maxim-lobanov/setup-xcode@v1.6.0 - with: - xcode-version: '26.0' - - # - name: (Tests-Build) Cache Build - # uses: irgaly/xcode-cache@v1.8.1 - # with: - # key: xcode-cache-deriveddata-test-${{ github.ref_name }}-${{ github.sha }} - # # tests shouldn't restore cache unless it is same build - # # restore-keys: xcode-cache-deriveddata-test-${{ github.ref_name }}- - # swiftpm-cache-key: xcode-cache-sourcedata-test-${{ github.ref_name }}-${{ github.sha }} - # swiftpm-cache-restore-keys: | - # xcode-cache-sourcedata-test-${{ github.ref_name }}- - # delete-used-deriveddata-cache: true - - - name: (Tests-Build) Restore Xcode & SwiftPM Cache (Exact match) - id: xcode-cache-restore - uses: actions/cache/restore@v3 - with: - path: | - ~/Library/Developer/Xcode/DerivedData - ~/Library/Caches/org.swift.swiftpm - key: xcode-cache-tests-${{ github.ref_name }}-${{ github.sha }} - - - name: (Tests-Build) Restore Xcode & SwiftPM Cache (Last Available) - id: xcode-cache-restore-recent - uses: actions/cache/restore@v3 - with: - path: | - ~/Library/Developer/Xcode/DerivedData - ~/Library/Caches/org.swift.swiftpm - key: xcode-cache-tests-${{ github.ref_name }}- - - - name: Clean Derived Data (if required) - if: ${{ vars.PERFORM_CLEAN_TESTS_BUILD == '1' }} - run: | - rm -rf ~/Library/Developer/Xcode/DerivedData/ - make clean - xcodebuild clean - - - name: (Tests-Build) Clean previous build artifacts - run: | - make clean - mkdir -p build/logs - - - name: (Tests-Build) List Files and derived data - run: | - echo ">>>>>>>>> Workdir <<<<<<<<<<" - ls -la . - echo "" - - echo ">>>>>>>>> SideStore <<<<<<<<<<" - find SideStore -maxdepth 2 -exec ls -ld {} + || true # List contents if directory exists - echo "" - - echo ">>>>>>>>> Dependencies <<<<<<<<<<" - find Dependencies -maxdepth 2 -exec ls -ld {} + || true # List contents if directory exists - echo "" - - echo ">>>>>>>>> Xcode-Derived-Data <<<<<<<<<<" - ls -la ~/Library/Developer/Xcode/DerivedData || true # List contents if directory exists - echo "" - - - name: Build SideStore Tests - # using 'tee' to intercept stdout and log for detailed build-log - run: | - NSUnbufferedIO=YES make -B build-tests 2>&1 | tee -a build/logs/tests-build.log | xcbeautify --renderer github-actions && exit ${PIPESTATUS[0]} - - - name: (Tests-Build) Save Xcode & SwiftPM Cache - id: cache-save - if: ${{ steps.xcode-cache-restore.outputs.cache-hit != 'true' }} - uses: actions/cache/save@v3 - with: - path: | - ~/Library/Developer/Xcode/DerivedData - ~/Library/Caches/org.swift.swiftpm - key: xcode-cache-tests-${{ github.ref_name }}-${{ github.sha }} - - - name: (Tests-Build) List Files and Build artifacts - if: always() - run: | - echo ">>>>>>>>> Workdir <<<<<<<<<<" - ls -la . - echo "" - - echo ">>>>>>>>> Build <<<<<<<<<<" - find build -maxdepth 3 -exec ls -ld {} + || true # List contents if directory exists - echo "" - - echo ">>>>>>>>> Xcode-Derived-Data <<<<<<<<<<" - find ~/Library/Developer/Xcode/DerivedData -maxdepth 8 -exec ls -ld {} + | grep "Build/Products" >> tests-build-deriveddata.txt || true - echo "" - - - uses: actions/upload-artifact@v4 - if: always() - with: - name: tests-build-deriveddata-${{ needs.serialize.outputs.short-commit }}.txt - path: tests-build-deriveddata.txt - - - name: Encrypt tests-build-logs for upload - id: encrypt-test-log - if: always() - run: | - DEFAULT_BUILD_LOG_PASSWORD=12345 - - BUILD_LOG_ZIP_PASSWORD=${{ secrets.BUILD_LOG_ZIP_PASSWORD }} - BUILD_LOG_ZIP_PASSWORD=${BUILD_LOG_ZIP_PASSWORD:-$DEFAULT_BUILD_LOG_PASSWORD} - - if [ "$BUILD_LOG_ZIP_PASSWORD" == "$DEFAULT_BUILD_LOG_PASSWORD" ]; then - echo "Warning: BUILD_LOG_ZIP_PASSWORD is not set. Defaulting to '${DEFAULT_BUILD_LOG_PASSWORD}'." - fi - - pushd build/logs && zip -e -P "$BUILD_LOG_ZIP_PASSWORD" ../../encrypted-tests-build-logs.zip * || popd - echo "::set-output name=encrypted::true" - - - name: Upload encrypted-tests-build-logs.zip - id: attach-encrypted-test-log - if: always() && steps.encrypt-test-log.outputs.encrypted == 'true' - uses: actions/upload-artifact@v4 - with: - name: encrypted-tests-build-logs-${{ needs.serialize.outputs.short-commit }}.zip - path: encrypted-tests-build-logs.zip - - tests-run: - if: ${{ vars.ENABLE_TESTS == '1' && vars.ENABLE_TESTS_RUN == '1' }} - name: Tests-Run SideStore - ${{ inputs.release_tag }} - needs: [serialize, tests-build] - strategy: - fail-fast: false - matrix: - include: - - os: 'macos-26' - version: '26.0' - runs-on: ${{ matrix.os }} - - steps: - - name: Checkout code - uses: actions/checkout@v4 - with: - submodules: recursive - - - name: Boot Simulator async(nohup) for testing - run: | - mkdir -p build/logs - nohup make -B boot-sim-async > build/logs/tests-run.log 2>&1 & - - - name: Setup Xcode - uses: maxim-lobanov/setup-xcode@v1.6.0 - with: - xcode-version: '26.0' - - # - name: (Tests-Run) Cache Build - # uses: irgaly/xcode-cache@v1.8.1 - # with: - # # This comes from - # key: xcode-cache-deriveddata-test-${{ github.ref_name }}-${{ github.sha }} - # swiftpm-cache-key: xcode-cache-sourcedata-test-${{ github.ref_name }}-${{ github.sha }} - - - name: (Tests-Build) Restore Xcode & SwiftPM Cache (Exact match) [from tests-build job] - id: xcode-cache-restore - uses: actions/cache/restore@v3 - with: - path: | - ~/Library/Developer/Xcode/DerivedData - ~/Library/Caches/org.swift.swiftpm - key: xcode-cache-tests-${{ github.ref_name }}-${{ github.sha }} - - - name: (Tests-Run) Clean previous build artifacts - run: | - make clean - mkdir -p build/logs - - - name: (Tests-Run) List Files and derived data - run: | - echo ">>>>>>>>> Workdir <<<<<<<<<<" - ls -la . - echo "" - - echo ">>>>>>>>> SideStore <<<<<<<<<<" - find SideStore -maxdepth 2 -exec ls -ld {} + || true # List contents if directory exists - echo "" - - echo ">>>>>>>>> Dependencies <<<<<<<<<<" - find Dependencies -maxdepth 2 -exec ls -ld {} + || true # List contents if directory exists - echo "" - - echo ">>>>>>>>> Xcode-Derived-Data <<<<<<<<<<" - find ~/Library/Developer/Xcode/DerivedData -maxdepth 8 -exec ls -ld {} + | grep "Build/Products" >> tests-run-deriveddata.txt || true - echo "" - - - uses: actions/upload-artifact@v4 - if: always() - with: - name: tests-run-deriveddata-${{ needs.serialize.outputs.short-commit }}.txt - path: tests-run-deriveddata.txt - - # we expect simulator to have been booted by now, so exit otherwise - - name: Simulator Boot Check - run: | - mkdir -p build/logs - make -B sim-boot-check | tee -a build/logs/tests-run.log - exit ${PIPESTATUS[0]} - - - name: Start Recording UI tests (if DEBUG_RECORD_TESTS is set to 1) - if: ${{ vars.DEBUG_RECORD_TESTS == '1' }} - run: | - nohup xcrun simctl io booted recordVideo -f tests-recording.mp4 --codec h264 tests-recording.log 2>&1 & - RECORD_PID=$! - echo "RECORD_PID=$RECORD_PID" >> $GITHUB_ENV - - - name: Run SideStore Tests - # using 'tee' to intercept stdout and log for detailed build-log - run: | - make run-tests 2>&1 | tee -a build/logs/tests-run.log && exit ${PIPESTATUS[0]} - # NSUnbufferedIO=YES make -B run-tests 2>&1 | tee build/logs/tests-run.log | xcpretty -r junit --output ./build/tests/test-results.xml && exit ${PIPESTATUS[0]} - - - name: Stop Recording tests - if: ${{ always() && env.RECORD_PID != '' }} - run: | - kill -INT ${{ env.RECORD_PID }} - - - name: (Tests-Run) List Files and Build artifacts - if: always() - run: | - echo ">>>>>>>>> Workdir <<<<<<<<<<" - ls -la . - echo "" - - echo ">>>>>>>>> Build <<<<<<<<<<" - find build -maxdepth 3 -exec ls -ld {} + || true # List contents if directory exists - echo "" - - - name: Encrypt tests-run-logs for upload - id: encrypt-test-log - if: always() - run: | - DEFAULT_BUILD_LOG_PASSWORD=12345 - - BUILD_LOG_ZIP_PASSWORD=${{ secrets.BUILD_LOG_ZIP_PASSWORD }} - BUILD_LOG_ZIP_PASSWORD=${BUILD_LOG_ZIP_PASSWORD:-$DEFAULT_BUILD_LOG_PASSWORD} - - if [ "$BUILD_LOG_ZIP_PASSWORD" == "$DEFAULT_BUILD_LOG_PASSWORD" ]; then - echo "Warning: BUILD_LOG_ZIP_PASSWORD is not set. Defaulting to '${DEFAULT_BUILD_LOG_PASSWORD}'." - fi - - pushd build/logs && zip -e -P "$BUILD_LOG_ZIP_PASSWORD" ../../encrypted-tests-run-logs.zip * || popd - echo "::set-output name=encrypted::true" - - - name: Upload encrypted-tests-run-logs.zip - id: attach-encrypted-test-log - if: always() && steps.encrypt-test-log.outputs.encrypted == 'true' - uses: actions/upload-artifact@v4 - with: - name: encrypted-tests-run-logs-${{ needs.serialize.outputs.short-commit }}.zip - path: encrypted-tests-run-logs.zip - - - name: Print tests-recording.log contents (if exists) - if: ${{ always() && env.RECORD_PID != '' }} - run: | - if [ -f tests-recording.log ]; then - echo "tests-recording.log found. Its contents:" - cat tests-recording.log - else - echo "tests-recording.log not found." - fi - - - name: Check for tests-recording.mp4 presence - id: check-recording - if: ${{ always() && env.RECORD_PID != '' }} - run: | - if [ -f tests-recording.mp4 ]; then - echo "::set-output name=found::true" - echo "tests-recording.mp4 found." - else - echo "tests-recording.mp4 not found, skipping upload." - echo "::set-output name=found::false" - fi - - - name: Upload tests-recording.mp4 - id: upload-recording - if: ${{ always() && steps.check-recording.outputs.found == 'true' }} - uses: actions/upload-artifact@v4 - with: - name: tests-recording-${{ needs.serialize.outputs.short-commit }}.mp4 - path: tests-recording.mp4 - - - name: Zip test-results - run: zip -r -9 ./test-results.zip ./build/tests - - - name: Upload Test Artifacts - uses: actions/upload-artifact@v4 - with: - name: test-results-${{ needs.serialize.outputs.short-commit }}.zip - path: test-results.zip - - deploy: - name: Deploy SideStore - ${{ inputs.release_tag }} - runs-on: macos-15 - # needs: [serialize, build] - needs: [serialize, build, tests-build, tests-run] - steps: - - name: Download IPA artifact - uses: actions/download-artifact@v4 - with: - name: SideStore-${{ needs.build.outputs.version }}.ipa - - - name: Download dSYM artifact - uses: actions/download-artifact@v4 - with: - name: SideStore-${{ needs.build.outputs.version }}-dSYMs.zip - - - name: Download encrypted-build-logs artifact - uses: actions/download-artifact@v4 - with: - name: encrypted-build-logs-${{ needs.build.outputs.version }}.zip - - - name: Download encrypted-tests-build-logs artifact - if: ${{ vars.ENABLE_TESTS == '1' && vars.ENABLE_TESTS_BUILD == '1' }} - uses: actions/download-artifact@v4 - with: - name: encrypted-tests-build-logs-${{ needs.serialize.outputs.short-commit }}.zip - - - name: Download encrypted-tests-run-logs artifact - if: ${{ vars.ENABLE_TESTS == '1' && vars.ENABLE_TESTS_RUN == '1' }} - uses: actions/download-artifact@v4 - with: - name: encrypted-tests-run-logs-${{ needs.serialize.outputs.short-commit }}.zip - - - name: Download tests-recording artifact - if: ${{ vars.ENABLE_TESTS == '1' && vars.ENABLE_TESTS_RUN == '1' }} - uses: actions/download-artifact@v4 - with: - name: tests-recording-${{ needs.serialize.outputs.short-commit }}.mp4 - - - name: Download test-results artifact - if: ${{ vars.ENABLE_TESTS == '1' && vars.ENABLE_TESTS_RUN == '1' }} - uses: actions/download-artifact@v4 - with: - name: test-results-${{ needs.serialize.outputs.short-commit }}.zip - - - name: Download release-notes.md - uses: actions/download-artifact@v4 - with: - name: release-notes-${{ needs.serialize.outputs.short-commit }}.md - - - name: Download update_release_notes.py - uses: actions/download-artifact@v4 - with: - name: update_release_notes-${{ needs.serialize.outputs.short-commit }}.py - - - name: Download update_apps.py - uses: actions/download-artifact@v4 - with: - name: update_apps-${{ needs.serialize.outputs.short-commit }}.py - - - name: Read release notes - id: release_notes - run: | - CONTENT=$(python3 update_release_notes.py --retrieve ${{ inputs.release_tag }}) - echo "content<> $GITHUB_OUTPUT - echo "$CONTENT" >> $GITHUB_OUTPUT - echo "EOF" >> $GITHUB_OUTPUT - - - name: List files before upload - run: | - echo ">>>>>>>>> Workdir <<<<<<<<<<" - find . -maxdepth 4 -exec ls -ld {} + || true # List contents if directory exists - echo "" - - - name: Get current date - id: date - run: echo "date=$(date -u +'%c')" >> $GITHUB_OUTPUT - - - name: Get current date in AltStore date form - id: date_altstore - run: echo "date=$(date -u +'%Y-%m-%d')" >> $GITHUB_OUTPUT - - - name: List files to upload - id: list_uploads - run: | - FILES="SideStore.ipa SideStore.dSYMs.zip encrypted-build-logs.zip" - - if [[ "${{ vars.ENABLE_TESTS }}" == "1" && "${{ vars.ENABLE_TESTS_BUILD }}" == "1" ]]; then - FILES="$FILES encrypted-tests-build-logs.zip" - fi - - if [[ "${{ vars.ENABLE_TESTS }}" == "1" && "${{ vars.ENABLE_TESTS_RUN }}" == "1" ]]; then - FILES="$FILES encrypted-tests-run-logs.zip test-results.zip tests-recording.mp4" - fi - - echo "Final upload list:" - for f in $FILES; do - if [[ -f "$f" ]]; then - echo " ✓ $f" - else - echo " - $f (missing)" - fi - done - - echo "files=$FILES" >> $GITHUB_OUTPUT - - - name: Upload to releases - uses: IsaacShelton/update-existing-release@v1.3.1 - with: - token: ${{ secrets.GITHUB_TOKEN }} - release: ${{ inputs.release_name }} - tag: ${{ inputs.release_tag }} - prerelease: ${{ inputs.is_beta }} - files: ${{ steps.list_uploads.outputs.files }} - body: | - This is an ⚠️ **EXPERIMENTAL** ⚠️ ${{ inputs.release_name }} build for commit [${{ github.sha }}](https://github.com/${{ github.repository }}/commit/${{ github.sha }}). - - ${{ inputs.release_name }} builds are **extremely experimental builds only meant to be used by developers and beta testers. They often contain bugs and experimental features. Use at your own risk!** - - If you want to try out new features early but want a lower chance of bugs, you can look at [SideStore ${{ inputs.upstream_name }}](https://github.com/${{ github.repository }}/releases?q=${{ inputs.upstream_tag }}). - - ## Build Info - - Built at (UTC): `${{ steps.date.outputs.date }}` - Built at (UTC date): `${{ steps.date_altstore.outputs.date }}` - Commit SHA: `${{ github.sha }}` - Version: `${{ needs.build.outputs.version }}` - - ${{ steps.release_notes.outputs.content }} - - - name: Get formatted date - run: | - FORMATTED_DATE=$(date -u +"%Y-%m-%dT%H:%M:%SZ") - echo "Formatted date: $FORMATTED_DATE" - echo "FORMATTED_DATE=$FORMATTED_DATE" >> $GITHUB_ENV - - - name: Get size of IPA in bytes (macOS/Linux) - run: | - if [[ "$(uname)" == "Darwin" ]]; then - # macOS - IPA_SIZE=$(stat -f %z SideStore.ipa) - else - # Linux - IPA_SIZE=$(stat -c %s SideStore.ipa) - fi - echo "IPA size in bytes: $IPA_SIZE" - echo "IPA_SIZE=$IPA_SIZE" >> $GITHUB_ENV - - - name: Compute SHA-256 of IPA - run: | - SHA256_HASH=$(shasum -a 256 SideStore.ipa | awk '{ print $1 }') - echo "SHA-256 Hash: $SHA256_HASH" - echo "SHA256_HASH=$SHA256_HASH" >> $GITHUB_ENV - - - name: Set Release Info variables - run: | - # Format localized description - LOCALIZED_DESCRIPTION=$(cat <> $GITHUB_ENV - echo "BUNDLE_IDENTIFIER=${{ inputs.bundle_id }}" >> $GITHUB_ENV - echo "VERSION_IPA=${{ needs.build.outputs.marketing-version }}" >> $GITHUB_ENV - echo "VERSION_DATE=$FORMATTED_DATE" >> $GITHUB_ENV - echo "RELEASE_CHANNEL=${{ needs.build.outputs.release-channel }}" >> $GITHUB_ENV - echo "SIZE=$IPA_SIZE" >> $GITHUB_ENV - echo "SHA256=$SHA256_HASH" >> $GITHUB_ENV - echo "DOWNLOAD_URL=https://github.com/SideStore/SideStore/releases/download/${{ inputs.release_tag }}/SideStore.ipa" >> $GITHUB_ENV - - # multiline strings - echo "LOCALIZED_DESCRIPTION<> $GITHUB_ENV - echo "$LOCALIZED_DESCRIPTION" >> $GITHUB_ENV - echo "EOF" >> $GITHUB_ENV - - - name: Check if Publish updates is set - id: check_publish - run: | - echo "Publish updates to source.json = ${{ inputs.publish }}" - - - name: Checkout SideStore/apps-v2.json - if: ${{ inputs.is_beta && inputs.publish }} - uses: actions/checkout@v4 - with: - repository: 'SideStore/apps-v2.json' - ref: 'main' # this branch is shared by all beta builds, so beta build workflows are serialized - token: ${{ secrets.CROSS_REPO_PUSH_KEY }} - path: 'SideStore/apps-v2.json' - - # for stable builds, let the user manually edit the source.json - - name: Publish to SideStore/apps-v2.json - if: ${{ inputs.is_beta && inputs.publish }} - id: publish-release - run: | - # Copy and execute the update script - pushd SideStore/apps-v2.json/ - - # Configure Git user (committer details) - git config user.name "GitHub Actions" - git config user.email "github-actions@github.com" - - # update the source.json - python3 ../../update_apps.py "./_includes/source.json" - - # Commit changes and push using SSH - git add --verbose ./_includes/source.json - git commit -m " - updated for ${{ needs.serialize.outputs.short-commit }} deployment" || echo "No changes to commit" - - git push --verbose - popd From 85427ecbc64c06e39630cb7af004c8e75bdfe470 Mon Sep 17 00:00:00 2001 From: mahee96 <47920326+mahee96@users.noreply.github.com> Date: Sun, 16 Nov 2025 01:25:01 +0530 Subject: [PATCH 06/11] CI: deploy - added filtering to upload only available files --- .github/workflows/sidestore-deploy.yml | 31 +++++++++++++++++++++++++- 1 file changed, 30 insertions(+), 1 deletion(-) diff --git a/.github/workflows/sidestore-deploy.yml b/.github/workflows/sidestore-deploy.yml index e8a358f0..c755f07b 100644 --- a/.github/workflows/sidestore-deploy.yml +++ b/.github/workflows/sidestore-deploy.yml @@ -116,6 +116,35 @@ jobs: run: echo "date=$(date -u +'%Y-%m-%d')" >> $GITHUB_OUTPUT shell: bash + + - name: List files to upload + id: list_uploads + run: | + echo ">>>>>>>>> Workdir <<<<<<<<<<" + find . -maxdepth 4 -exec ls -ld {} + || true # List contents if directory exists + echo "" + + FILES="SideStore.ipa SideStore.dSYMs.zip encrypted-build-logs.zip" + + if [[ "${{ vars.ENABLE_TESTS }}" == "1" && "${{ vars.ENABLE_TESTS_BUILD }}" == "1" ]]; then + FILES="$FILES encrypted-tests-build-logs.zip" + fi + + if [[ "${{ vars.ENABLE_TESTS }}" == "1" && "${{ vars.ENABLE_TESTS_RUN }}" == "1" ]]; then + FILES="$FILES encrypted-tests-run-logs.zip test-results.zip tests-recording.mp4" + fi + + echo "Final upload list:" + for f in $FILES; do + if [[ -f "$f" ]]; then + echo " ✓ $f" + else + echo " - $f (missing)" + fi + done + + echo "files=$FILES" >> $GITHUB_OUTPUT + - name: Upload to releases uses: IsaacShelton/update-existing-release@v1.3.1 with: @@ -123,7 +152,7 @@ jobs: release: ${{ inputs.release_name }} tag: ${{ inputs.release_tag }} prerelease: ${{ inputs.is_beta }} - files: SideStore.ipa SideStore.dSYMs.zip encrypted-build-logs.zip encrypted-tests-build-logs.zip encrypted-tests-run-logs.zip test-results.zip tests-recording.mp4 + files: ${{ steps.list_uploads.outputs.files }} body: | This is an ⚠️ **EXPERIMENTAL** ⚠️ ${{ inputs.release_name }} build for commit [${{ github.sha }}](https://github.com/${{ github.repository }}/commit/${{ github.sha }}). From e19b147962f1883d4bc06f8d8fcbc9b952dd9bbf Mon Sep 17 00:00:00 2001 From: mahee96 <47920326+mahee96@users.noreply.github.com> Date: Sun, 16 Nov 2025 03:00:43 +0530 Subject: [PATCH 07/11] EMP: added back em_proxy as it was in 0.6.1 --- .gitmodules | 4 + AltStore.xcodeproj/project.pbxproj | 173 ++++++++- .../EmotionalDamage/EmotionalDamage.swift | 18 + SideStore/em_proxy | 1 + SideStore/em_proxy.xcodeproj/project.pbxproj | 343 ++++++++++++++++++ .../xcshareddata/xcschemes/em_proxy.xcscheme | 67 ++++ .../xcshareddata/xcschemes/minimuxer.xcscheme | 67 ++++ 7 files changed, 671 insertions(+), 2 deletions(-) create mode 100644 SideStore/EmotionalDamage/EmotionalDamage.swift create mode 160000 SideStore/em_proxy create mode 100644 SideStore/em_proxy.xcodeproj/project.pbxproj create mode 100644 SideStore/em_proxy.xcodeproj/xcshareddata/xcschemes/em_proxy.xcscheme create mode 100644 SideStore/minimuxer.xcodeproj/xcshareddata/xcschemes/minimuxer.xcscheme diff --git a/.gitmodules b/.gitmodules index d0c3bb12..d182f26f 100644 --- a/.gitmodules +++ b/.gitmodules @@ -50,6 +50,10 @@ path = SideStore/minimuxer url = https://github.com/SideStore/minimuxer branch = master +[submodule "SideStore/em_proxy"] + path = SideStore/em_proxy + url = https://github.com/SideStore/em_proxy + branch = master [submodule "SideStore/libfragmentzip"] path = SideStore/libfragmentzip url = https://github.com/SideStore/libfragmentzip diff --git a/AltStore.xcodeproj/project.pbxproj b/AltStore.xcodeproj/project.pbxproj index d0295bb0..09158c46 100644 --- a/AltStore.xcodeproj/project.pbxproj +++ b/AltStore.xcodeproj/project.pbxproj @@ -3,7 +3,7 @@ archiveVersion = 1; classes = { }; - objectVersion = 60; + objectVersion = 70; objects = { /* Begin PBXBuildFile section */ @@ -86,6 +86,8 @@ A83FE36A2EC904FD005ACE9A /* AppCenterAnalytics in Frameworks */ = {isa = PBXBuildFile; productRef = A83FE3692EC904FD005ACE9A /* AppCenterAnalytics */; }; A83FE36C2EC904FD005ACE9A /* AppCenterCrashes in Frameworks */ = {isa = PBXBuildFile; productRef = A83FE36B2EC904FD005ACE9A /* AppCenterCrashes */; }; A83FE3772EC905E3005ACE9A /* KeychainAccess in Frameworks */ = {isa = PBXBuildFile; productRef = A83FE3762EC905E3005ACE9A /* KeychainAccess */; }; + A83FE3CF2EC9219C005ACE9A /* libem_proxy_static.a in Frameworks */ = {isa = PBXBuildFile; fileRef = A83FE3CE2EC9219C005ACE9A /* libem_proxy_static.a */; }; + A83FE3D42EC92495005ACE9A /* libEmotionalDamage.a in Frameworks */ = {isa = PBXBuildFile; fileRef = A83FE3CD2EC9217F005ACE9A /* libEmotionalDamage.a */; }; A859ED5C2D1EE827003DCC58 /* OpenSSL.xcframework in Frameworks */ = {isa = PBXBuildFile; fileRef = A859ED5B2D1EE80D003DCC58 /* OpenSSL.xcframework */; }; A859ED5D2D1EE827003DCC58 /* OpenSSL.xcframework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = A859ED5B2D1EE80D003DCC58 /* OpenSSL.xcframework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; A86315DF2D3EB2DE0048FA40 /* ErrorProcessing.swift in Sources */ = {isa = PBXBuildFile; fileRef = A86315DE2D3EB2D80048FA40 /* ErrorProcessing.swift */; }; @@ -480,6 +482,13 @@ remoteGlobalIDString = CA609C732349A560B9642892; remoteInfo = "minimuxer-staticlib"; }; + A83FE3D52EC92495005ACE9A /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = BFD247622284B9A500981D42 /* Project object */; + proxyType = 1; + remoteGlobalIDString = A83FE3C22EC9217F005ACE9A; + remoteInfo = EmotionalDamage; + }; A8A543282D04F0C100D72399 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = B343F886295F7F9B002B1159 /* libfragmentzip.xcodeproj */; @@ -668,6 +677,10 @@ A81BF9E12D84C9E900768940 /* AltStore 17_1.xcdatamodel */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcdatamodel; path = "AltStore 17_1.xcdatamodel"; sourceTree = ""; }; A81BF9E22D84CB0C00768940 /* AppPermission17To17_1MigrationPolicy.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppPermission17To17_1MigrationPolicy.swift; sourceTree = ""; }; A81BF9E32D84CB0C00768940 /* Source17To17_1MigrationPolicy.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Source17To17_1MigrationPolicy.swift; sourceTree = ""; }; + A83FE3A32EC91F35005ACE9A /* em_proxy.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; path = em_proxy.xcodeproj; sourceTree = ""; }; + A83FE3CD2EC9217F005ACE9A /* libEmotionalDamage.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libEmotionalDamage.a; sourceTree = BUILT_PRODUCTS_DIR; }; + A83FE3CE2EC9219C005ACE9A /* libem_proxy_static.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; path = libem_proxy_static.a; sourceTree = BUILT_PRODUCTS_DIR; }; + A83FE3D02EC921B2005ACE9A /* libresolv.tbd */ = {isa = PBXFileReference; lastKnownFileType = "sourcecode.text-based-dylib-definition"; name = libresolv.tbd; path = Platforms/MacOSX.platform/Developer/SDKs/MacOSX26.1.sdk/usr/lib/libresolv.tbd; sourceTree = DEVELOPER_DIR; }; A859ED5B2D1EE80D003DCC58 /* OpenSSL.xcframework */ = {isa = PBXFileReference; expectedSignature = "AppleDeveloperProgram:67RAULRX93:Marcin Krzyzanowski"; lastKnownFileType = wrapper.xcframework; name = OpenSSL.xcframework; path = SideStore/AltSign/Dependencies/OpenSSL/Frameworks/OpenSSL.xcframework; sourceTree = ""; }; A85ACB8E2D1F31C400AA3DE7 /* AltBackup.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = AltBackup.xcconfig; sourceTree = ""; }; A85ACB8F2D1F31C400AA3DE7 /* AltStore.debug.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = AltStore.debug.xcconfig; sourceTree = ""; }; @@ -1064,6 +1077,44 @@ D5FD4ECA2A9532960097BEE8 /* DatabaseManager+Async.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "DatabaseManager+Async.swift"; sourceTree = ""; }; /* End PBXFileReference section */ +/* Begin PBXFileSystemSynchronizedBuildFileExceptionSet section */ + A83FE3D22EC9229A005ACE9A /* PBXFileSystemSynchronizedBuildFileExceptionSet */ = { + isa = PBXFileSystemSynchronizedBuildFileExceptionSet; + membershipExceptions = ( + EmotionalDamage.swift, + ); + target = A83FE3C22EC9217F005ACE9A /* EmotionalDamage */; + }; + A83FE3D32EC922F8005ACE9A /* PBXFileSystemSynchronizedBuildFileExceptionSet */ = { + isa = PBXFileSystemSynchronizedBuildFileExceptionSet; + membershipExceptions = ( + .github/CODEOWNERS, + .github/workflows/build.yml, + .gitignore, + build.rs, + Cargo.toml, + cbindgen.toml, + keys/client_privatekey, + keys/client_publickey, + keys/emp.conf, + keys/README.md, + keys/server_privatekey, + keys/server_publickey_client, + "libem_proxy-ios.a", + LICENSE, + README.md, + src/lib.rs, + src/run.rs, + ); + target = BFD247692284B9A500981D42 /* SideStore */; + }; +/* End PBXFileSystemSynchronizedBuildFileExceptionSet section */ + +/* Begin PBXFileSystemSynchronizedRootGroup section */ + A83FE3A22EC91F35005ACE9A /* em_proxy */ = {isa = PBXFileSystemSynchronizedRootGroup; exceptions = (A83FE3D32EC922F8005ACE9A /* PBXFileSystemSynchronizedBuildFileExceptionSet */, ); explicitFileTypes = {}; explicitFolders = (); path = em_proxy; sourceTree = ""; }; + A83FE3A52EC91F35005ACE9A /* EmotionalDamage */ = {isa = PBXFileSystemSynchronizedRootGroup; exceptions = (A83FE3D22EC9229A005ACE9A /* PBXFileSystemSynchronizedBuildFileExceptionSet */, ); explicitFileTypes = {}; explicitFolders = (); path = EmotionalDamage; sourceTree = ""; }; +/* End PBXFileSystemSynchronizedRootGroup section */ + /* Begin PBXFrameworksBuildPhase section */ 191E5FA8290A5D92001A3B7C /* Frameworks */ = { isa = PBXFrameworksBuildPhase; @@ -1087,6 +1138,14 @@ ); runOnlyForDeploymentPostprocessing = 0; }; + A83FE3C82EC9217F005ACE9A /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + A83FE3CF2EC9219C005ACE9A /* libem_proxy_static.a in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; A8E2DB1E2D684CBD009E5D31 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; @@ -1129,6 +1188,7 @@ buildActionMask = 2147483647; files = ( A8C6D5172D1EE95B00DF01F1 /* OpenSSL.xcframework in Frameworks */, + A83FE3D42EC92495005ACE9A /* libEmotionalDamage.a in Frameworks */, A83FE36C2EC904FD005ACE9A /* AppCenterCrashes in Frameworks */, A8A543302D04F14400D72399 /* libfragmentzip.a in Frameworks */, A8B646012D70C23E00125819 /* MarkdownKit in Frameworks */, @@ -1458,6 +1518,9 @@ 0E214ADD2E6DD75200B3D63D /* SideStoreDebug.entitlements */, A8B645F82D70C0DD00125819 /* Views */, A8E2DB352D6850A9009E5D31 /* Tests */, + A83FE3A22EC91F35005ACE9A /* em_proxy */, + A83FE3A32EC91F35005ACE9A /* em_proxy.xcodeproj */, + A83FE3A52EC91F35005ACE9A /* EmotionalDamage */, A8F66C5C2D04D433009689E6 /* minimuxer */, A8F66C602D04D464009689E6 /* minimuxer.xcodeproj */, B343F886295F7F9B002B1159 /* libfragmentzip.xcodeproj */, @@ -2016,6 +2079,7 @@ D586D39828EF58B0000E101F /* AltTests.xctest */, A8E2DB212D684CBD009E5D31 /* UITests.xctest */, A81A8CC52D68BA610086C96F /* DataStructureTests.xctest */, + A83FE3CD2EC9217F005ACE9A /* libEmotionalDamage.a */, ); name = Products; sourceTree = ""; @@ -2058,6 +2122,8 @@ BFD247852284BB3300981D42 /* Frameworks */ = { isa = PBXGroup; children = ( + A83FE3D02EC921B2005ACE9A /* libresolv.tbd */, + A83FE3CE2EC9219C005ACE9A /* libem_proxy_static.a */, 0ED4AEC22E6DD9FC0039E2C0 /* KeychainAccess.framework */, 0ED4AEBC2E6DD9CE0039E2C0 /* KeychainAccess.framework */, A859ED5B2D1EE80D003DCC58 /* OpenSSL.xcframework */, @@ -2487,6 +2553,22 @@ productReference = A81A8CC52D68BA610086C96F /* DataStructureTests.xctest */; productType = "com.apple.product-type.bundle.unit-test"; }; + A83FE3C22EC9217F005ACE9A /* EmotionalDamage */ = { + isa = PBXNativeTarget; + buildConfigurationList = A83FE3CA2EC9217F005ACE9A /* Build configuration list for PBXNativeTarget "EmotionalDamage" */; + buildPhases = ( + A83FE3C52EC9217F005ACE9A /* Sources */, + A83FE3C82EC9217F005ACE9A /* Frameworks */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = EmotionalDamage; + productName = minimuxer; + productReference = A83FE3CD2EC9217F005ACE9A /* libEmotionalDamage.a */; + productType = "com.apple.product-type.library.static"; + }; A8E2DB202D684CBD009E5D31 /* UITests */ = { isa = PBXNativeTarget; buildConfigurationList = A8E2DB292D684CBD009E5D31 /* Build configuration list for PBXNativeTarget "UITests" */; @@ -2601,6 +2683,11 @@ 191E5FB3290A5D9B001A3B7C /* PBXTargetDependency */, BF66EE842501AE50007EE018 /* PBXTargetDependency */, BF989176250AABF4002ACF50 /* PBXTargetDependency */, + A83FE3D62EC92495005ACE9A /* PBXTargetDependency */, + ); + fileSystemSynchronizedGroups = ( + A83FE3A22EC91F35005ACE9A /* em_proxy */, + A83FE3A52EC91F35005ACE9A /* EmotionalDamage */, ); name = SideStore; productName = AltStore; @@ -2695,6 +2782,7 @@ 191E5FAA290A5D92001A3B7C /* minimuxer */, A8E2DB202D684CBD009E5D31 /* UITests */, A81A8CC42D68BA610086C96F /* DataStructureTests */, + A83FE3C22EC9217F005ACE9A /* EmotionalDamage */, ); }; /* End PBXProject section */ @@ -2825,7 +2913,7 @@ ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "bash ./SideStore/fetch-prebuilt.sh minimuxer\n"; + shellScript = "bash ./SideStore/fetch-prebuilt.sh minimuxer em_proxy\n"; }; A8E00D3F2D0C9C6D000DD2C7 /* Run Script */ = { isa = PBXShellScriptBuildPhase; @@ -2870,6 +2958,13 @@ ); runOnlyForDeploymentPostprocessing = 0; }; + A83FE3C52EC9217F005ACE9A /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; A8E2DB1D2D684CBD009E5D31 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; @@ -3275,6 +3370,11 @@ name = "minimuxer-staticlib"; targetProxy = A809F6A02D04D7CB00F0F0F3 /* PBXContainerItemProxy */; }; + A83FE3D62EC92495005ACE9A /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = A83FE3C22EC9217F005ACE9A /* EmotionalDamage */; + targetProxy = A83FE3D52EC92495005ACE9A /* PBXContainerItemProxy */; + }; A8E2DB282D684CBD009E5D31 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = BFD247692284B9A500981D42 /* SideStore */; @@ -3436,6 +3536,64 @@ }; name = Release; }; + A83FE3CB2EC9217F005ACE9A /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + CLANG_CXX_LANGUAGE_STANDARD = "gnu++20"; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = "$(inherited)"; + CODE_SIGN_STYLE = Automatic; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + DEVELOPMENT_TEAM = "$(DEVELOPMENT_TEAM)"; + IPHONEOS_DEPLOYMENT_TARGET = 15.0; + LD_WARN_DUPLICATE_LIBRARIES = YES; + LD_WARN_UNUSED_DYLIBS = YES; + LIBRARY_SEARCH_PATHS = ( + "$(inherited)", + "$(PROJECT_DIR)/SideStore/em_proxy", + ); + MACOSX_DEPLOYMENT_TARGET = "$(RECOMMENDED_MACOSX_DEPLOYMENT_TARGET)"; + OTHER_LDFLAGS = ( + "-ObjC", + "$(inherited)", + ); + PRODUCT_NAME = "$(TARGET_NAME)"; + SKIP_INSTALL = YES; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; + SWIFT_OBJC_BRIDGING_HEADER = SideStore/em_proxy/em_proxy.h; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = Debug; + }; + A83FE3CC2EC9217F005ACE9A /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + CLANG_CXX_LANGUAGE_STANDARD = "gnu++20"; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = "$(inherited)"; + CODE_SIGN_STYLE = Automatic; + DEVELOPMENT_TEAM = "$(DEVELOPMENT_TEAM)"; + IPHONEOS_DEPLOYMENT_TARGET = 15.0; + LD_WARN_DUPLICATE_LIBRARIES = YES; + LD_WARN_UNUSED_DYLIBS = YES; + LIBRARY_SEARCH_PATHS = ( + "$(inherited)", + "$(PROJECT_DIR)/SideStore/em_proxy", + ); + MACOSX_DEPLOYMENT_TARGET = "$(RECOMMENDED_MACOSX_DEPLOYMENT_TARGET)"; + OTHER_LDFLAGS = ( + "-ObjC", + "$(inherited)", + ); + PRODUCT_NAME = "$(TARGET_NAME)"; + SKIP_INSTALL = YES; + SWIFT_OBJC_BRIDGING_HEADER = SideStore/em_proxy/em_proxy.h; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = Release; + }; A8E2DB2A2D684CBD009E5D31 /* Debug */ = { isa = XCBuildConfiguration; baseConfigurationReference = A8E2DB2C2D684D39009E5D31 /* UITests.xcconfig */; @@ -3942,6 +4100,7 @@ "$(inherited)", "$(PROJECT_DIR)/SideStore/libfragmentzip", "$(PROJECT_DIR)/Dependencies/libcurl", + "$(PROJECT_DIR)/SideStore/em_proxy", ); LLVM_LTO = YES_THIN; MARKETING_VERSION = "$(inherited)"; @@ -3988,6 +4147,7 @@ "$(inherited)", "$(PROJECT_DIR)/SideStore/libfragmentzip", "$(PROJECT_DIR)/Dependencies/libcurl", + "$(PROJECT_DIR)/SideStore/em_proxy", ); LLVM_LTO = YES_THIN; MARKETING_VERSION = "$(inherited)"; @@ -4027,6 +4187,15 @@ defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; + A83FE3CA2EC9217F005ACE9A /* Build configuration list for PBXNativeTarget "EmotionalDamage" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + A83FE3CB2EC9217F005ACE9A /* Debug */, + A83FE3CC2EC9217F005ACE9A /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; A8E2DB292D684CBD009E5D31 /* Build configuration list for PBXNativeTarget "UITests" */ = { isa = XCConfigurationList; buildConfigurations = ( diff --git a/SideStore/EmotionalDamage/EmotionalDamage.swift b/SideStore/EmotionalDamage/EmotionalDamage.swift new file mode 100644 index 00000000..163bdfc9 --- /dev/null +++ b/SideStore/EmotionalDamage/EmotionalDamage.swift @@ -0,0 +1,18 @@ +// +// EmotionalDamage.swift +// EmotionalDamage +// +// Created by Jackson Coxson on 10/26/22. +// + +import Foundation + +public func start_em_proxy(bind_addr: String) { + let host = NSString(string: bind_addr) + let host_pointer = UnsafeMutablePointer(mutating: host.utf8String) + let _ = start_emotional_damage(host_pointer) +} + +public func stop_em_proxy() { + stop_emotional_damage() +} diff --git a/SideStore/em_proxy b/SideStore/em_proxy new file mode 160000 index 00000000..24fdd245 --- /dev/null +++ b/SideStore/em_proxy @@ -0,0 +1 @@ +Subproject commit 24fdd245e62d8b2b2df1ac162770fbf95c5cd5bb diff --git a/SideStore/em_proxy.xcodeproj/project.pbxproj b/SideStore/em_proxy.xcodeproj/project.pbxproj new file mode 100644 index 00000000..2f4ab9d7 --- /dev/null +++ b/SideStore/em_proxy.xcodeproj/project.pbxproj @@ -0,0 +1,343 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 53; + objects = { + +/* Begin PBXBuildFile section */ + 9987603429A4555300818586 /* em_proxy.h in Sources */ = {isa = PBXBuildFile; fileRef = 9999259129A45319005CF020 /* em_proxy.h */; }; +/* End PBXBuildFile section */ + +/* Begin PBXBuildRule section */ + CA6094FFF692AC6C1400ACA8 /* PBXBuildRule */ = { + isa = PBXBuildRule; + compilerSpec = com.apple.compilers.proxy.script; + filePatterns = "*/em_proxy.h"; + fileType = pattern.proxy; + inputFiles = ( + ); + isEditable = 0; + name = "Cargo project build"; + outputFiles = ( + "$(OBJECT_FILE_DIR)/$(CARGO_XCODE_TARGET_ARCH)-$(EXECUTABLE_NAME)", + ); + script = "# generated with cargo-xcode 1.5.0\n# modified to use prebuilt binaries\n\nset -eu;\n\nBUILT_SRC=\"./em_proxy/$LIB_FILE_NAME.a\"\necho Generating Static lib: $BUILT_SRC\nln -f -- \"$BUILT_SRC\" \"$TARGET_BUILD_DIR/$EXECUTABLE_PATH\" || cp \"$BUILT_SRC\" \"$TARGET_BUILD_DIR/$EXECUTABLE_PATH\"\necho \"$BUILT_SRC -> $TARGET_BUILD_DIR/$EXECUTABLE_PATH\"\n\n# xcode generates dep file, but for its own path, so append our rename to it\n#DEP_FILE_SRC=\"minimuxer/target/${CARGO_XCODE_TARGET_TRIPLE}/release/${CARGO_XCODE_CARGO_DEP_FILE_NAME}\"\n#if [ -f \"$DEP_FILE_SRC\" ]; then\n# DEP_FILE_DST=\"${DERIVED_FILE_DIR}/${CARGO_XCODE_TARGET_ARCH}-${EXECUTABLE_NAME}.d\"\n# cp -f \"$DEP_FILE_SRC\" \"$DEP_FILE_DST\"\n# echo >> \"$DEP_FILE_DST\" \"$SCRIPT_OUTPUT_FILE_0: $BUILT_SRC\"\n#fi\n\n# lipo script needs to know all the platform-specific files that have been built\n# archs is in the file name, so that paths don't stay around after archs change\n# must match input for LipoScript\n#FILE_LIST=\"${DERIVED_FILE_DIR}/${ARCHS}-${EXECUTABLE_NAME}.xcfilelist\"\n#touch \"$FILE_LIST\"\n#if ! egrep -q \"$SCRIPT_OUTPUT_FILE_0\" \"$FILE_LIST\" ; then\n# echo >> \"$FILE_LIST\" \"$SCRIPT_OUTPUT_FILE_0\"\n#fi\n"; + }; +/* End PBXBuildRule section */ + +/* Begin PBXFileReference section */ + 9999259129A45319005CF020 /* em_proxy.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = em_proxy.h; path = em_proxy/em_proxy.h; sourceTree = ""; }; + ADDEDBA66A6E1 /* libresolv.tbd */ = {isa = PBXFileReference; lastKnownFileType = "sourcecode.text-based-dylib-definition"; name = libresolv.tbd; path = usr/lib/libresolv.tbd; sourceTree = SDKROOT; }; + CA60058A9FBE4D17AF51A7D5 /* run */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = run; sourceTree = BUILT_PRODUCTS_DIR; }; + CA60C44C93D7916DE57E6EBD /* libem_proxy_static.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libem_proxy_static.a; sourceTree = BUILT_PRODUCTS_DIR; }; +/* End PBXFileReference section */ + +/* Begin PBXGroup section */ + ADDEDBA66A6E2 /* Required for static linking */ = { + isa = PBXGroup; + children = ( + ADDEDBA66A6E1 /* libresolv.tbd */, + ); + name = "Required for static linking"; + sourceTree = ""; + }; + CA6094FFF69222869D176AE5 /* Products */ = { + isa = PBXGroup; + children = ( + CA60C44C93D7916DE57E6EBD /* libem_proxy_static.a */, + CA60058A9FBE4D17AF51A7D5 /* run */, + ); + name = Products; + sourceTree = ""; + }; + CA6094FFF69298AF0B5890DB /* Frameworks */ = { + isa = PBXGroup; + children = ( + ADDEDBA66A6E2 /* Required for static linking */, + ); + name = Frameworks; + sourceTree = ""; + }; + CA6094FFF692D65BC3C892A8 = { + isa = PBXGroup; + children = ( + 9999259129A45319005CF020 /* em_proxy.h */, + CA6094FFF69222869D176AE5 /* Products */, + CA6094FFF69298AF0B5890DB /* Frameworks */, + ); + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXNativeTarget section */ + CA60058A9FBE37FC563E4BCC /* run-bin */ = { + isa = PBXNativeTarget; + buildConfigurationList = CA603DD75FB437FC563E4BCC /* Build configuration list for PBXNativeTarget "run-bin" */; + buildPhases = ( + CA60445C303637FC563E4BCC /* Sources */, + CA6094FFF692AF6EBB7F357C /* Universal Binary lipo */, + ); + buildRules = ( + CA6094FFF692AC6C1400ACA8 /* PBXBuildRule */, + ); + dependencies = ( + ); + name = "run-bin"; + productName = run; + productReference = CA60058A9FBE4D17AF51A7D5 /* run */; + productType = "com.apple.product-type.tool"; + }; + CA60C44C93D7A30E3695DD59 /* em_proxy-staticlib */ = { + isa = PBXNativeTarget; + buildConfigurationList = CA603DD75FB4A30E3695DD59 /* Build configuration list for PBXNativeTarget "em_proxy-staticlib" */; + buildPhases = ( + 9987603529A4610700818586 /* ShellScript */, + CA60445C3036A30E3695DD59 /* Sources */, + CA6094FFF692AF6EBB7F357C /* Universal Binary lipo */, + ); + buildRules = ( + CA6094FFF692AC6C1400ACA8 /* PBXBuildRule */, + ); + dependencies = ( + ); + name = "em_proxy-staticlib"; + productName = libem_proxy_static.a; + productReference = CA60C44C93D7916DE57E6EBD /* libem_proxy_static.a */; + productType = "com.apple.product-type.library.static"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + CA6094FFF692E04653AD465F /* Project object */ = { + isa = PBXProject; + attributes = { + LastUpgradeCheck = 1300; + TargetAttributes = { + CA60058A9FBE37FC563E4BCC = { + CreatedOnToolsVersion = 9.2; + ProvisioningStyle = Automatic; + }; + CA60C44C93D7A30E3695DD59 = { + CreatedOnToolsVersion = 9.2; + ProvisioningStyle = Automatic; + }; + }; + }; + buildConfigurationList = CA6094FFF69280E02D6C7F57 /* Build configuration list for PBXProject "em_proxy" */; + compatibilityVersion = "Xcode 11.4"; + developmentRegion = en; + hasScannedForEncodings = 0; + knownRegions = ( + en, + Base, + ); + mainGroup = CA6094FFF692D65BC3C892A8; + productRefGroup = CA6094FFF69222869D176AE5 /* Products */; + projectDirPath = ""; + projectRoot = ""; + targets = ( + CA60C44C93D7A30E3695DD59 /* em_proxy-staticlib */, + CA60058A9FBE37FC563E4BCC /* run-bin */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXShellScriptBuildPhase section */ + 9987603529A4610700818586 /* ShellScript */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + ); + outputFileListPaths = ( + ); + outputPaths = ( + ./em_proxy/em_proxy.h, + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "bash ./fetch-prebuilt.sh em_proxy\n"; + }; + CA6094FFF692AF6EBB7F357C /* Universal Binary lipo */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + "$(DERIVED_FILE_DIR)/$(ARCHS)-$(EXECUTABLE_NAME).xcfilelist", + ); + name = "Universal Binary lipo"; + outputFileListPaths = ( + ); + outputPaths = ( + "$(TARGET_BUILD_DIR)/$(EXECUTABLE_PATH)", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "# generated with cargo-xcode 1.5.0\n\n#set -eux; cat \"$DERIVED_FILE_DIR/$ARCHS-$EXECUTABLE_NAME.xcfilelist\" | tr '\\n' '\\0' | xargs -0 lipo -create -output \"$TARGET_BUILD_DIR/$EXECUTABLE_PATH\"\n#if [ ${LD_DYLIB_INSTALL_NAME:+1} ]; then\n# install_name_tool -id \"$LD_DYLIB_INSTALL_NAME\" \"$TARGET_BUILD_DIR/$EXECUTABLE_PATH\"\n#fi\n"; + }; +/* End PBXShellScriptBuildPhase section */ + +/* Begin PBXSourcesBuildPhase section */ + CA60445C303637FC563E4BCC /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + CA60445C3036A30E3695DD59 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 9987603429A4555300818586 /* em_proxy.h in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin XCBuildConfiguration section */ + CA604DFE779B37FC563E4BCC /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + CARGO_XCODE_CARGO_DEP_FILE_NAME = run.d; + CARGO_XCODE_CARGO_FILE_NAME = run; + PRODUCT_NAME = run; + SUPPORTED_PLATFORMS = macosx; + }; + name = Release; + }; + CA604DFE779BA30E3695DD59 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + CARGO_XCODE_CARGO_DEP_FILE_NAME = libem_proxy.d; + CARGO_XCODE_CARGO_FILE_NAME = libem_proxy.a; + INSTALL_GROUP = ""; + INSTALL_MODE_FLAG = ""; + INSTALL_OWNER = ""; + LIB_FILE_NAME = ""; + "LIB_FILE_NAME[sdk=iphoneos*]" = "libem_proxy-ios"; + "LIB_FILE_NAME[sdk=iphonesimulator*]" = "libem_proxy-sim"; + PRODUCT_NAME = em_proxy_static; + SKIP_INSTALL = YES; + SUPPORTED_PLATFORMS = "macosx iphonesimulator iphoneos appletvsimulator appletvos"; + }; + name = Release; + }; + CA609A517351228BE02872F8 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CARGO_TARGET_DIR = "$(PROJECT_TEMP_DIR)/cargo_target"; + CARGO_XCODE_BUILD_MODE = debug; + CARGO_XCODE_FEATURES = ""; + "CARGO_XCODE_TARGET_ARCH[arch=arm64*]" = aarch64; + "CARGO_XCODE_TARGET_ARCH[arch=i386]" = i686; + "CARGO_XCODE_TARGET_ARCH[arch=x86_64*]" = x86_64; + "CARGO_XCODE_TARGET_OS[sdk=appletvos*]" = tvos; + "CARGO_XCODE_TARGET_OS[sdk=appletvsimulator*]" = tvos; + "CARGO_XCODE_TARGET_OS[sdk=iphoneos*]" = ios; + "CARGO_XCODE_TARGET_OS[sdk=iphonesimulator*]" = "ios-sim"; + "CARGO_XCODE_TARGET_OS[sdk=iphonesimulator*][arch=x86_64*]" = ios; + "CARGO_XCODE_TARGET_OS[sdk=macosx*]" = darwin; + CURRENT_PROJECT_VERSION = 0.1; + MARKETING_VERSION = 0.1.0; + ONLY_ACTIVE_ARCH = YES; + PRODUCT_NAME = em_proxy; + SDKROOT = macosx; + SUPPORTS_MACCATALYST = YES; + }; + name = Debug; + }; + CA609A5173513CC16B37690B /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CARGO_TARGET_DIR = "$(PROJECT_TEMP_DIR)/cargo_target"; + CARGO_XCODE_BUILD_MODE = release; + CARGO_XCODE_FEATURES = ""; + "CARGO_XCODE_TARGET_ARCH[arch=arm64*]" = aarch64; + "CARGO_XCODE_TARGET_ARCH[arch=i386]" = i686; + "CARGO_XCODE_TARGET_ARCH[arch=x86_64*]" = x86_64; + "CARGO_XCODE_TARGET_OS[sdk=appletvos*]" = tvos; + "CARGO_XCODE_TARGET_OS[sdk=appletvsimulator*]" = tvos; + "CARGO_XCODE_TARGET_OS[sdk=iphoneos*]" = ios; + "CARGO_XCODE_TARGET_OS[sdk=iphonesimulator*]" = "ios-sim"; + "CARGO_XCODE_TARGET_OS[sdk=iphonesimulator*][arch=x86_64*]" = ios; + "CARGO_XCODE_TARGET_OS[sdk=macosx*]" = darwin; + CURRENT_PROJECT_VERSION = 0.1; + MARKETING_VERSION = 0.1.0; + PRODUCT_NAME = em_proxy; + SDKROOT = macosx; + SUPPORTS_MACCATALYST = YES; + }; + name = Release; + }; + CA60DE07A83F37FC563E4BCC /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + CARGO_XCODE_CARGO_DEP_FILE_NAME = run.d; + CARGO_XCODE_CARGO_FILE_NAME = run; + PRODUCT_NAME = run; + SUPPORTED_PLATFORMS = macosx; + }; + name = Debug; + }; + CA60DE07A83FA30E3695DD59 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + CARGO_XCODE_CARGO_DEP_FILE_NAME = libem_proxy.d; + CARGO_XCODE_CARGO_FILE_NAME = libem_proxy.a; + INSTALL_GROUP = ""; + INSTALL_MODE_FLAG = ""; + INSTALL_OWNER = ""; + LIB_FILE_NAME = ""; + "LIB_FILE_NAME[sdk=iphoneos*]" = "libem_proxy-ios"; + "LIB_FILE_NAME[sdk=iphonesimulator*]" = "libem_proxy-sim"; + PRODUCT_NAME = em_proxy_static; + SKIP_INSTALL = YES; + SUPPORTED_PLATFORMS = "macosx iphonesimulator iphoneos appletvsimulator appletvos"; + }; + name = Debug; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + CA603DD75FB437FC563E4BCC /* Build configuration list for PBXNativeTarget "run-bin" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + CA604DFE779B37FC563E4BCC /* Release */, + CA60DE07A83F37FC563E4BCC /* Debug */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + CA603DD75FB4A30E3695DD59 /* Build configuration list for PBXNativeTarget "em_proxy-staticlib" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + CA604DFE779BA30E3695DD59 /* Release */, + CA60DE07A83FA30E3695DD59 /* Debug */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + CA6094FFF69280E02D6C7F57 /* Build configuration list for PBXProject "em_proxy" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + CA609A5173513CC16B37690B /* Release */, + CA609A517351228BE02872F8 /* Debug */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; +/* End XCConfigurationList section */ + }; + rootObject = CA6094FFF692E04653AD465F /* Project object */; +} diff --git a/SideStore/em_proxy.xcodeproj/xcshareddata/xcschemes/em_proxy.xcscheme b/SideStore/em_proxy.xcodeproj/xcshareddata/xcschemes/em_proxy.xcscheme new file mode 100644 index 00000000..b8b554d1 --- /dev/null +++ b/SideStore/em_proxy.xcodeproj/xcshareddata/xcschemes/em_proxy.xcscheme @@ -0,0 +1,67 @@ + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/SideStore/minimuxer.xcodeproj/xcshareddata/xcschemes/minimuxer.xcscheme b/SideStore/minimuxer.xcodeproj/xcshareddata/xcschemes/minimuxer.xcscheme new file mode 100644 index 00000000..04fe0e8f --- /dev/null +++ b/SideStore/minimuxer.xcodeproj/xcshareddata/xcschemes/minimuxer.xcscheme @@ -0,0 +1,67 @@ + + + + + + + + + + + + + + + + + + + + + + + + + From c64b0c99de97c3211e73ab7af3c0a30604492490 Mon Sep 17 00:00:00 2001 From: mahee96 <47920326+mahee96@users.noreply.github.com> Date: Sun, 16 Nov 2025 03:01:29 +0530 Subject: [PATCH 08/11] EMP: added back EMP entry/exit points as it was in 0.6.1 but with option to enable/disable it via settings --- AltStore/AppDelegate.swift | 12 +- AltStore/LaunchViewController.swift | 5 + .../BackgroundRefreshAppsOperation.swift | 5 + AltStore/SceneDelegate.swift | 10 +- AltStore/Settings/Settings.storyboard | 176 +++++++++++------- .../Settings/SettingsViewController.swift | 7 + .../Extensions/UserDefaults+AltStore.swift | 2 + 7 files changed, 142 insertions(+), 75 deletions(-) diff --git a/AltStore/AppDelegate.swift b/AltStore/AppDelegate.swift index 497bd9e8..8cb0230c 100644 --- a/AltStore/AppDelegate.swift +++ b/AltStore/AppDelegate.swift @@ -14,6 +14,7 @@ import Intents import AltStoreCore import AltSign import Roxas +import EmotionalDamage import Nuke @@ -98,7 +99,9 @@ final class AppDelegate: UIResponder, UIApplicationDelegate { self.prepareImageCache() // TODO: @mahee96: find if we need to start em_proxy as in altstore? - // start_em_proxy(bind_addr: Consts.Proxy.serverURL) + if UserDefaults.standard.enableEMPforWireguard { + start_em_proxy(bind_addr: Consts.Proxy.serverURL) + } SecureValueTransformer.register() @@ -123,7 +126,9 @@ final class AppDelegate: UIResponder, UIApplicationDelegate { { // Make sure to update SceneDelegate.sceneDidEnterBackground() as well. // TODO: @mahee96: find if we need to stop em_proxy as in altstore? - // stop_em_proxy() + if UserDefaults.standard.enableEMPforWireguard { + stop_em_proxy() + } guard let oneMonthAgo = Calendar.current.date(byAdding: .month, value: -1, to: Date()) else { return } let midnightOneMonthAgo = Calendar.current.startOfDay(for: oneMonthAgo) @@ -140,6 +145,9 @@ final class AppDelegate: UIResponder, UIApplicationDelegate { func applicationWillEnterForeground(_ application: UIApplication) { AppManager.shared.update() + if UserDefaults.standard.enableEMPforWireguard { + start_em_proxy(bind_addr: Consts.Proxy.serverURL) + } PatreonAPI.shared.refreshPatreonAccount() } diff --git a/AltStore/LaunchViewController.swift b/AltStore/LaunchViewController.swift index eed84aa1..12804d19 100644 --- a/AltStore/LaunchViewController.swift +++ b/AltStore/LaunchViewController.swift @@ -8,6 +8,7 @@ import UIKit import Roxas +import EmotionalDamage import minimuxer import WidgetKit @@ -74,6 +75,10 @@ final class LaunchViewController: UIViewController, UIDocumentPickerDelegate { #if !targetEnvironment(simulator) detectAndImportAccountFile() + + if UserDefaults.standard.enableEMPforWireguard { + start_em_proxy(bind_addr: Consts.Proxy.serverURL) + } guard let pf = fetchPairingFile() else { displayError("Device pairing file not found.") return diff --git a/AltStore/Operations/BackgroundRefreshAppsOperation.swift b/AltStore/Operations/BackgroundRefreshAppsOperation.swift index de21751b..e1d0ec80 100644 --- a/AltStore/Operations/BackgroundRefreshAppsOperation.swift +++ b/AltStore/Operations/BackgroundRefreshAppsOperation.swift @@ -10,6 +10,7 @@ import UIKit import CoreData import AltStoreCore +import EmotionalDamage import minimuxer typealias RefreshError = RefreshErrorCode.Error @@ -98,6 +99,10 @@ final class BackgroundRefreshAppsOperation: ResultOperation<[String: Result - + - + @@ -22,7 +22,7 @@ - +