From 44edbddbd812c55f341549fc57b81f4dc8bdcae1 Mon Sep 17 00:00:00 2001 From: Spidy123222 <64176728+Spidy123222@users.noreply.github.com> Date: Wed, 15 Feb 2023 21:14:51 -0800 Subject: [PATCH 01/48] Replace placeholder video with instructions. (#266) --- AltStore/LaunchViewController.swift | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/AltStore/LaunchViewController.swift b/AltStore/LaunchViewController.swift index 25692f06..0aaf588e 100644 --- a/AltStore/LaunchViewController.swift +++ b/AltStore/LaunchViewController.swift @@ -79,7 +79,7 @@ final class LaunchViewController: RSTLaunchViewController, UIDocumentPickerDeleg } else { // Show an alert explaining the pairing file // Create new Alert - let dialogMessage = UIAlertController(title: "Pairing File", message: "Select the pairing file for your device. For more information, go to https://youtu.be/dQw4w9WgXcQ", preferredStyle: .alert) + let dialogMessage = UIAlertController(title: "Pairing File", message: "Select the pairing file for your device. For more information, go to https://wiki.sidestore.io/guides/install#pairing-process", preferredStyle: .alert) // Create OK button with action handler let ok = UIAlertAction(title: "OK", style: .default, handler: { (action) -> Void in From a01aa299d8d2aff04a3477b0dc301666b3326741 Mon Sep 17 00:00:00 2001 From: naturecodevoid <44983869+naturecodevoid@users.noreply.github.com> Date: Sat, 18 Feb 2023 20:26:32 -0800 Subject: [PATCH 02/48] SourcesViewController: Fix 1 trusted source causing an error making all trusted sources fail to load --- AltStore/Sources/SourcesViewController.swift | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/AltStore/Sources/SourcesViewController.swift b/AltStore/Sources/SourcesViewController.swift index 2b15c240..7a42e446 100644 --- a/AltStore/Sources/SourcesViewController.swift +++ b/AltStore/Sources/SourcesViewController.swift @@ -381,13 +381,12 @@ private extension SourcesViewController dispatchGroup.notify(queue: .main) { if let error = fetchError { - finish(.failure(error)) - } - else - { - let sources = featuredSourceURLs.compactMap { sourcesByURL[$0] } - finish(.success(sources)) + print(error) + // 1 error doesn't mean all trusted sources failed to load! Riley, why did you do this??????? +// finish(.failure(error)) } + let sources = featuredSourceURLs.compactMap { sourcesByURL[$0] } + finish(.success(sources)) } } } From bacb1531516f785ddb6307294f16c7c042f8753a Mon Sep 17 00:00:00 2001 From: Joss Laymon <71040782+bogotesr@users.noreply.github.com> Date: Mon, 20 Feb 2023 11:21:30 -0700 Subject: [PATCH 03/48] Use new pojav url Signed-off-by: Joss Laymon <71040782+bogotesr@users.noreply.github.com> --- trustedapps.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/trustedapps.json b/trustedapps.json index 016fadf3..a88df4a8 100644 --- a/trustedapps.json +++ b/trustedapps.json @@ -26,7 +26,7 @@ }, { "identifier": "dev.crystall1ne.repos.PojavLauncher", - "sourceURL": "https://alt.crystall1ne.software/" + "sourceURL": "https://alt.crystall1ne.dev" }, { "identifier": "eu.pokemmo.altstore", From 0de23dcba0c357654d09c915cc898ee75b679737 Mon Sep 17 00:00:00 2001 From: naturecodevoid <44983869+naturecodevoid@users.noreply.github.com> Date: Mon, 20 Feb 2023 16:33:11 -0800 Subject: [PATCH 04/48] remove submodules --- .gitmodules | 6 ------ Dependencies/em_proxy | 1 - Dependencies/minimuxer | 1 - 3 files changed, 8 deletions(-) delete mode 160000 Dependencies/em_proxy delete mode 160000 Dependencies/minimuxer diff --git a/.gitmodules b/.gitmodules index c40a8c62..4ca1ebdb 100644 --- a/.gitmodules +++ b/.gitmodules @@ -13,15 +13,9 @@ [submodule "Dependencies/MarkdownAttributedString"] path = Dependencies/MarkdownAttributedString url = https://github.com/chockenberry/MarkdownAttributedString.git -[submodule "Dependencies/em_proxy"] - path = Dependencies/em_proxy - url = https://github.com/jkcoxson/em_proxy [submodule "Dependencies/libimobiledevice-glue"] path = Dependencies/libimobiledevice-glue url = https://github.com/libimobiledevice/libimobiledevice-glue -[submodule "Dependencies/minimuxer"] - path = Dependencies/minimuxer - url = https://github.com/SideStore/minimuxer [submodule "Dependencies/libfragmentzip"] path = Dependencies/libfragmentzip url = https://github.com/SideStore/libfragmentzip.git diff --git a/Dependencies/em_proxy b/Dependencies/em_proxy deleted file mode 160000 index c8a280e5..00000000 --- a/Dependencies/em_proxy +++ /dev/null @@ -1 +0,0 @@ -Subproject commit c8a280e54c93be130b7087c41eba83b1c15f96be diff --git a/Dependencies/minimuxer b/Dependencies/minimuxer deleted file mode 160000 index 6a5a5b4e..00000000 --- a/Dependencies/minimuxer +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 6a5a5b4e730e5f5ed6e337e768da52bd93ed3457 From 09514d15a6c6d99a052e21117e58eb7a4fc16e2e Mon Sep 17 00:00:00 2001 From: naturecodevoid <44983869+naturecodevoid@users.noreply.github.com> Date: Mon, 20 Feb 2023 18:48:21 -0800 Subject: [PATCH 05/48] use prebuilt binaries --- .gitignore | 9 +- AltStore.xcodeproj/project.pbxproj | 28 +- .../em_proxy.xcodeproj/project.pbxproj | 670 +++++++++--------- Dependencies/em_proxy/.gitkeep | 1 + Dependencies/fetch-prebuilt.sh | 50 ++ .../minimuxer.xcodeproj/project.pbxproj | 531 +++++++------- Dependencies/minimuxer/.gitkeep | 1 + Dependencies/update.sh | 10 - EmotionalDamage/em_proxy.h | 40 -- minimuxer/minimuxer.h | 76 -- 10 files changed, 650 insertions(+), 766 deletions(-) create mode 100644 Dependencies/em_proxy/.gitkeep create mode 100644 Dependencies/fetch-prebuilt.sh create mode 100644 Dependencies/minimuxer/.gitkeep delete mode 100755 Dependencies/update.sh delete mode 100644 EmotionalDamage/em_proxy.h delete mode 100644 minimuxer/minimuxer.h diff --git a/.gitignore b/.gitignore index d750188a..6165c5d4 100644 --- a/.gitignore +++ b/.gitignore @@ -33,4 +33,11 @@ xcuserdata /.vscode ## AppCode specific -.idea/ \ No newline at end of file +.idea/ + +Payload/ +SideStore.ipa +Dependencies/.*-prebuilt-fetch* +Dependencies/minimuxer/* +Dependencies/em_proxy/* +!Dependencies/**/.gitkeep diff --git a/AltStore.xcodeproj/project.pbxproj b/AltStore.xcodeproj/project.pbxproj index 92c94e88..f1d2c724 100644 --- a/AltStore.xcodeproj/project.pbxproj +++ b/AltStore.xcodeproj/project.pbxproj @@ -501,7 +501,6 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ - 19104DA92909BC7100C49C7B /* em_proxy.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = em_proxy.h; sourceTree = ""; }; 19104DB22909C06C00C49C7B /* libEmotionalDamage.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libEmotionalDamage.a; sourceTree = BUILT_PRODUCTS_DIR; }; 19104DB42909C06D00C49C7B /* EmotionalDamage.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = EmotionalDamage.swift; sourceTree = ""; }; 191E5FAB290A5D92001A3B7C /* libminimuxer.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libminimuxer.a; sourceTree = BUILT_PRODUCTS_DIR; }; @@ -510,7 +509,6 @@ 191E5FCF290A651D001A3B7C /* jplist.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = jplist.c; path = Dependencies/libplist/src/jplist.c; sourceTree = SOURCE_ROOT; }; 191E5FD0290A651D001A3B7C /* jsmn.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = jsmn.c; path = Dependencies/libplist/src/jsmn.c; sourceTree = SOURCE_ROOT; }; 191E5FD1290A651D001A3B7C /* jsmn.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = jsmn.h; path = Dependencies/libplist/src/jsmn.h; sourceTree = SOURCE_ROOT; }; - 191E5FD7290A6EFB001A3B7C /* minimuxer.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = minimuxer.h; path = ../Dependencies/minimuxer/minimuxer.h; sourceTree = ""; }; 1920B04E2924AC8300744F60 /* Settings.bundle */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.plug-in"; path = Settings.bundle; sourceTree = ""; }; 19B9B7442845E6DF0076EF69 /* SelectTeamViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SelectTeamViewController.swift; sourceTree = ""; }; B3146EC6284F580500BBC3FD /* Roxas.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = Roxas.xcodeproj; path = Dependencies/Roxas/Roxas.xcodeproj; sourceTree = ""; }; @@ -939,7 +937,6 @@ isa = PBXGroup; children = ( B343F84D295F6323002B1159 /* em_proxy.xcodeproj */, - 19104DA92909BC7100C49C7B /* em_proxy.h */, 19104DB42909C06D00C49C7B /* EmotionalDamage.swift */, ); path = EmotionalDamage; @@ -949,7 +946,6 @@ isa = PBXGroup; children = ( B343F847295F6321002B1159 /* minimuxer.xcodeproj */, - 191E5FD7290A6EFB001A3B7C /* minimuxer.h */, 191E5FAD290A5D92001A3B7C /* minimuxer.swift */, ); path = minimuxer; @@ -2619,15 +2615,14 @@ IPHONEOS_DEPLOYMENT_TARGET = 14.0; LIBRARY_SEARCH_PATHS = ( "$(inherited)", - "$(PROJECT_DIR)/Dependencies/em_proxy/target/aarch64-apple-ios/release", - "$(PROJECT_DIR)/Dependencies/em_proxy/target/aarch64-apple-ios/debug", + "$(PROJECT_DIR)/Dependencies/em_proxy", ); MACOSX_DEPLOYMENT_TARGET = "$(RECOMMENDED_MACOSX_DEPLOYMENT_TARGET)"; OTHER_LDFLAGS = "-ObjC"; PRODUCT_NAME = "$(TARGET_NAME)"; SKIP_INSTALL = YES; SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; - SWIFT_OBJC_BRIDGING_HEADER = EmotionalDamage/em_proxy.h; + SWIFT_OBJC_BRIDGING_HEADER = Dependencies/em_proxy/em_proxy.h; SWIFT_VERSION = 5.0; TARGETED_DEVICE_FAMILY = "1,2"; TVOS_DEPLOYMENT_TARGET = 14.0; @@ -2646,14 +2641,13 @@ IPHONEOS_DEPLOYMENT_TARGET = 14.0; LIBRARY_SEARCH_PATHS = ( "$(inherited)", - "$(PROJECT_DIR)/Dependencies/em_proxy/target/aarch64-apple-ios/release", - "$(PROJECT_DIR)/Dependencies/em_proxy/target/aarch64-apple-ios/debug", + "$(PROJECT_DIR)/Dependencies/em_proxy", ); MACOSX_DEPLOYMENT_TARGET = "$(RECOMMENDED_MACOSX_DEPLOYMENT_TARGET)"; OTHER_LDFLAGS = "-ObjC"; PRODUCT_NAME = "$(TARGET_NAME)"; SKIP_INSTALL = YES; - SWIFT_OBJC_BRIDGING_HEADER = EmotionalDamage/em_proxy.h; + SWIFT_OBJC_BRIDGING_HEADER = Dependencies/em_proxy/em_proxy.h; SWIFT_VERSION = 5.0; TARGETED_DEVICE_FAMILY = "1,2"; TVOS_DEPLOYMENT_TARGET = 14.0; @@ -2673,14 +2667,13 @@ IPHONEOS_DEPLOYMENT_TARGET = 14.0; LIBRARY_SEARCH_PATHS = ( "$(inherited)", - "$(PROJECT_DIR)/Dependencies/minimuxer/target/aarch64-apple-ios/release", - "$(PROJECT_DIR)/Dependencies/minimuxer/target/aarch64-apple-ios/debug", + "$(PROJECT_DIR)/Dependencies/minimuxer", ); OTHER_LDFLAGS = "-ObjC"; PRODUCT_NAME = "$(TARGET_NAME)"; SKIP_INSTALL = YES; SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; - SWIFT_OBJC_BRIDGING_HEADER = minimuxer/minimuxer.h; + SWIFT_OBJC_BRIDGING_HEADER = Dependencies/minimuxer/minimuxer.h; SWIFT_VERSION = 5.0; TARGETED_DEVICE_FAMILY = "1,2"; }; @@ -2697,13 +2690,12 @@ IPHONEOS_DEPLOYMENT_TARGET = 14.0; LIBRARY_SEARCH_PATHS = ( "$(inherited)", - "$(PROJECT_DIR)/Dependencies/minimuxer/target/aarch64-apple-ios/release", - "$(PROJECT_DIR)/Dependencies/minimuxer/target/aarch64-apple-ios/debug", + "$(PROJECT_DIR)/Dependencies/minimuxer", ); OTHER_LDFLAGS = "-ObjC"; PRODUCT_NAME = "$(TARGET_NAME)"; SKIP_INSTALL = YES; - SWIFT_OBJC_BRIDGING_HEADER = minimuxer/minimuxer.h; + SWIFT_OBJC_BRIDGING_HEADER = Dependencies/minimuxer/minimuxer.h; SWIFT_VERSION = 5.0; TARGETED_DEVICE_FAMILY = "1,2"; }; @@ -3203,8 +3195,6 @@ "$(inherited)", "$(PROJECT_DIR)/Dependencies/fragmentzip", "$(PROJECT_DIR)/Dependencies/libcurl", - "$(PROJECT_DIR)/Dependencies/minimuxer/target/aarch64-apple-ios/debug", - "$(PROJECT_DIR)/Dependencies/minimuxer/target/aarch64-apple-ios/release", ); PRODUCT_BUNDLE_IDENTIFIER = "$(PRODUCT_BUNDLE_IDENTIFIER)"; PRODUCT_NAME = "$(TARGET_NAME)"; @@ -3239,8 +3229,6 @@ "$(inherited)", "$(PROJECT_DIR)/Dependencies/fragmentzip", "$(PROJECT_DIR)/Dependencies/libcurl", - "$(PROJECT_DIR)/Dependencies/minimuxer/target/aarch64-apple-ios/debug", - "$(PROJECT_DIR)/Dependencies/minimuxer/target/aarch64-apple-ios/release", ); PRODUCT_BUNDLE_IDENTIFIER = "$(PRODUCT_BUNDLE_IDENTIFIER)"; PRODUCT_NAME = "$(TARGET_NAME)"; diff --git a/Dependencies/em_proxy.xcodeproj/project.pbxproj b/Dependencies/em_proxy.xcodeproj/project.pbxproj index 9be3b5f2..d35e5c8c 100644 --- a/Dependencies/em_proxy.xcodeproj/project.pbxproj +++ b/Dependencies/em_proxy.xcodeproj/project.pbxproj @@ -1,371 +1,343 @@ // !$*UTF8*$! { - /* generated with cargo-xcode 1.5.0 */ - archiveVersion = 1; - classes = { - }; - objectVersion = 53; - objects = { + archiveVersion = 1; + classes = { + }; + objectVersion = 53; + objects = { + /* Begin PBXBuildFile section */ - - CA60E4E02AAAA30E3695DD59 /* Cargo.toml in Sources */ = { - isa = PBXBuildFile; - fileRef = CA6094FFF6923EF4668187A5 /* Cargo.toml */; - settings = { - COMPILER_FLAGS = "--lib"; /* == OTHER_INPUT_FILE_FLAGS */ - }; - }; - - CA60E4E02AAA37FC563E4BCC /* Cargo.toml in Sources */ = { - isa = PBXBuildFile; - fileRef = CA6094FFF6923EF4668187A5 /* Cargo.toml */; - settings = { - COMPILER_FLAGS = "--bin 'run'"; /* == OTHER_INPUT_FILE_FLAGS */ - }; - }; - + 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; - dependencyFile = "$(DERIVED_FILE_DIR)/$(CARGO_XCODE_TARGET_ARCH)-$(EXECUTABLE_NAME).d"; - filePatterns = "*/Cargo.toml"; /* must contain asterisk */ - 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\nset -eu; export PATH=\"$PATH:$HOME/.cargo/bin:/usr/local/bin\";\nif [ \"${IS_MACCATALYST-NO}\" = YES ]; then\n CARGO_XCODE_TARGET_TRIPLE=\"${CARGO_XCODE_TARGET_ARCH}-apple-ios-macabi\"\nelse\n CARGO_XCODE_TARGET_TRIPLE=\"${CARGO_XCODE_TARGET_ARCH}-apple-${CARGO_XCODE_TARGET_OS}\"\nfi\nif [ \"$CARGO_XCODE_TARGET_OS\" != \"darwin\" ]; then\n PATH=\"${PATH/\\/Contents\\/Developer\\/Toolchains\\/XcodeDefault.xctoolchain\\/usr\\/bin:/xcode-provided-ld-cant-link-lSystem-for-the-host-build-script:}\"\nfi\nPATH=\"$PATH:/opt/homebrew/bin\" # Rust projects often depend on extra tools like nasm, which Xcode lacks\nif [ \"$CARGO_XCODE_BUILD_MODE\" == release ]; then\n OTHER_INPUT_FILE_FLAGS=\"${OTHER_INPUT_FILE_FLAGS} --release\"\nfi\nif command -v rustup &> /dev/null; then\n if ! rustup target list --installed | egrep -q \"${CARGO_XCODE_TARGET_TRIPLE}\"; then\n echo \"warning: this build requires rustup toolchain for $CARGO_XCODE_TARGET_TRIPLE, but it isn\'t installed\"\n rustup target add \"${CARGO_XCODE_TARGET_TRIPLE}\" || echo >&2 \"warning: can\'t install $CARGO_XCODE_TARGET_TRIPLE\"\n fi\nfi\nif [ \"$ACTION\" = clean ]; then\n ( set -x; cargo clean --manifest-path=\"$SCRIPT_INPUT_FILE\" ${OTHER_INPUT_FILE_FLAGS} --target=\"${CARGO_XCODE_TARGET_TRIPLE}\"; );\nelse\n ( set -x; cargo build --manifest-path=\"$SCRIPT_INPUT_FILE\" --features=\"${CARGO_XCODE_FEATURES:-}\" ${OTHER_INPUT_FILE_FLAGS} --target=\"${CARGO_XCODE_TARGET_TRIPLE}\"; );\nfi\n# it\'s too hard to explain Cargo\'s actual exe path to Xcode build graph, so hardlink to a known-good path instead\nBUILT_SRC=\"${CARGO_TARGET_DIR}/${CARGO_XCODE_TARGET_TRIPLE}/${CARGO_XCODE_BUILD_MODE}/${CARGO_XCODE_CARGO_FILE_NAME}\"\nln -f -- \"$BUILT_SRC\" \"$SCRIPT_OUTPUT_FILE_0\"\n\n# xcode generates dep file, but for its own path, so append our rename to it\nDEP_FILE_SRC=\"${CARGO_TARGET_DIR}/${CARGO_XCODE_TARGET_TRIPLE}/${CARGO_XCODE_BUILD_MODE}/${CARGO_XCODE_CARGO_DEP_FILE_NAME}\"\nif [ -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\"\nfi\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\nFILE_LIST=\"${DERIVED_FILE_DIR}/${ARCHS}-${EXECUTABLE_NAME}.xcfilelist\"\ntouch \"$FILE_LIST\"\nif ! egrep -q \"$SCRIPT_OUTPUT_FILE_0\" \"$FILE_LIST\" ; then\n echo >> \"$FILE_LIST\" \"$SCRIPT_OUTPUT_FILE_0\"\nfi\n"; - }; + 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\"\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 */ - - CA60C44C93D7916DE57E6EBD /* staticlib */ = { - isa = PBXFileReference; - explicitFileType = "archive.ar"; - includeInIndex = 0; - name = "libem_proxy_static.a"; - sourceTree = TARGET_BUILD_DIR; - }; - CA60058A9FBE4D17AF51A7D5 /* bin */ = { - isa = PBXFileReference; - explicitFileType = "compiled.mach-o.executable"; - includeInIndex = 0; - name = "run"; - sourceTree = TARGET_BUILD_DIR; - }; - CA6094FFF6923EF4668187A5 /* Cargo.toml */ = { - isa = PBXFileReference; - lastKnownFileType = text; - fileEncoding = 4; - name = "Cargo.toml"; - path = "em_proxy/Cargo.toml"; - sourceTree = ""; - }; - /* Rust needs libresolv */ - ADDEDBA66A6E1 = { - isa = PBXFileReference; lastKnownFileType = "sourcecode.text-based-dylib-definition"; - name = libresolv.tbd; path = usr/lib/libresolv.tbd; sourceTree = SDKROOT; - }; - + 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 */ - CA6094FFF69298AF0B5890DB /* Frameworks */ = { - isa = PBXGroup; - children = ( - ADDEDBA66A6E2, - - ); - name = Frameworks; - sourceTree = ""; - }; - - - ADDEDBA66A6E2 /* Required for static linking */ = { - isa = PBXGroup; - children = ( - ADDEDBA66A6E1 - ); - name = "Required for static linking"; - sourceTree = ""; - }; - - CA6094FFF69222869D176AE5 /* Products */ = { - isa = PBXGroup; - children = ( - CA60C44C93D7916DE57E6EBD, -CA60058A9FBE4D17AF51A7D5, - - ); - name = Products; - sourceTree = ""; - }; - - CA6094FFF692D65BC3C892A8 /* Main */ = { - isa = PBXGroup; - children = ( - CA6094FFF6923EF4668187A5, -CA6094FFF69222869D176AE5, -CA6094FFF69298AF0B5890DB, - - ); - sourceTree = ""; - }; - + 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 */ - CA60C44C93D7A30E3695DD59 /* em_proxy-staticlib */ = { - isa = PBXNativeTarget; - buildConfigurationList = CA603DD75FB4A30E3695DD59; - buildPhases = ( - CA60445C3036A30E3695DD59 /* Sources */, - CA6094FFF692AF6EBB7F357C /* Universal Binary lipo */, - ); - buildRules = ( - CA6094FFF692AC6C1400ACA8 /* PBXBuildRule */, - ); - dependencies = ( - ); - name = "em_proxy-staticlib"; - productName = "libem_proxy_static.a"; - productReference = CA60C44C93D7916DE57E6EBD; - productType = "com.apple.product-type.library.static"; - }; - CA60058A9FBE37FC563E4BCC /* run-bin */ = { - isa = PBXNativeTarget; - buildConfigurationList = CA603DD75FB437FC563E4BCC; - buildPhases = ( - CA60445C303637FC563E4BCC /* Sources */, - CA6094FFF692AF6EBB7F357C /* Universal Binary lipo */, - ); - buildRules = ( - CA6094FFF692AC6C1400ACA8 /* PBXBuildRule */, - ); - dependencies = ( - ); - name = "run-bin"; - productName = "run"; - productReference = CA60058A9FBE4D17AF51A7D5; - productType = "com.apple.product-type.tool"; - }; - + 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 */ - CA60445C3036A30E3695DD59 = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - CA60E4E02AAAA30E3695DD59 - ); - runOnlyForDeploymentPostprocessing = 0; - }; - - CA603DD75FB4A30E3695DD59 /* staticlib */ = { - isa = XCConfigurationList; - buildConfigurations = ( - CA604DFE779BA30E3695DD59 /* Release */, - CA60DE07A83FA30E3695DD59 /* Debug */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - CA604DFE779BA30E3695DD59 /* staticlib */ = { - isa = XCBuildConfiguration; - buildSettings = { - PRODUCT_NAME = "em_proxy_static"; - "CARGO_XCODE_CARGO_FILE_NAME" = "libem_proxy.a"; - "CARGO_XCODE_CARGO_DEP_FILE_NAME" = "libem_proxy.d"; - SUPPORTED_PLATFORMS = "macosx iphonesimulator iphoneos appletvsimulator appletvos"; - SKIP_INSTALL = YES; - INSTALL_GROUP = ""; - INSTALL_MODE_FLAG = ""; - INSTALL_OWNER = ""; - - }; - name = Release; - }; - CA60DE07A83FA30E3695DD59 /* staticlib */ = { - isa = XCBuildConfiguration; - buildSettings = { - PRODUCT_NAME = "em_proxy_static"; - "CARGO_XCODE_CARGO_FILE_NAME" = "libem_proxy.a"; - "CARGO_XCODE_CARGO_DEP_FILE_NAME" = "libem_proxy.d"; - SUPPORTED_PLATFORMS = "macosx iphonesimulator iphoneos appletvsimulator appletvos"; - SKIP_INSTALL = YES; - INSTALL_GROUP = ""; - INSTALL_MODE_FLAG = ""; - INSTALL_OWNER = ""; - - }; - name = Debug; - };CA60445C303637FC563E4BCC = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - CA60E4E02AAA37FC563E4BCC - ); - runOnlyForDeploymentPostprocessing = 0; - }; - - CA603DD75FB437FC563E4BCC /* bin */ = { - isa = XCConfigurationList; - buildConfigurations = ( - CA604DFE779B37FC563E4BCC /* Release */, - CA60DE07A83F37FC563E4BCC /* Debug */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - CA604DFE779B37FC563E4BCC /* bin */ = { - isa = XCBuildConfiguration; - buildSettings = { - PRODUCT_NAME = "run"; - "CARGO_XCODE_CARGO_FILE_NAME" = "run"; - "CARGO_XCODE_CARGO_DEP_FILE_NAME" = "run.d"; - SUPPORTED_PLATFORMS = "macosx"; - - - }; - name = Release; - }; - CA60DE07A83F37FC563E4BCC /* bin */ = { - isa = XCBuildConfiguration; - buildSettings = { - PRODUCT_NAME = "run"; - "CARGO_XCODE_CARGO_FILE_NAME" = "run"; - "CARGO_XCODE_CARGO_DEP_FILE_NAME" = "run.d"; - SUPPORTED_PLATFORMS = "macosx"; - - - }; - name = Debug; - }; +/* 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 */ - CA6094FFF692AF6EBB7F357C /* LipoScript */ = { - name = "Universal Binary lipo"; - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = (); - inputFileListPaths = (); - inputPaths = ( - "$(DERIVED_FILE_DIR)/$(ARCHS)-$(EXECUTABLE_NAME).xcfilelist", - ); - 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 "; - }; +/* 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 */ - CA6094FFF69280E02D6C7F57 = { - isa = XCConfigurationList; - buildConfigurations = ( - CA609A5173513CC16B37690B /* Release */, - CA609A517351228BE02872F8 /* Debug */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; +/* 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 */ - CA609A5173513CC16B37690B = { - isa = XCBuildConfiguration; - buildSettings = { - - ALWAYS_SEARCH_USER_PATHS = NO; - SUPPORTS_MACCATALYST = YES; - CARGO_TARGET_DIR = "$(PROJECT_TEMP_DIR)/cargo_target"; /* for cargo */ - CARGO_XCODE_FEATURES = ""; /* configure yourself */ - "CARGO_XCODE_TARGET_ARCH[arch=arm64*]" = "aarch64"; - "CARGO_XCODE_TARGET_ARCH[arch=x86_64*]" = "x86_64"; /* catalyst adds h suffix */ - "CARGO_XCODE_TARGET_ARCH[arch=i386]" = "i686"; - "CARGO_XCODE_TARGET_OS[sdk=macosx*]" = "darwin"; - "CARGO_XCODE_TARGET_OS[sdk=iphonesimulator*]" = "ios-sim"; - "CARGO_XCODE_TARGET_OS[sdk=iphonesimulator*][arch=x86_64*]" = "ios"; - "CARGO_XCODE_TARGET_OS[sdk=iphoneos*]" = "ios"; - "CARGO_XCODE_TARGET_OS[sdk=appletvsimulator*]" = "tvos"; - "CARGO_XCODE_TARGET_OS[sdk=appletvos*]" = "tvos"; - PRODUCT_NAME = "em_proxy"; - MARKETING_VERSION = "0.1.0"; - CURRENT_PROJECT_VERSION = "0.1"; - SDKROOT = macosx; - - "CARGO_XCODE_BUILD_MODE" = "release"; /* for xcode scripts */ - }; - name = Release; - }; +/* 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; + "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; + "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 */ - CA609A517351228BE02872F8 = { - isa = XCBuildConfiguration; - buildSettings = { - - ALWAYS_SEARCH_USER_PATHS = NO; - SUPPORTS_MACCATALYST = YES; - CARGO_TARGET_DIR = "$(PROJECT_TEMP_DIR)/cargo_target"; /* for cargo */ - CARGO_XCODE_FEATURES = ""; /* configure yourself */ - "CARGO_XCODE_TARGET_ARCH[arch=arm64*]" = "aarch64"; - "CARGO_XCODE_TARGET_ARCH[arch=x86_64*]" = "x86_64"; /* catalyst adds h suffix */ - "CARGO_XCODE_TARGET_ARCH[arch=i386]" = "i686"; - "CARGO_XCODE_TARGET_OS[sdk=macosx*]" = "darwin"; - "CARGO_XCODE_TARGET_OS[sdk=iphonesimulator*]" = "ios-sim"; - "CARGO_XCODE_TARGET_OS[sdk=iphonesimulator*][arch=x86_64*]" = "ios"; - "CARGO_XCODE_TARGET_OS[sdk=iphoneos*]" = "ios"; - "CARGO_XCODE_TARGET_OS[sdk=appletvsimulator*]" = "tvos"; - "CARGO_XCODE_TARGET_OS[sdk=appletvos*]" = "tvos"; - PRODUCT_NAME = "em_proxy"; - MARKETING_VERSION = "0.1.0"; - CURRENT_PROJECT_VERSION = "0.1"; - SDKROOT = macosx; - - "CARGO_XCODE_BUILD_MODE" = "debug"; /* for xcode scripts */ - ONLY_ACTIVE_ARCH = YES; - }; - name = Debug; - }; - - CA6094FFF692E04653AD465F = { - isa = PBXProject; - attributes = { - LastUpgradeCheck = 1300; - TargetAttributes = { - CA60C44C93D7A30E3695DD59 = { - CreatedOnToolsVersion = 9.2; - ProvisioningStyle = Automatic; - }; - CA60058A9FBE37FC563E4BCC = { - CreatedOnToolsVersion = 9.2; - ProvisioningStyle = Automatic; - }; - }; - }; - buildConfigurationList = CA6094FFF69280E02D6C7F57; - compatibilityVersion = "Xcode 11.4"; - developmentRegion = en; - hasScannedForEncodings = 0; - knownRegions = ( - en, - Base, - ); - mainGroup = CA6094FFF692D65BC3C892A8; - productRefGroup = CA6094FFF69222869D176AE5 /* Products */; - projectDirPath = ""; - projectRoot = ""; - targets = ( - CA60C44C93D7A30E3695DD59, -CA60058A9FBE37FC563E4BCC, - - ); - }; - - }; - rootObject = CA6094FFF692E04653AD465F; +/* 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 */; } - \ No newline at end of file diff --git a/Dependencies/em_proxy/.gitkeep b/Dependencies/em_proxy/.gitkeep new file mode 100644 index 00000000..d338f61d --- /dev/null +++ b/Dependencies/em_proxy/.gitkeep @@ -0,0 +1 @@ +Use ../fetch-prebuilt.sh to fetch prebuilt Rust dependencies \ No newline at end of file diff --git a/Dependencies/fetch-prebuilt.sh b/Dependencies/fetch-prebuilt.sh new file mode 100644 index 00000000..b4cc34d4 --- /dev/null +++ b/Dependencies/fetch-prebuilt.sh @@ -0,0 +1,50 @@ +#!/usr/bin/env bash + +# Ensure we are in Dependencies directory +cd "$(dirname "$0")" + +check_for_update() { + if [ -f ".skip-prebuilt-fetch-$1" ]; then + echo "Skipping prebuilt fetch for $1 since .skip-prebuilt-fetch-$1 exists. If you are developing $1 alongside SideStore, don't remove this file, or this script will replace your locally built binaries with the ones built by GitHub Actions." + return + fi + + if [ ! -f ".last-prebuilt-fetch-$1" ]; then + echo "0,none" > ".last-prebuilt-fetch-$1" + fi + + LAST_FETCH=`cat .last-prebuilt-fetch-$1 | perl -n -e '/([0-9]*),([^ ]*)$/ && print $1'` + LAST_COMMIT=`cat .last-prebuilt-fetch-$1 | perl -n -e '/([0-9]*),([^ ]*)$/ && print $2'` + + # fetch if last fetch was over 6 hours ago + if [[ $LAST_FETCH -lt $(expr $(date +%s) - 21600) ]] || [[ "$2" == "force" ]]; then + echo "Checking $1 for update" + echo + LATEST_COMMIT=`curl https://api.github.com/repos/SideStore/$1/releases/latest | perl -n -e '/Commit: https:\\/\\/github\\.com\\/[^\\/]*\\/[^\\/]*\\/commit\\/([^"]*)/ && print $1'` + echo + echo "Last commit: $LAST_COMMIT" + echo "Latest commit: $LATEST_COMMIT" + if [[ "$LAST_COMMIT" != "$LATEST_COMMIT" ]]; then + echo "Found update, downloading binaries" + echo + wget -O "$1/lib$1.a" "https://github.com/SideStore/$1/releases/latest/download/lib$1.a" + wget -O "$1/lib$1-sim.a" "https://github.com/SideStore/$1/releases/latest/download/lib$1-sim.a" + wget -O "$1/$1.h" "https://github.com/SideStore/$1/releases/latest/download/$1.h" + echo + else + echo "Up-to-date" + fi + echo "$(date +%s),$LATEST_COMMIT" > ".last-prebuilt-fetch-$1" + else + echo "It hasn't been 6 hours and force was not specified, skipping update check for $1" + fi +} + +# Allow for Xcode to check minimuxer and em_proxy separately by skipping the update check if the other one is specified as an argument +if [[ "$1" != "em_proxy" ]]; then + check_for_update minimuxer "$1" + echo +fi +if [[ "$1" != "minimuxer" ]]; then + check_for_update em_proxy "$1" +fi diff --git a/Dependencies/minimuxer.xcodeproj/project.pbxproj b/Dependencies/minimuxer.xcodeproj/project.pbxproj index 0c50e9b9..062d1729 100644 --- a/Dependencies/minimuxer.xcodeproj/project.pbxproj +++ b/Dependencies/minimuxer.xcodeproj/project.pbxproj @@ -1,292 +1,283 @@ // !$*UTF8*$! { - /* generated with cargo-xcode 1.5.0 */ - archiveVersion = 1; - classes = { - }; - objectVersion = 53; - objects = { + archiveVersion = 1; + classes = { + }; + objectVersion = 53; + objects = { + /* Begin PBXBuildFile section */ - - CA6038F2DF2FA560B9642892 /* Cargo.toml in Sources */ = { - isa = PBXBuildFile; - fileRef = CA6012A875F93EF4668187A5 /* Cargo.toml */; - settings = { - COMPILER_FLAGS = "--lib"; /* == OTHER_INPUT_FILE_FLAGS */ - }; - }; - + 9987603329A454B500818586 /* minimuxer.h in Sources */ = {isa = PBXBuildFile; fileRef = 9987603229A454B500818586 /* minimuxer.h */; }; /* End PBXBuildFile section */ /* Begin PBXBuildRule section */ - CA6012A875F9AC6C1400ACA8 /* PBXBuildRule */ = { - isa = PBXBuildRule; - compilerSpec = com.apple.compilers.proxy.script; - dependencyFile = "$(DERIVED_FILE_DIR)/$(CARGO_XCODE_TARGET_ARCH)-$(EXECUTABLE_NAME).d"; - filePatterns = "*/Cargo.toml"; /* must contain asterisk */ - 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\nset -eu; export PATH=\"$PATH:$HOME/.cargo/bin:/usr/local/bin\";\nif [ \"${IS_MACCATALYST-NO}\" = YES ]; then\n CARGO_XCODE_TARGET_TRIPLE=\"${CARGO_XCODE_TARGET_ARCH}-apple-ios-macabi\"\nelse\n CARGO_XCODE_TARGET_TRIPLE=\"${CARGO_XCODE_TARGET_ARCH}-apple-${CARGO_XCODE_TARGET_OS}\"\nfi\nif [ \"$CARGO_XCODE_TARGET_OS\" != \"darwin\" ]; then\n PATH=\"${PATH/\\/Contents\\/Developer\\/Toolchains\\/XcodeDefault.xctoolchain\\/usr\\/bin:/xcode-provided-ld-cant-link-lSystem-for-the-host-build-script:}\"\nfi\nPATH=\"$PATH:/opt/homebrew/bin\" # Rust projects often depend on extra tools like nasm, which Xcode lacks\nif [ \"$CARGO_XCODE_BUILD_MODE\" == release ]; then\n OTHER_INPUT_FILE_FLAGS=\"${OTHER_INPUT_FILE_FLAGS} --release\"\nfi\nif command -v rustup &> /dev/null; then\n if ! rustup target list --installed | egrep -q \"${CARGO_XCODE_TARGET_TRIPLE}\"; then\n echo \"warning: this build requires rustup toolchain for $CARGO_XCODE_TARGET_TRIPLE, but it isn\'t installed\"\n rustup target add \"${CARGO_XCODE_TARGET_TRIPLE}\" || echo >&2 \"warning: can\'t install $CARGO_XCODE_TARGET_TRIPLE\"\n fi\nfi\nif [ \"$ACTION\" = clean ]; then\n ( set -x; cargo clean --manifest-path=\"$SCRIPT_INPUT_FILE\" ${OTHER_INPUT_FILE_FLAGS} --target=\"${CARGO_XCODE_TARGET_TRIPLE}\"; );\nelse\n ( set -x; cargo build --manifest-path=\"$SCRIPT_INPUT_FILE\" --features=\"${CARGO_XCODE_FEATURES:-}\" ${OTHER_INPUT_FILE_FLAGS} --target=\"${CARGO_XCODE_TARGET_TRIPLE}\"; );\nfi\n# it\'s too hard to explain Cargo\'s actual exe path to Xcode build graph, so hardlink to a known-good path instead\nBUILT_SRC=\"${CARGO_TARGET_DIR}/${CARGO_XCODE_TARGET_TRIPLE}/${CARGO_XCODE_BUILD_MODE}/${CARGO_XCODE_CARGO_FILE_NAME}\"\nln -f -- \"$BUILT_SRC\" \"$SCRIPT_OUTPUT_FILE_0\"\n\n# xcode generates dep file, but for its own path, so append our rename to it\nDEP_FILE_SRC=\"${CARGO_TARGET_DIR}/${CARGO_XCODE_TARGET_TRIPLE}/${CARGO_XCODE_BUILD_MODE}/${CARGO_XCODE_CARGO_DEP_FILE_NAME}\"\nif [ -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\"\nfi\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\nFILE_LIST=\"${DERIVED_FILE_DIR}/${ARCHS}-${EXECUTABLE_NAME}.xcfilelist\"\ntouch \"$FILE_LIST\"\nif ! egrep -q \"$SCRIPT_OUTPUT_FILE_0\" \"$FILE_LIST\" ; then\n echo >> \"$FILE_LIST\" \"$SCRIPT_OUTPUT_FILE_0\"\nfi\n"; - }; + CA6012A875F9AC6C1400ACA8 /* PBXBuildRule */ = { + isa = PBXBuildRule; + compilerSpec = com.apple.compilers.proxy.script; + filePatterns = "*/minimuxer.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=\"./minimuxer/$LIB_FILE_NAME.a\"\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 */ - - CA609C732349C7AAD9FA67C4 /* staticlib */ = { - isa = PBXFileReference; - explicitFileType = "archive.ar"; - includeInIndex = 0; - name = "libminimuxer_static.a"; - sourceTree = TARGET_BUILD_DIR; - }; - CA6012A875F93EF4668187A5 /* Cargo.toml */ = { - isa = PBXFileReference; - lastKnownFileType = text; - fileEncoding = 4; - name = "Cargo.toml"; - path = "minimuxer/Cargo.toml"; - sourceTree = ""; - }; - /* Rust needs libresolv */ - ADDEDBA66A6E1 = { - isa = PBXFileReference; lastKnownFileType = "sourcecode.text-based-dylib-definition"; - name = libresolv.tbd; path = usr/lib/libresolv.tbd; sourceTree = SDKROOT; - }; - + 9987603229A454B500818586 /* minimuxer.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = minimuxer.h; path = minimuxer/minimuxer.h; sourceTree = ""; }; + ADDEDBA66A6E1 /* libresolv.tbd */ = {isa = PBXFileReference; lastKnownFileType = "sourcecode.text-based-dylib-definition"; name = libresolv.tbd; path = usr/lib/libresolv.tbd; sourceTree = SDKROOT; }; + CA609C732349C7AAD9FA67C4 /* libminimuxer_static.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libminimuxer_static.a; sourceTree = BUILT_PRODUCTS_DIR; }; /* End PBXFileReference section */ /* Begin PBXGroup section */ - CA6012A875F998AF0B5890DB /* Frameworks */ = { - isa = PBXGroup; - children = ( - ADDEDBA66A6E2, - - ); - name = Frameworks; - sourceTree = ""; - }; - - - ADDEDBA66A6E2 /* Required for static linking */ = { - isa = PBXGroup; - children = ( - ADDEDBA66A6E1 - ); - name = "Required for static linking"; - sourceTree = ""; - }; - - CA6012A875F922869D176AE5 /* Products */ = { - isa = PBXGroup; - children = ( - CA609C732349C7AAD9FA67C4, - - ); - name = Products; - sourceTree = ""; - }; - - CA6012A875F9D65BC3C892A8 /* Main */ = { - isa = PBXGroup; - children = ( - CA6012A875F93EF4668187A5, -CA6012A875F922869D176AE5, -CA6012A875F998AF0B5890DB, - - ); - sourceTree = ""; - }; - + ADDEDBA66A6E2 /* Required for static linking */ = { + isa = PBXGroup; + children = ( + ADDEDBA66A6E1 /* libresolv.tbd */, + ); + name = "Required for static linking"; + sourceTree = ""; + }; + CA6012A875F922869D176AE5 /* Products */ = { + isa = PBXGroup; + children = ( + CA609C732349C7AAD9FA67C4 /* libminimuxer_static.a */, + ); + name = Products; + sourceTree = ""; + }; + CA6012A875F998AF0B5890DB /* Frameworks */ = { + isa = PBXGroup; + children = ( + ADDEDBA66A6E2 /* Required for static linking */, + ); + name = Frameworks; + sourceTree = ""; + }; + CA6012A875F9D65BC3C892A8 = { + isa = PBXGroup; + children = ( + 9987603229A454B500818586 /* minimuxer.h */, + CA6012A875F922869D176AE5 /* Products */, + CA6012A875F998AF0B5890DB /* Frameworks */, + ); + sourceTree = ""; + }; /* End PBXGroup section */ /* Begin PBXNativeTarget section */ - CA609C732349A560B9642892 /* minimuxer-staticlib */ = { - isa = PBXNativeTarget; - buildConfigurationList = CA600589A243A560B9642892; - buildPhases = ( - CA600F638141A560B9642892 /* Sources */, - CA6012A875F9AF6EBB7F357C /* Universal Binary lipo */, - ); - buildRules = ( - CA6012A875F9AC6C1400ACA8 /* PBXBuildRule */, - ); - dependencies = ( - ); - name = "minimuxer-staticlib"; - productName = "libminimuxer_static.a"; - productReference = CA609C732349C7AAD9FA67C4; - productType = "com.apple.product-type.library.static"; - }; - + CA609C732349A560B9642892 /* minimuxer-staticlib */ = { + isa = PBXNativeTarget; + buildConfigurationList = CA600589A243A560B9642892 /* Build configuration list for PBXNativeTarget "minimuxer-staticlib" */; + buildPhases = ( + 9987603629A4611D00818586 /* ShellScript */, + CA600F638141A560B9642892 /* Sources */, + CA6012A875F9AF6EBB7F357C /* Universal Binary lipo */, + ); + buildRules = ( + CA6012A875F9AC6C1400ACA8 /* PBXBuildRule */, + ); + dependencies = ( + ); + name = "minimuxer-staticlib"; + productName = libminimuxer_static.a; + productReference = CA609C732349C7AAD9FA67C4 /* libminimuxer_static.a */; + productType = "com.apple.product-type.library.static"; + }; /* End PBXNativeTarget section */ - CA600F638141A560B9642892 = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - CA6038F2DF2FA560B9642892 - ); - runOnlyForDeploymentPostprocessing = 0; - }; - - CA600589A243A560B9642892 /* staticlib */ = { - isa = XCConfigurationList; - buildConfigurations = ( - CA602DE9FCEDA560B9642892 /* Release */, - CA6008D36272A560B9642892 /* Debug */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - CA602DE9FCEDA560B9642892 /* staticlib */ = { - isa = XCBuildConfiguration; - buildSettings = { - PRODUCT_NAME = "minimuxer_static"; - "CARGO_XCODE_CARGO_FILE_NAME" = "libminimuxer.a"; - "CARGO_XCODE_CARGO_DEP_FILE_NAME" = "libminimuxer.d"; - SUPPORTED_PLATFORMS = "macosx iphonesimulator iphoneos appletvsimulator appletvos"; - SKIP_INSTALL = YES; - INSTALL_GROUP = ""; - INSTALL_MODE_FLAG = ""; - INSTALL_OWNER = ""; - - }; - name = Release; - }; - CA6008D36272A560B9642892 /* staticlib */ = { - isa = XCBuildConfiguration; - buildSettings = { - PRODUCT_NAME = "minimuxer_static"; - "CARGO_XCODE_CARGO_FILE_NAME" = "libminimuxer.a"; - "CARGO_XCODE_CARGO_DEP_FILE_NAME" = "libminimuxer.d"; - SUPPORTED_PLATFORMS = "macosx iphonesimulator iphoneos appletvsimulator appletvos"; - SKIP_INSTALL = YES; - INSTALL_GROUP = ""; - INSTALL_MODE_FLAG = ""; - INSTALL_OWNER = ""; - - }; - name = Debug; - }; +/* Begin PBXProject section */ + CA6012A875F9E04653AD465F /* Project object */ = { + isa = PBXProject; + attributes = { + LastUpgradeCheck = 1300; + TargetAttributes = { + CA609C732349A560B9642892 = { + CreatedOnToolsVersion = 9.2; + ProvisioningStyle = Automatic; + }; + }; + }; + buildConfigurationList = CA6012A875F980E02D6C7F57 /* Build configuration list for PBXProject "minimuxer" */; + compatibilityVersion = "Xcode 11.4"; + developmentRegion = en; + hasScannedForEncodings = 0; + knownRegions = ( + en, + Base, + ); + mainGroup = CA6012A875F9D65BC3C892A8; + productRefGroup = CA6012A875F922869D176AE5 /* Products */; + projectDirPath = ""; + projectRoot = ""; + targets = ( + CA609C732349A560B9642892 /* minimuxer-staticlib */, + ); + }; +/* End PBXProject section */ - CA6012A875F9AF6EBB7F357C /* LipoScript */ = { - name = "Universal Binary lipo"; - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = (); - inputFileListPaths = (); - inputPaths = ( - "$(DERIVED_FILE_DIR)/$(ARCHS)-$(EXECUTABLE_NAME).xcfilelist", - ); - 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 "; - }; +/* Begin PBXShellScriptBuildPhase section */ + 9987603629A4611D00818586 /* ShellScript */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + ); + outputFileListPaths = ( + ); + outputPaths = ( + ./minimuxer/minimuxer.h, + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "bash ./fetch-prebuilt.sh minimuxer\n"; + }; + CA6012A875F9AF6EBB7F357C /* 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 */ - CA6012A875F980E02D6C7F57 = { - isa = XCConfigurationList; - buildConfigurations = ( - CA60A20F8EA63CC16B37690B /* Release */, - CA60A20F8EA6228BE02872F8 /* Debug */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; +/* Begin PBXSourcesBuildPhase section */ + CA600F638141A560B9642892 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 9987603329A454B500818586 /* minimuxer.h in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ - CA60A20F8EA63CC16B37690B = { - isa = XCBuildConfiguration; - buildSettings = { - - ALWAYS_SEARCH_USER_PATHS = NO; - SUPPORTS_MACCATALYST = YES; - CARGO_TARGET_DIR = "$(PROJECT_TEMP_DIR)/cargo_target"; /* for cargo */ - CARGO_XCODE_FEATURES = ""; /* configure yourself */ - "CARGO_XCODE_TARGET_ARCH[arch=arm64*]" = "aarch64"; - "CARGO_XCODE_TARGET_ARCH[arch=x86_64*]" = "x86_64"; /* catalyst adds h suffix */ - "CARGO_XCODE_TARGET_ARCH[arch=i386]" = "i686"; - "CARGO_XCODE_TARGET_OS[sdk=macosx*]" = "darwin"; - "CARGO_XCODE_TARGET_OS[sdk=iphonesimulator*]" = "ios-sim"; - "CARGO_XCODE_TARGET_OS[sdk=iphonesimulator*][arch=x86_64*]" = "ios"; - "CARGO_XCODE_TARGET_OS[sdk=iphoneos*]" = "ios"; - "CARGO_XCODE_TARGET_OS[sdk=appletvsimulator*]" = "tvos"; - "CARGO_XCODE_TARGET_OS[sdk=appletvos*]" = "tvos"; - PRODUCT_NAME = "minimuxer"; - MARKETING_VERSION = "0.1.0"; - CURRENT_PROJECT_VERSION = "0.1"; - SDKROOT = macosx; - - "CARGO_XCODE_BUILD_MODE" = "release"; /* for xcode scripts */ - }; - name = Release; - }; +/* Begin XCBuildConfiguration section */ + CA6008D36272A560B9642892 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + CARGO_XCODE_CARGO_DEP_FILE_NAME = libminimuxer.d; + CARGO_XCODE_CARGO_FILE_NAME = libminimuxer.a; + INSTALL_GROUP = ""; + INSTALL_MODE_FLAG = ""; + INSTALL_OWNER = ""; + LIB_FILE_NAME = ""; + "LIB_FILE_NAME[sdk=iphoneos*]" = libminimuxer; + "LIB_FILE_NAME[sdk=iphonesimulator*]" = "libminimuxer-sim"; + PRODUCT_NAME = minimuxer_static; + SKIP_INSTALL = YES; + SUPPORTED_PLATFORMS = "macosx iphonesimulator iphoneos appletvsimulator appletvos"; + }; + name = Debug; + }; + CA602DE9FCEDA560B9642892 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + CARGO_XCODE_CARGO_DEP_FILE_NAME = libminimuxer.d; + CARGO_XCODE_CARGO_FILE_NAME = libminimuxer.a; + INSTALL_GROUP = ""; + INSTALL_MODE_FLAG = ""; + INSTALL_OWNER = ""; + LIB_FILE_NAME = ""; + "LIB_FILE_NAME[sdk=iphoneos*]" = libminimuxer; + "LIB_FILE_NAME[sdk=iphonesimulator*]" = "libminimuxer-sim"; + PRODUCT_NAME = minimuxer_static; + SKIP_INSTALL = YES; + SUPPORTED_PLATFORMS = "macosx iphonesimulator iphoneos appletvsimulator appletvos"; + }; + name = Release; + }; + CA60A20F8EA6228BE02872F8 /* 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 = minimuxer; + SDKROOT = macosx; + SUPPORTS_MACCATALYST = YES; + }; + name = Debug; + }; + CA60A20F8EA63CC16B37690B /* 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 = minimuxer; + SDKROOT = macosx; + SUPPORTS_MACCATALYST = YES; + }; + name = Release; + }; +/* End XCBuildConfiguration section */ - CA60A20F8EA6228BE02872F8 = { - isa = XCBuildConfiguration; - buildSettings = { - - ALWAYS_SEARCH_USER_PATHS = NO; - SUPPORTS_MACCATALYST = YES; - CARGO_TARGET_DIR = "$(PROJECT_TEMP_DIR)/cargo_target"; /* for cargo */ - CARGO_XCODE_FEATURES = ""; /* configure yourself */ - "CARGO_XCODE_TARGET_ARCH[arch=arm64*]" = "aarch64"; - "CARGO_XCODE_TARGET_ARCH[arch=x86_64*]" = "x86_64"; /* catalyst adds h suffix */ - "CARGO_XCODE_TARGET_ARCH[arch=i386]" = "i686"; - "CARGO_XCODE_TARGET_OS[sdk=macosx*]" = "darwin"; - "CARGO_XCODE_TARGET_OS[sdk=iphonesimulator*]" = "ios-sim"; - "CARGO_XCODE_TARGET_OS[sdk=iphonesimulator*][arch=x86_64*]" = "ios"; - "CARGO_XCODE_TARGET_OS[sdk=iphoneos*]" = "ios"; - "CARGO_XCODE_TARGET_OS[sdk=appletvsimulator*]" = "tvos"; - "CARGO_XCODE_TARGET_OS[sdk=appletvos*]" = "tvos"; - PRODUCT_NAME = "minimuxer"; - MARKETING_VERSION = "0.1.0"; - CURRENT_PROJECT_VERSION = "0.1"; - SDKROOT = macosx; - - "CARGO_XCODE_BUILD_MODE" = "debug"; /* for xcode scripts */ - ONLY_ACTIVE_ARCH = YES; - }; - name = Debug; - }; - - CA6012A875F9E04653AD465F = { - isa = PBXProject; - attributes = { - LastUpgradeCheck = 1300; - TargetAttributes = { - CA609C732349A560B9642892 = { - CreatedOnToolsVersion = 9.2; - ProvisioningStyle = Automatic; - }; - }; - }; - buildConfigurationList = CA6012A875F980E02D6C7F57; - compatibilityVersion = "Xcode 11.4"; - developmentRegion = en; - hasScannedForEncodings = 0; - knownRegions = ( - en, - Base, - ); - mainGroup = CA6012A875F9D65BC3C892A8; - productRefGroup = CA6012A875F922869D176AE5 /* Products */; - projectDirPath = ""; - projectRoot = ""; - targets = ( - CA609C732349A560B9642892, - - ); - }; - - }; - rootObject = CA6012A875F9E04653AD465F; +/* Begin XCConfigurationList section */ + CA600589A243A560B9642892 /* Build configuration list for PBXNativeTarget "minimuxer-staticlib" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + CA602DE9FCEDA560B9642892 /* Release */, + CA6008D36272A560B9642892 /* Debug */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + CA6012A875F980E02D6C7F57 /* Build configuration list for PBXProject "minimuxer" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + CA60A20F8EA63CC16B37690B /* Release */, + CA60A20F8EA6228BE02872F8 /* Debug */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; +/* End XCConfigurationList section */ + }; + rootObject = CA6012A875F9E04653AD465F /* Project object */; } - \ No newline at end of file diff --git a/Dependencies/minimuxer/.gitkeep b/Dependencies/minimuxer/.gitkeep new file mode 100644 index 00000000..d338f61d --- /dev/null +++ b/Dependencies/minimuxer/.gitkeep @@ -0,0 +1 @@ +Use ../fetch-prebuilt.sh to fetch prebuilt Rust dependencies \ No newline at end of file diff --git a/Dependencies/update.sh b/Dependencies/update.sh deleted file mode 100755 index bdcea4c2..00000000 --- a/Dependencies/update.sh +++ /dev/null @@ -1,10 +0,0 @@ -#!/usr/bin/env bash -set -e; set -o pipefail; set -x; - -echo "Building Rust projects..." -cd em_proxy -cargo xcode --output-dir ../ -cd ../ -cd minimuxer -cargo xcode --output-dir ../ -echo "Done!" diff --git a/EmotionalDamage/em_proxy.h b/EmotionalDamage/em_proxy.h deleted file mode 100644 index fd09f4fa..00000000 --- a/EmotionalDamage/em_proxy.h +++ /dev/null @@ -1,40 +0,0 @@ -// Jackson Coxson - -#include -#include -#include -#include -#include - - -/** - * Starts your emotional damage - * # Arguments - * * `bind_addr` - The UDP socket to listen to - * # Returns - * A handle to stop further emotional damage. - * Null on failure - * # Safety - * Don't be stupid - */ -int start_emotional_damage(const char *bind_addr); - -/** - * Stops further emotional damage - * # Arguments - * * `handle` - The coping mechanism generated by start_emotional_damage - * # Returns - * The knowledge of knowing that you couldn't handle failure - * # Safety - * Don't be stupid - */ -void stop_emotional_damage(void); - -/** - * Blocks until Wireguard is ready - * # Arguments - * * `timeout` - The timeout in miliseconds to wait for Wireguard - * # Returns - * 0 on success, -1 on failure - */ -int test_emotional_damage(int timeout); diff --git a/minimuxer/minimuxer.h b/minimuxer/minimuxer.h deleted file mode 100644 index 0abc5419..00000000 --- a/minimuxer/minimuxer.h +++ /dev/null @@ -1,76 +0,0 @@ -// Jackson Coxson - -#include -#include -#include -#include -#include - - -/** - * Mount iOS's developer DMG - * # Safety - * Don't be stupid - */ -void minimuxer_auto_mount(char *docs_path); - -/** - * Starts the muxer and heartbeat client - * # Arguments - * Pairing file as a list of chars and the length - * # Safety - * Don't be stupid - */ -int minimuxer_c_start(char *pairing_file, char *log_path); - -/** - * Debugs an app from an app ID - * # Safety - * Don't be stupid - */ -int minimuxer_debug_app(char *app_id); - -/** - * Installs an ipa with a bundle ID - * Expects the ipa to be in the afc jail from yeet_app_afc - * # Safety - * Don't be stupid - */ -int minimuxer_install_ipa(char *bundle_id); - -/** - * Installs a provisioning profile on the device - * # Arguments - * Pass a pointer to a plist - * # Returns - * 0 on success - * # Safety - * Don't be stupid - */ -int minimuxer_install_provisioning_profile(uint8_t *pointer, unsigned int len); - -/** - * Removes an app from the device - * # Safety - * Don't be stupid - */ -int minimuxer_remove_app(char *bundle_id); - -/** - * Removes a provisioning profile - * # Safety - * Don't be stupid - */ -int minimuxer_remove_provisioning_profile(char *id); - -/** - * Yeets an ipa to the afc jail - * # Safety - * Don't be stupid - */ -int minimuxer_yeet_app_afc(char *bundle_id, uint8_t *bytes_ptr, unsigned long bytes_len); - -/** - * Sets the current environment variable for libusbmuxd to localhost - */ -void target_minimuxer_address(void); From 2e6300cce2697758d639060e98e76c0dc70f4bb3 Mon Sep 17 00:00:00 2001 From: naturecodevoid <44983869+naturecodevoid@users.noreply.github.com> Date: Mon, 20 Feb 2023 18:50:40 -0800 Subject: [PATCH 06/48] add changes from attempt #1 --- .github/workflows/beta.yml | 45 ----------------------------- .github/workflows/nightly.yml | 45 ----------------------------- .github/workflows/pr.yml | 45 ----------------------------- .github/workflows/stable.yml | 45 ----------------------------- .gitignore | 2 +- CONTRIBUTING.md | 54 +++++++++++++++++++++++++++++++++++ README.md | 16 ++--------- 7 files changed, 57 insertions(+), 195 deletions(-) create mode 100644 CONTRIBUTING.md diff --git a/.github/workflows/beta.yml b/.github/workflows/beta.yml index 08d47507..88919c15 100644 --- a/.github/workflows/beta.yml +++ b/.github/workflows/beta.yml @@ -25,45 +25,6 @@ jobs: with: submodules: recursive - # - name: Cache rust cargo - # id: cache-rust-cargo - # uses: actions/cache@v3 - # env: - # cache-name: cache-rust-cargo - # with: - # path: ~/.cargo - # key: ${{ runner.os }}-build-${{ env.cache-name }}-${{ hashFiles('**/package-lock.json') }} - # restore-keys: | - # ${{ runner.os }}-build-${{ env.cache-name }}- - # ${{ runner.os }}-build- - # ${{ runner.os }}- - - # - name: Cache rust minimuxer - # id: cache-rust-minimuxer - # uses: actions/cache@v3 - # env: - # cache-name: cache-rust-minimuxer - # with: - # path: ./Dependencies/minimuxer/target - # key: ${{ runner.os }}-build-${{ env.cache-name }}-${{ hashFiles('**/package-lock.json') }} - # restore-keys: | - # ${{ runner.os }}-build-${{ env.cache-name }}- - # ${{ runner.os }}-build- - # ${{ runner.os }}- - - # - name: Cache rust em_proxy - # id: cache-rust-em_proxy - # uses: actions/cache@v3 - # env: - # cache-name: cache-rust-em_proxy - # with: - # path: ./Dependencies/em_proxy/target - # key: ${{ runner.os }}-build-${{ env.cache-name }}-${{ hashFiles('**/package-lock.json') }} - # restore-keys: | - # ${{ runner.os }}-build-${{ env.cache-name }}- - # ${{ runner.os }}-build- - # ${{ runner.os }}- - - name: Install dependencies run: brew install ldid @@ -74,12 +35,6 @@ jobs: override: true target: aarch64-apple-ios - # - name: Create emotional damage - # run: cd Dependencies/em_proxy && cargo build --release --target aarch64-apple-ios - - # - name: Build minimuxer - # run: cd Dependencies/minimuxer && cargo build --release --target aarch64-apple-ios - - name: Add beta suffix to version run: sed -e '/MARKETING_VERSION = .*/s/$/-beta.${{ github.run_number }}/' -i '' Build.xcconfig diff --git a/.github/workflows/nightly.yml b/.github/workflows/nightly.yml index 2f8d62ba..b2fe9fa6 100644 --- a/.github/workflows/nightly.yml +++ b/.github/workflows/nightly.yml @@ -24,45 +24,6 @@ jobs: with: submodules: recursive - # - name: Cache rust cargo - # id: cache-rust-cargo - # uses: actions/cache@v3 - # env: - # cache-name: cache-rust-cargo - # with: - # path: ~/.cargo - # key: ${{ runner.os }}-build-${{ env.cache-name }}-${{ hashFiles('**/package-lock.json') }} - # restore-keys: | - # ${{ runner.os }}-build-${{ env.cache-name }}- - # ${{ runner.os }}-build- - # ${{ runner.os }}- - - # - name: Cache rust minimuxer - # id: cache-rust-minimuxer - # uses: actions/cache@v3 - # env: - # cache-name: cache-rust-minimuxer - # with: - # path: ./Dependencies/minimuxer/target - # key: ${{ runner.os }}-build-${{ env.cache-name }}-${{ hashFiles('**/package-lock.json') }} - # restore-keys: | - # ${{ runner.os }}-build-${{ env.cache-name }}- - # ${{ runner.os }}-build- - # ${{ runner.os }}- - - # - name: Cache rust em_proxy - # id: cache-rust-em_proxy - # uses: actions/cache@v3 - # env: - # cache-name: cache-rust-em_proxy - # with: - # path: ./Dependencies/em_proxy/target - # key: ${{ runner.os }}-build-${{ env.cache-name }}-${{ hashFiles('**/package-lock.json') }} - # restore-keys: | - # ${{ runner.os }}-build-${{ env.cache-name }}- - # ${{ runner.os }}-build- - # ${{ runner.os }}- - - name: Install dependencies run: brew install ldid @@ -73,12 +34,6 @@ jobs: override: true target: aarch64-apple-ios - # - name: Create emotional damage - # run: cd Dependencies/em_proxy && cargo build --release --target aarch64-apple-ios - - # - name: Build minimuxer - # run: cd Dependencies/minimuxer && cargo build --release --target aarch64-apple-ios - - name: Add nightly suffix to version run: sed -e '/MARKETING_VERSION = .*/s/$/-nightly.${{ github.run_number }}/' -i '' Build.xcconfig diff --git a/.github/workflows/pr.yml b/.github/workflows/pr.yml index 74f32311..b06c0a40 100644 --- a/.github/workflows/pr.yml +++ b/.github/workflows/pr.yml @@ -19,45 +19,6 @@ jobs: with: submodules: recursive - # - name: Cache rust cargo - # id: cache-rust-cargo - # uses: actions/cache@v3 - # env: - # cache-name: cache-rust-cargo - # with: - # path: ~/.cargo - # key: ${{ runner.os }}-build-${{ env.cache-name }}-${{ hashFiles('**/package-lock.json') }} - # restore-keys: | - # ${{ runner.os }}-build-${{ env.cache-name }}- - # ${{ runner.os }}-build- - # ${{ runner.os }}- - - # - name: Cache rust minimuxer - # id: cache-rust-minimuxer - # uses: actions/cache@v3 - # env: - # cache-name: cache-rust-minimuxer - # with: - # path: ./Dependencies/minimuxer/target - # key: ${{ runner.os }}-build-${{ env.cache-name }}-${{ hashFiles('**/package-lock.json') }} - # restore-keys: | - # ${{ runner.os }}-build-${{ env.cache-name }}- - # ${{ runner.os }}-build- - # ${{ runner.os }}- - - # - name: Cache rust em_proxy - # id: cache-rust-em_proxy - # uses: actions/cache@v3 - # env: - # cache-name: cache-rust-em_proxy - # with: - # path: ./Dependencies/em_proxy/target - # key: ${{ runner.os }}-build-${{ env.cache-name }}-${{ hashFiles('**/package-lock.json') }} - # restore-keys: | - # ${{ runner.os }}-build-${{ env.cache-name }}- - # ${{ runner.os }}-build- - # ${{ runner.os }}- - - name: Install dependencies run: brew install ldid @@ -68,12 +29,6 @@ jobs: override: true target: aarch64-apple-ios - # - name: Create emotional damage - # run: cd Dependencies/em_proxy && cargo build --release --target aarch64-apple-ios - - # - name: Build minimuxer - # run: cd Dependencies/minimuxer && cargo build --release --target aarch64-apple-ios - - name: Add PR suffix to version run: sed -e '/MARKETING_VERSION = .*/s/$/-pr.${{ github.event.pull_request.number }}/' -i '' Build.xcconfig diff --git a/.github/workflows/stable.yml b/.github/workflows/stable.yml index a49bfa42..e6d1bb12 100644 --- a/.github/workflows/stable.yml +++ b/.github/workflows/stable.yml @@ -21,45 +21,6 @@ jobs: with: submodules: recursive - # - name: Cache rust cargo - # id: cache-rust-cargo - # uses: actions/cache@v3 - # env: - # cache-name: cache-rust-cargo - # with: - # path: ~/.cargo - # key: ${{ runner.os }}-build-${{ env.cache-name }}-${{ hashFiles('**/package-lock.json') }} - # restore-keys: | - # ${{ runner.os }}-build-${{ env.cache-name }}- - # ${{ runner.os }}-build- - # ${{ runner.os }}- - - # - name: Cache rust minimuxer - # id: cache-rust-minimuxer - # uses: actions/cache@v3 - # env: - # cache-name: cache-rust-minimuxer - # with: - # path: ./Dependencies/minimuxer/target - # key: ${{ runner.os }}-build-${{ env.cache-name }}-${{ hashFiles('**/package-lock.json') }} - # restore-keys: | - # ${{ runner.os }}-build-${{ env.cache-name }}- - # ${{ runner.os }}-build- - # ${{ runner.os }}- - - # - name: Cache rust em_proxy - # id: cache-rust-em_proxy - # uses: actions/cache@v3 - # env: - # cache-name: cache-rust-em_proxy - # with: - # path: ./Dependencies/em_proxy/target - # key: ${{ runner.os }}-build-${{ env.cache-name }}-${{ hashFiles('**/package-lock.json') }} - # restore-keys: | - # ${{ runner.os }}-build-${{ env.cache-name }}- - # ${{ runner.os }}-build- - # ${{ runner.os }}- - - name: Install dependencies run: brew install ldid @@ -70,12 +31,6 @@ jobs: override: true target: aarch64-apple-ios - # - name: Create emotional damage - # run: cd Dependencies/em_proxy && cargo build --release --target aarch64-apple-ios - - # - name: Build minimuxer - # run: cd Dependencies/minimuxer && cargo build --release --target aarch64-apple-ios - - name: Setup Xcode uses: maxim-lobanov/setup-xcode@v1.4.1 with: diff --git a/.gitignore b/.gitignore index 6165c5d4..5292f2a9 100644 --- a/.gitignore +++ b/.gitignore @@ -37,7 +37,7 @@ xcuserdata Payload/ SideStore.ipa -Dependencies/.*-prebuilt-fetch* +Dependencies/.*-prebuilt-fetch-* Dependencies/minimuxer/* Dependencies/em_proxy/* !Dependencies/**/.gitkeep diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md new file mode 100644 index 00000000..2b2a58c5 --- /dev/null +++ b/CONTRIBUTING.md @@ -0,0 +1,54 @@ +# Contributing to SideStore + +Thank you for your interest in contributing to SideStore! SideStore is a community driven project, and it's made possible by people like you. + +There are many ways to contribute to SideStore, so if you aren't a developer, there are still many other ways you can help out: + +- [Writing documentation](https://github.com/SideStore/SideStore-Docs) +- [Submitting detailed bug reports and suggesting new features](https://github.com/SideStore/SideStore/issues/new/choose) +- Helping out with support + - [Discord](https://discord.gg/RgpFBX3Q3k) + - [GitHub Discussions](https://github.com/SideStore/SideStore/discussions) + +However, this guide will focus on the development side of things. For now, we will only have setup information here, but you can [join our Discord](https://discord.gg/RgpFBX3Q3k) if you need help +after setup. + +## Requirements + +This guide assumes you: + +- are on a Mac +- have Xcode installed +- have basic command line knowledge (know how to run commands, cd into a directory) +- have basic Git knowledge ([GitHub Desktop](https://desktop.github.com) is a great tool for beginners, and greatly simplifies working with Git) +- have basic Swift/iOS development knowledge + +## Setup + +1. Fork the SideStore repo on GitHub. +2. Clone the fork: `git clone https://github.com//SideStore.git --recurse-submodules` + + If you are using GitHub Desktop, refer to + [this guide](https://docs.github.com/en/desktop/contributing-and-collaborating-using-github-desktop/adding-and-cloning-repositories/cloning-and-forking-repositories-from-github-desktop). + +3. Copy `CodeSigning.xcconfig.sample` to `CodeSigning.xcconfig` and fill in the values. +4. **(Development only)** Change the value for `ALTDeviceID` in the Info.plist to your device's UDID. Normally, SideServer embeds the device's UDID in SideStore's Info.plist during installation. When + running through Xcode you'll need to set the value yourself or else SideStore won't resign (or even install) apps for the proper device. You can achieve this by changing a few things to be able to + build and use SideStore. +5. Finally, open `AltStore.xcodeproj` in Xcode. + +Next, make and test your changes. Then, commit and push your changes using git and make a pull request. + +## Prebuilt binary information + +minimuxer (and soon em_proxy) uses prebuilt static library binaries built by GitHub Actions to speed up builds and remove the need for Rust to be installed when working on SideStore. +[`Dependencies/fetch-prebuilt.sh`](./Dependencies/fetch-prebuilt.sh) will be run before each build by Xcode, and it will check if the downloaded binaries are up-to-date once every 6 hours. If you want +to force it to check for new binaries, run `bash ./Dependencies/fetch-prebuilt.sh force`. + +## Building an IPA for distribution + +It is recommended to follow the build steps GitHub Actions uses: [`.github/workflows/stable.yml`](./.github/workflows/stable.yml) (in particular, the `Build SideStore`, `Fakesign app` and `Convert to IPA` build steps) + +## Developing minimuxer alongside SideStore + +Please see [minimuxer's README](https://github.com/SideStore/minimuxer) for development instructions. diff --git a/README.md b/README.md index 06da08e6..f2ea9d21 100644 --- a/README.md +++ b/README.md @@ -35,21 +35,9 @@ SideStore is a just regular, sandboxed iOS application. The AltStore app target We're hoping to eventually eliminate our dependency on it, as it increases the amount of unnecessary Objective-C in the project. -## Compilation Instructions -SideStore is fairly straightforward to compile and run if you're already an iOS or macOS developer. Here are some basic instructions to get you started: +## Contributing/Compilation Instructions -1. Clone the repository - ``` - git clone https://github.com/SideStore/SideStore.git --recurse-submodules - ``` -2. After installing Rustup, run `rustup target add aarch64-apple-ios` -12. Within the Dependencies/em_proxy and Dependencies/minimuxer directories, run `cargo build --release --target aarch64-apple-ios` -2. Open `AltStore.xcodeproj` and select the AltStore project in the project navigator. On the `Signing & Capabilities` tab, change the team from to your own account. -3. **(Development only)** Change the value for `ALTDeviceID` in the Info.plist to your device's UDID. Normally, SideServer embeds the device's UDID in SideStore's Info.plist during installation. When running through Xcode you'll need to set the value yourself or else SideStore won't resign (or even install) apps for the proper device. You can achieve this by changing a few things to be able to build and use SideStore. -5. Copy `CodeSigning.xcconfig.sample` to `CodeSigning.xcconfig` -6. Fill out all of the properties in `CodeSigning.xcconfig` to match your account. -7. In `Shared/Extensions/Bundle+AltStore.swift`, replace "group.com.rileytestut.AltStore" with your own App Group ID. -8. Build + run app! 🎉 +Please see [CONTRIBUTING.md](./CONTRIBUTING.md) ## Licensing From e87c5376428f9e9be50b62544340581996bf59ee Mon Sep 17 00:00:00 2001 From: naturecodevoid <44983869+naturecodevoid@users.noreply.github.com> Date: Mon, 20 Feb 2023 18:58:42 -0800 Subject: [PATCH 07/48] Update CONTRIBUTING.md --- CONTRIBUTING.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 2b2a58c5..6e30b604 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -41,7 +41,7 @@ Next, make and test your changes. Then, commit and push your changes using git a ## Prebuilt binary information -minimuxer (and soon em_proxy) uses prebuilt static library binaries built by GitHub Actions to speed up builds and remove the need for Rust to be installed when working on SideStore. +minimuxer and em_proxy use prebuilt static library binaries built by GitHub Actions to speed up builds and remove the need for Rust to be installed when working on SideStore. [`Dependencies/fetch-prebuilt.sh`](./Dependencies/fetch-prebuilt.sh) will be run before each build by Xcode, and it will check if the downloaded binaries are up-to-date once every 6 hours. If you want to force it to check for new binaries, run `bash ./Dependencies/fetch-prebuilt.sh force`. From 4b343b500d334680a33f36b11736747e0529e12a Mon Sep 17 00:00:00 2001 From: naturecodevoid <44983869+naturecodevoid@users.noreply.github.com> Date: Mon, 20 Feb 2023 19:43:46 -0800 Subject: [PATCH 08/48] fetch-prebuilt.sh whitespace improvement --- Dependencies/fetch-prebuilt.sh | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/Dependencies/fetch-prebuilt.sh b/Dependencies/fetch-prebuilt.sh index b4cc34d4..0acbfae3 100644 --- a/Dependencies/fetch-prebuilt.sh +++ b/Dependencies/fetch-prebuilt.sh @@ -43,7 +43,9 @@ check_for_update() { # Allow for Xcode to check minimuxer and em_proxy separately by skipping the update check if the other one is specified as an argument if [[ "$1" != "em_proxy" ]]; then check_for_update minimuxer "$1" - echo + if [[ "$1" != "minimuxer" ]]; then + echo + fi fi if [[ "$1" != "minimuxer" ]]; then check_for_update em_proxy "$1" From 332b81c803da2d5b760a35c53ba5420a6029ffaa Mon Sep 17 00:00:00 2001 From: naturecodevoid <44983869+naturecodevoid@users.noreply.github.com> Date: Mon, 20 Feb 2023 20:36:39 -0800 Subject: [PATCH 09/48] No more rust --- .github/workflows/beta.yml | 7 ------- .github/workflows/nightly.yml | 7 ------- .github/workflows/pr.yml | 7 ------- .github/workflows/stable.yml | 7 ------- 4 files changed, 28 deletions(-) diff --git a/.github/workflows/beta.yml b/.github/workflows/beta.yml index 88919c15..ff068d43 100644 --- a/.github/workflows/beta.yml +++ b/.github/workflows/beta.yml @@ -28,13 +28,6 @@ jobs: - name: Install dependencies run: brew install ldid - - name: Install rustup - uses: actions-rs/toolchain@v1 - with: - toolchain: stable - override: true - target: aarch64-apple-ios - - name: Add beta suffix to version run: sed -e '/MARKETING_VERSION = .*/s/$/-beta.${{ github.run_number }}/' -i '' Build.xcconfig diff --git a/.github/workflows/nightly.yml b/.github/workflows/nightly.yml index b2fe9fa6..705156ca 100644 --- a/.github/workflows/nightly.yml +++ b/.github/workflows/nightly.yml @@ -27,13 +27,6 @@ jobs: - name: Install dependencies run: brew install ldid - - name: Install rustup - uses: actions-rs/toolchain@v1 - with: - toolchain: stable - override: true - target: aarch64-apple-ios - - name: Add nightly suffix to version run: sed -e '/MARKETING_VERSION = .*/s/$/-nightly.${{ github.run_number }}/' -i '' Build.xcconfig diff --git a/.github/workflows/pr.yml b/.github/workflows/pr.yml index b06c0a40..2de7ed2f 100644 --- a/.github/workflows/pr.yml +++ b/.github/workflows/pr.yml @@ -22,13 +22,6 @@ jobs: - name: Install dependencies run: brew install ldid - - name: Install rustup - uses: actions-rs/toolchain@v1 - with: - toolchain: stable - override: true - target: aarch64-apple-ios - - name: Add PR suffix to version run: sed -e '/MARKETING_VERSION = .*/s/$/-pr.${{ github.event.pull_request.number }}/' -i '' Build.xcconfig diff --git a/.github/workflows/stable.yml b/.github/workflows/stable.yml index e6d1bb12..8989ab88 100644 --- a/.github/workflows/stable.yml +++ b/.github/workflows/stable.yml @@ -24,13 +24,6 @@ jobs: - name: Install dependencies run: brew install ldid - - name: Install rustup - uses: actions-rs/toolchain@v1 - with: - toolchain: stable - override: true - target: aarch64-apple-ios - - name: Setup Xcode uses: maxim-lobanov/setup-xcode@v1.4.1 with: From 6f8c27793e111eb4d489d7cc91f8959a697371c4 Mon Sep 17 00:00:00 2001 From: naturecodevoid <44983869+naturecodevoid@users.noreply.github.com> Date: Tue, 21 Feb 2023 12:19:08 -0800 Subject: [PATCH 10/48] cleanup makefile and add build steps from github actions --- Makefile | 134 +++++++++---------------------------------------------- 1 file changed, 20 insertions(+), 114 deletions(-) diff --git a/Makefile b/Makefile index 69952f3f..960a8b80 100644 --- a/Makefile +++ b/Makefile @@ -2,8 +2,6 @@ SHELL := /bin/bash .PHONY: help ios update tvos RUBY := $(shell command -v ruby 2>/dev/null) -RUST := $(shell command -v rust 2>/dev/null) -RUSTUP := $(shell command -v rustup 2>/dev/null) HOMEBREW := $(shell command -v brew 2>/dev/null) BUNDLER := $(shell command -v bundle 2>/dev/null) @@ -73,9 +71,6 @@ help: ## Install dependencies. setup: \ pre_setup \ - install_rust \ - install_rustup \ - install_rust_toolchain \ build_rust_dependencies # check_for_homebrew \ @@ -89,20 +84,6 @@ pull_request: \ pre_setup: $(info Project setup…) -check_for_rust: - $(info Checking for Rust…) - -ifeq ($(RUST),) - $(error Rust is not installed.) -endif - -check_for_rustup: - $(info Checking for Rustup…) - -ifeq ($(RUSTUP),) - $(error Rust is not installed.) -endif - check_for_ruby: $(info Checking for Ruby…) @@ -153,79 +134,12 @@ pull: ## -- Source Code Tasks -- ## Pull upstream and update 3rd party frameworks -# update: pull submodules build_rust_dependencies -update: submodules build_rust_dependencies +update: submodules submodules: $(info Updating submodules…) - git submodule update --init --recursive - -build_rust_dependencies: - $(info Building Rust dependencies…) - - pushd Dependencies/em_proxy - cargo build --release --target aarch64-apple-ios - popd - pushd Dependencies/minimuxer - cargo build --release --target aarch64-apple-ios - popd - -install_rustup: - $(info Installing Rustup…) - - curl https://sh.rustup.rs -sSf | sh - source "$(HOME)/.cargo/env" - rustup target add aarch64-apple-ios - -# TODO: Add x86, armv7? toolchains -# https://doc.rust-lang.org/nightly/rustc/platform-support.html - -install_cbindgen: - $(info Installing cbindgen…) - - cargo install cbindgen - -install_rust_toolchain: - $(info Installing Rust toolchain…) - - rustup target add aarch64-apple-ios - -install_rust_toolchain_ios_sim: - $(info Installing Rust iOS Sim toolchain…) - - rustup target add aarch64-apple-ios-sim - -install_rust_toolchain_tvos: - $(info Installing Rust tvOS toolchain…) - - rustup target add aarch64-apple-tvos - -install_rust_toolchain_tvos_sim: - $(info Installing Rust tvOS Sim toolchain…) - - rustup target add aarch64-apple-tvos-sim - -install_rust_toolchain_watchos_sim: - $(info Installing Rust watchOS Sim toolchain…) - - rustup target add aarch64-apple-watchos-sim - -install_rust_toolchain_watchos: - $(info Installing Rust watchOS toolchain…) - - rustup target add aarch64-apple-watchos - -install_rust_toolchain_catalyst: - $(info Installing Rust macOS Catalyst toolchain…) - - rustup target add aarch64-apple-ios-macabi - -install_rust: - $(info Installing Rust…) - - curl https://sh.rustup.rs -sSf | sh - source "$(HOME)/.cargo/env" + git submodule update --init --recursive --remote ## -- QA Task Runners -- @@ -243,32 +157,24 @@ test: ## -- Building -- -developer_ios: - $(info Building iOS for Developer profile…) +build: + @xcodebuild -project AltStore.xcodeproj \ + -scheme AltStore \ + -sdk iphoneos \ + archive -archivePath ./archive \ + CODE_SIGNING_REQUIRED=NO \ + AD_HOC_CODE_SIGNING_ALLOWED=YES \ + CODE_SIGNING_ALLOWED=NO \ + DEVELOPMENT_TEAM=XYZ0123456 \ + ORG_IDENTIFIER=com.SideStore - xcodebuild -project AltStore.xcodeproj -scheme AltStore -sdk iphoneos archive -archivePath ./archive CODE_SIGNING_REQUIRED=NO AD_HOC_CODE_SIGNING_ALLOWED=YES CODE_SIGNING_ALLOWED=NO DEVELOPMENT_TEAM=XYZ0123456 ORG_IDENTIFIER=com.SideStore | xcpretty +fakesign: + rm -rf archive.xcarchive/Products/Applications/SideStore.app/Frameworks/AltStoreCore.framework/Frameworks/ + ldid -SAltStore/Resources/tempEnt.plist archive.xcarchive/Products/Applications/SideStore.app/SideStore -developer_tvos: - $(info Building tvOS for Developer profile…) +ipa: + mkdir Payload + mkdir Payload/SideStore.app + cp -R archive.xcarchive/Products/Applications/SideStore.app/ Payload/SideStore.app/ + zip -r SideStore.ipa Payload - xcodebuild -project AltStore.xcodeproj -scheme AltStore -sdk tvos archive -archivePath ./archive CODE_SIGNING_REQUIRED=NO AD_HOC_CODE_SIGNING_ALLOWED=YES CODE_SIGNING_ALLOWED=NO DEVELOPMENT_TEAM=XYZ0123456 ORG_IDENTIFIER=com.SideStore | xcpretty - -## Update & build for iOS -ios: | update developer_ios - -## Update & build for tvOS -tvos: | update developer_tvos - -## Open the workspace -open: - open AltStore.xcodeproj - -## tag and release to github -release: | _var_VERSION - @if ! git diff --quiet HEAD; then \ - ( $(call _error,refusing to release with uncommitted changes) ; exit 1 ); \ - fi - test - package - make --no-print-directory _tag VERSION=$(VERSION) - make --no-print-directory _push VERSION=$(VERSION) From 173c585f2d319417d6395d4e9dbf8a8e1799fc4d Mon Sep 17 00:00:00 2001 From: naturecodevoid <44983869+naturecodevoid@users.noreply.github.com> Date: Tue, 21 Feb 2023 12:23:12 -0800 Subject: [PATCH 11/48] cleanup actions, revamp beta action, modify nightly build num system to be day specific --- .github/workflows/beta.yml | 47 +++++++------------ .../workflows/increase-nightly-build-num.sh | 28 +++++++++++ .github/workflows/nightly.yml | 32 +++++-------- .github/workflows/pr.yml | 22 ++------- .github/workflows/stable.yml | 29 ++++-------- .gitignore | 1 + 6 files changed, 67 insertions(+), 92 deletions(-) create mode 100644 .github/workflows/increase-nightly-build-num.sh diff --git a/.github/workflows/beta.yml b/.github/workflows/beta.yml index ff068d43..ec7ab82e 100644 --- a/.github/workflows/beta.yml +++ b/.github/workflows/beta.yml @@ -1,16 +1,12 @@ name: Beta SideStore build on: push: - branches: - - develop + tags: + - '[0-9]+.[0-9]+.[0-9]+-beta.[0-9]+' # example: 1.0.0-beta.1 jobs: build: name: Build and upload SideStore Beta - if: startsWith(github.event.head_commit.message, '[beta]') - concurrency: - group: ${{ github.ref }} - cancel-in-progress: true strategy: fail-fast: false matrix: @@ -28,8 +24,8 @@ jobs: - name: Install dependencies run: brew install ldid - - name: Add beta suffix to version - run: sed -e '/MARKETING_VERSION = .*/s/$/-beta.${{ github.run_number }}/' -i '' Build.xcconfig + - name: Change version to tag + run: sed -e '/MARKETING_VERSION = .*/s/= .*/= ${{ github.ref_name }}/' -i '' Build.xcconfig - name: Setup Xcode uses: maxim-lobanov/setup-xcode@v1.4.1 @@ -37,29 +33,13 @@ jobs: xcode-version: ${{ matrix.version }} - name: Build SideStore - run: | - xcodebuild -project AltStore.xcodeproj \ - -scheme AltStore \ - -sdk iphoneos \ - archive -archivePath ./archive \ - CODE_SIGNING_REQUIRED=NO \ - AD_HOC_CODE_SIGNING_ALLOWED=YES \ - CODE_SIGNING_ALLOWED=NO \ - DEVELOPMENT_TEAM=XYZ0123456 \ - ORG_IDENTIFIER=com.SideStore \ - | xcpretty && exit ${PIPESTATUS[0]} + run: make build | xcpretty && exit ${PIPESTATUS[0]} - name: Fakesign app - run: | - rm -rf archive.xcarchive/Products/Applications/SideStore.app/Frameworks/AltStoreCore.framework/Frameworks/ - ldid -SAltStore/Resources/tempEnt.plist archive.xcarchive/Products/Applications/SideStore.app/SideStore + run: make fakesign - name: Convert to IPA - run: | - mkdir Payload - mkdir Payload/SideStore.app - cp -R archive.xcarchive/Products/Applications/SideStore.app/ Payload/SideStore.app/ - zip -r SideStore.ipa Payload + run: make ipa - name: Upload Artifact uses: actions/upload-artifact@v3.1.0 @@ -79,12 +59,13 @@ jobs: id: date_altstore run: echo "date=$(date -u +'%Y-%m-%d')" >> $GITHUB_OUTPUT - - name: Upload to beta release - uses: IsaacShelton/update-existing-release@v1.3.1 + - name: Upload to new beta release + uses: softprops/action-gh-release@v1 with: token: ${{ secrets.GITHUB_TOKEN }} - release: "Beta" - tag: "beta" + name: ${{ steps.version.outputs.version }} + tag_name: ${{ github.ref_name }} + draft: true prerelease: true files: SideStore.ipa body: | @@ -95,6 +76,10 @@ jobs: If you want to be on the bleeding edge and use the latest development builds, you can look at [SideStore Nightly](https://github.com/${{ github.repository }}/releases/tag/nightly). **Please be aware that these builds have a much higher chance of bugs than beta or stable**. If you use the `SideStore (Beta)` app, it will use the latest beta build (make sure to update it in "My Apps"). + + ## Changelog + + - TODO ## Build Info diff --git a/.github/workflows/increase-nightly-build-num.sh b/.github/workflows/increase-nightly-build-num.sh new file mode 100644 index 00000000..4be78710 --- /dev/null +++ b/.github/workflows/increase-nightly-build-num.sh @@ -0,0 +1,28 @@ +#!/usr/bin/env bash + +# Ensure we are in root directory +cd "$(dirname "$0")/../.." + +DATE=`date -u +'%Y.%m.%d'` +BUILD_NUM=1 + +write() { + sed -e "/MARKETING_VERSION = .*/s/$/-nightly.$DATE.$BUILD_NUM/" -i '' Build.xcconfig + echo "$DATE,$BUILD_NUM" > .nightly-build-num +} + +if [ ! -f ".nightly-build-num" ]; then + write + exit 0 +fi + +LAST_DATE=`cat .nightly-build-num | perl -n -e '/([^,]*),([^ ]*)$/ && print $1'` +LAST_BUILD_NUM=`cat .nightly-build-num | perl -n -e '/([^,]*),([^ ]*)$/ && print $2'` + +if [[ "$DATE" != "$LAST_DATE" ]]; then + write +else + BUILD_NUM=`expr $LAST_BUILD_NUM + 1` + write +fi + diff --git a/.github/workflows/nightly.yml b/.github/workflows/nightly.yml index 705156ca..03436493 100644 --- a/.github/workflows/nightly.yml +++ b/.github/workflows/nightly.yml @@ -27,8 +27,14 @@ jobs: - name: Install dependencies run: brew install ldid - - name: Add nightly suffix to version - run: sed -e '/MARKETING_VERSION = .*/s/$/-nightly.${{ github.run_number }}/' -i '' Build.xcconfig + - name: Cache .nightly-build-num + uses: actions/cache@v3 + with: + path: .nightly-build-num + key: nightly-build-num + + - name: Increase nightly build number and set as version + run: bash .github/workflows/increase-nightly-build-num.sh - name: Setup Xcode uses: maxim-lobanov/setup-xcode@v1.4.1 @@ -36,29 +42,13 @@ jobs: xcode-version: ${{ matrix.version }} - name: Build SideStore - run: | - xcodebuild -project AltStore.xcodeproj \ - -scheme AltStore \ - -sdk iphoneos \ - archive -archivePath ./archive \ - CODE_SIGNING_REQUIRED=NO \ - AD_HOC_CODE_SIGNING_ALLOWED=YES \ - CODE_SIGNING_ALLOWED=NO \ - DEVELOPMENT_TEAM=XYZ0123456 \ - ORG_IDENTIFIER=com.SideStore \ - | xcpretty && exit ${PIPESTATUS[0]} + run: make build | xcpretty && exit ${PIPESTATUS[0]} - name: Fakesign app - run: | - rm -rf archive.xcarchive/Products/Applications/SideStore.app/Frameworks/AltStoreCore.framework/Frameworks/ - ldid -SAltStore/Resources/tempEnt.plist archive.xcarchive/Products/Applications/SideStore.app/SideStore + run: make fakesign - name: Convert to IPA - run: | - mkdir Payload - mkdir Payload/SideStore.app - cp -R archive.xcarchive/Products/Applications/SideStore.app/ Payload/SideStore.app/ - zip -r SideStore.ipa Payload + run: make ipa - name: Upload Artifact uses: actions/upload-artifact@v3.1.0 diff --git a/.github/workflows/pr.yml b/.github/workflows/pr.yml index 2de7ed2f..580b769b 100644 --- a/.github/workflows/pr.yml +++ b/.github/workflows/pr.yml @@ -31,29 +31,13 @@ jobs: xcode-version: ${{ matrix.version }} - name: Build SideStore - run: | - xcodebuild -project AltStore.xcodeproj \ - -scheme AltStore \ - -sdk iphoneos \ - archive -archivePath ./archive \ - CODE_SIGNING_REQUIRED=NO \ - AD_HOC_CODE_SIGNING_ALLOWED=YES \ - CODE_SIGNING_ALLOWED=NO \ - DEVELOPMENT_TEAM=XYZ0123456 \ - ORG_IDENTIFIER=com.SideStore \ - | xcpretty && exit ${PIPESTATUS[0]} + run: make build | xcpretty && exit ${PIPESTATUS[0]} - name: Fakesign app - run: | - rm -rf archive.xcarchive/Products/Applications/SideStore.app/Frameworks/AltStoreCore.framework/Frameworks/ - ldid -SAltStore/Resources/tempEnt.plist archive.xcarchive/Products/Applications/SideStore.app/SideStore + run: make fakesign - name: Convert to IPA - run: | - mkdir Payload - mkdir Payload/SideStore.app - cp -R archive.xcarchive/Products/Applications/SideStore.app/ Payload/SideStore.app/ - zip -r SideStore.ipa Payload + run: make ipa - name: Upload Artifact uses: actions/upload-artifact@v3.1.0 diff --git a/.github/workflows/stable.yml b/.github/workflows/stable.yml index 8989ab88..2ee72e04 100644 --- a/.github/workflows/stable.yml +++ b/.github/workflows/stable.yml @@ -2,7 +2,7 @@ name: Stable SideStore build on: push: tags: - - '[0-9]+.[0-9]+.[0-9]+*' + - '[0-9]+.[0-9]+.[0-9]+' # example: 1.0.0 jobs: build: @@ -24,35 +24,22 @@ jobs: - name: Install dependencies run: brew install ldid + - name: Change version to tag + run: sed -e '/MARKETING_VERSION = .*/s/= .*/= ${{ github.ref_name }}/' -i '' Build.xcconfig + - name: Setup Xcode uses: maxim-lobanov/setup-xcode@v1.4.1 with: xcode-version: ${{ matrix.version }} - name: Build SideStore - run: | - xcodebuild -project AltStore.xcodeproj \ - -scheme AltStore \ - -sdk iphoneos \ - archive -archivePath ./archive \ - CODE_SIGNING_REQUIRED=NO \ - AD_HOC_CODE_SIGNING_ALLOWED=YES \ - CODE_SIGNING_ALLOWED=NO \ - DEVELOPMENT_TEAM=XYZ0123456 \ - ORG_IDENTIFIER=com.SideStore \ - | xcpretty && exit ${PIPESTATUS[0]} + run: make build | xcpretty && exit ${PIPESTATUS[0]} - name: Fakesign app - run: | - rm -rf archive.xcarchive/Products/Applications/SideStore.app/Frameworks/AltStoreCore.framework/Frameworks/ - ldid -SAltStore/Resources/tempEnt.plist archive.xcarchive/Products/Applications/SideStore.app/SideStore + run: make fakesign - name: Convert to IPA - run: | - mkdir Payload - mkdir Payload/SideStore.app - cp -R archive.xcarchive/Products/Applications/SideStore.app/ Payload/SideStore.app/ - zip -r SideStore.ipa Payload + run: make ipa - name: Upload Artifact uses: actions/upload-artifact@v3.1.0 @@ -77,7 +64,7 @@ jobs: with: token: ${{ secrets.GITHUB_TOKEN }} name: ${{ steps.version.outputs.version }} - tag_name: ${{ github.ref }} + tag_name: ${{ github.ref_name }} draft: true files: SideStore.ipa body: | diff --git a/.gitignore b/.gitignore index 5292f2a9..a6dec00c 100644 --- a/.gitignore +++ b/.gitignore @@ -41,3 +41,4 @@ Dependencies/.*-prebuilt-fetch-* Dependencies/minimuxer/* Dependencies/em_proxy/* !Dependencies/**/.gitkeep +.nightly-build-num From e59fb15926cccf761606b6f22c00c038c352e3b7 Mon Sep 17 00:00:00 2001 From: naturecodevoid <44983869+naturecodevoid@users.noreply.github.com> Date: Tue, 21 Feb 2023 12:24:25 -0800 Subject: [PATCH 12/48] modify actions to work on test branch --- .github/workflows/nightly.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/nightly.yml b/.github/workflows/nightly.yml index 03436493..acf86f05 100644 --- a/.github/workflows/nightly.yml +++ b/.github/workflows/nightly.yml @@ -2,7 +2,7 @@ name: Nightly SideStore build on: push: branches: - - develop + - actions-improvements jobs: build: @@ -73,7 +73,7 @@ jobs: with: token: ${{ secrets.GITHUB_TOKEN }} release: "Nightly" - tag: "nightly" + tag: "nightly-test" prerelease: true files: SideStore.ipa body: | From 015f20556954eeb50c14704f6068b3440049fedd Mon Sep 17 00:00:00 2001 From: naturecodevoid <44983869+naturecodevoid@users.noreply.github.com> Date: Tue, 21 Feb 2023 12:42:56 -0800 Subject: [PATCH 13/48] update release descriptions --- .github/workflows/beta.yml | 8 +------- .github/workflows/nightly.yml | 6 ++---- 2 files changed, 3 insertions(+), 11 deletions(-) diff --git a/.github/workflows/beta.yml b/.github/workflows/beta.yml index ec7ab82e..ea11c4de 100644 --- a/.github/workflows/beta.yml +++ b/.github/workflows/beta.yml @@ -69,13 +69,7 @@ jobs: prerelease: true files: SideStore.ipa body: | - This is an ⚠️ **EXPERIMENTAL** ⚠️ beta build for commit [${{ github.sha }}](https://github.com/${{ github.repository }}/commit/${{ github.sha }}). - - Beta builds are hand-picked builds from development commits that will allow you to try out new features earlier than normal, but with a lower chance of bugs than if you used nightly builds. However, since these changes are newer and less tested, they still have a good chance of bugs, so **use at your own risk**. - - If you want to be on the bleeding edge and use the latest development builds, you can look at [SideStore Nightly](https://github.com/${{ github.repository }}/releases/tag/nightly). **Please be aware that these builds have a much higher chance of bugs than beta or stable**. - - If you use the `SideStore (Beta)` app, it will use the latest beta build (make sure to update it in "My Apps"). + Beta builds are hand-picked builds from development commits that will allow you to try out new features earlier than normal. However, **they might contain bugs and other issues. Use at your own risk!** ## Changelog diff --git a/.github/workflows/nightly.yml b/.github/workflows/nightly.yml index acf86f05..498efae1 100644 --- a/.github/workflows/nightly.yml +++ b/.github/workflows/nightly.yml @@ -79,11 +79,9 @@ jobs: body: | This is an ⚠️ **EXPERIMENTAL** ⚠️ nightly build for commit [${{ github.sha }}](https://github.com/${{ github.repository }}/commit/${{ github.sha }}). - Nightly builds are built from the most recent commit which means you'll be able to try out new features very early. However, since these changes are much newer and less tested, they have a much higher chance of bugs, so **use at your own risk**. + Nightly builds are **extremely experimental builds only meant to be used by developers and alpha 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 Beta](https://github.com/${{ github.repository }}/releases/tag/beta). - - If you use the `SideStore (Nightly)` app, it will use the latest nightly build (make sure to update it in "My Apps"). + If you want to try out new features early but want a lower chance of bugs, you can look at [SideStore Beta](https://github.com/${{ github.repository }}/releases?q=beta). ## Build Info From aa7d7c2d027887a14744c80798909b6ffe1876d5 Mon Sep 17 00:00:00 2001 From: naturecodevoid <44983869+naturecodevoid@users.noreply.github.com> Date: Tue, 21 Feb 2023 12:51:34 -0800 Subject: [PATCH 14/48] Revert "modify actions to work on test branch" This reverts commit e59fb15926cccf761606b6f22c00c038c352e3b7. --- .github/workflows/nightly.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/nightly.yml b/.github/workflows/nightly.yml index 498efae1..e44d9bdc 100644 --- a/.github/workflows/nightly.yml +++ b/.github/workflows/nightly.yml @@ -2,7 +2,7 @@ name: Nightly SideStore build on: push: branches: - - actions-improvements + - develop jobs: build: @@ -73,7 +73,7 @@ jobs: with: token: ${{ secrets.GITHUB_TOKEN }} release: "Nightly" - tag: "nightly-test" + tag: "nightly" prerelease: true files: SideStore.ipa body: | From a5e3869d8ff4c84035188ac7649b5de0909d8a3e Mon Sep 17 00:00:00 2001 From: naturecodevoid <44983869+naturecodevoid@users.noreply.github.com> Date: Tue, 21 Feb 2023 17:01:24 -0800 Subject: [PATCH 15/48] Project: update CONTRIBUTING.md to use Makefile --- CONTRIBUTING.md | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 6e30b604..f71e494a 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -47,7 +47,14 @@ to force it to check for new binaries, run `bash ./Dependencies/fetch-prebuilt.s ## Building an IPA for distribution -It is recommended to follow the build steps GitHub Actions uses: [`.github/workflows/stable.yml`](./.github/workflows/stable.yml) (in particular, the `Build SideStore`, `Fakesign app` and `Convert to IPA` build steps) +You can use the Makefile: `make build fakesign ipa` + +This will create SideStore.ipa. + +> **Warning** +> +> The binary created will contain paths to Xcode's DerivedData, and if you built minimuxer on your machine, paths to $HOME/.cargo. This will include your username. If you want to keep your user's +> username private, you might want to get GitHub Actions to build the IPA instead. ## Developing minimuxer alongside SideStore From 80c33903635c10fdb447a180c7bb6ce0ef86138d Mon Sep 17 00:00:00 2001 From: naturecodevoid <44983869+naturecodevoid@users.noreply.github.com> Date: Tue, 21 Feb 2023 17:07:58 -0800 Subject: [PATCH 16/48] [skip ci] Makefile: Remove build_rust_dependencies --- Makefile | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/Makefile b/Makefile index 960a8b80..0914fcd7 100644 --- a/Makefile +++ b/Makefile @@ -70,8 +70,7 @@ help: ## Install dependencies. setup: \ - pre_setup \ - build_rust_dependencies + pre_setup # check_for_homebrew \ # update_homebrew \ From a3768d92217885658463df4240532c0d26f17fff Mon Sep 17 00:00:00 2001 From: naturecodevoid <44983869+naturecodevoid@users.noreply.github.com> Date: Tue, 21 Feb 2023 17:27:56 -0800 Subject: [PATCH 17/48] [skip ci] actions: Add info/automate cache resetting --- .github/workflows/beta.yml | 1 + .github/workflows/nightly.yml | 3 +++ .github/workflows/stable.yml | 1 + 3 files changed, 5 insertions(+) diff --git a/.github/workflows/beta.yml b/.github/workflows/beta.yml index ea11c4de..4487366b 100644 --- a/.github/workflows/beta.yml +++ b/.github/workflows/beta.yml @@ -69,6 +69,7 @@ jobs: prerelease: true files: SideStore.ipa body: | + Beta builds are hand-picked builds from development commits that will allow you to try out new features earlier than normal. However, **they might contain bugs and other issues. Use at your own risk!** ## Changelog diff --git a/.github/workflows/nightly.yml b/.github/workflows/nightly.yml index e44d9bdc..2c8bc61f 100644 --- a/.github/workflows/nightly.yml +++ b/.github/workflows/nightly.yml @@ -89,3 +89,6 @@ jobs: Built at (UTC date): `${{ steps.date_altstore.outputs.date }}` Commit SHA: `${{ github.sha }}` Version: `${{ steps.version.outputs.version }}` + + - name: Reset cache for apps.sidestore.io/nightly + run: sleep 10 && curl https://apps.sidestore.io/reset-cache/nightly/${{ secrets.SIDESOURCE_KEY }} diff --git a/.github/workflows/stable.yml b/.github/workflows/stable.yml index 2ee72e04..5da10815 100644 --- a/.github/workflows/stable.yml +++ b/.github/workflows/stable.yml @@ -68,6 +68,7 @@ jobs: draft: true files: SideStore.ipa body: | + ## Changelog - TODO From 17640fe6cf8e43914705eb01077f2e3a9a021a31 Mon Sep 17 00:00:00 2001 From: naturecodevoid <44983869+naturecodevoid@users.noreply.github.com> Date: Sat, 25 Feb 2023 14:36:37 -0800 Subject: [PATCH 18/48] Cherry pick app ID logging fix from duplicate profiles PR --- AltStore/Managing Apps/AppManager.swift | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/AltStore/Managing Apps/AppManager.swift b/AltStore/Managing Apps/AppManager.swift index d85fa339..5bf39ed2 100644 --- a/AltStore/Managing Apps/AppManager.swift +++ b/AltStore/Managing Apps/AppManager.swift @@ -392,7 +392,8 @@ extension AppManager func fetchAppIDs(completionHandler: @escaping (Result<([AppID], NSManagedObjectContext), Error>) -> Void) { let authenticationOperation = self.authenticate(presentingViewController: nil) { (result) in - print("Authenticated for fetching App IDs with result:", result) + // result contains name, email, auth token, OTP and other possibly personal/account specific info. we don't want this logged + //print("Authenticated for fetching App IDs with result:", result) } let fetchAppIDsOperation = FetchAppIDsOperation(context: authenticationOperation.context) From c30afd042ec8f5c2e716adc0bf538827ec8ad242 Mon Sep 17 00:00:00 2001 From: Spidy123222 <64176728+Spidy123222@users.noreply.github.com> Date: Wed, 1 Mar 2023 13:17:09 -0800 Subject: [PATCH 19/48] Change version to 0.3.1 Signed-off-by: Spidy123222 <64176728+Spidy123222@users.noreply.github.com> --- Build.xcconfig | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Build.xcconfig b/Build.xcconfig index 5dea5226..1abe5ee6 100644 --- a/Build.xcconfig +++ b/Build.xcconfig @@ -1,8 +1,8 @@ // Configuration settings file format documentation can be found at: // https://help.apple.com/xcode/#/dev745c5c974 -MARKETING_VERSION = 0.3.0 -CURRENT_PROJECT_VERSION = 3020 +MARKETING_VERSION = 0.3.1 +CURRENT_PROJECT_VERSION = 3021 // Vars to be overwritten by `CodeSigning.xcconfig` if exists DEVELOPMENT_TEAM = S32Z3HMYVQ From c02cf2c284ff773528d8a8a7a3a079a79e4b68fb Mon Sep 17 00:00:00 2001 From: naturecodevoid <44983869+naturecodevoid@users.noreply.github.com> Date: Sat, 4 Mar 2023 08:08:35 -0800 Subject: [PATCH 20/48] Update error codes to match minimuxer error codes (this is why people got Unknown error instead of an actual error message) Signed-off-by: naturecodevoid <44983869+naturecodevoid@users.noreply.github.com> --- AltStore/Operations/OperationError.swift | 40 ++++++++++++------------ 1 file changed, 20 insertions(+), 20 deletions(-) diff --git a/AltStore/Operations/OperationError.swift b/AltStore/Operations/OperationError.swift index 9d118a82..331db175 100644 --- a/AltStore/Operations/OperationError.swift +++ b/AltStore/Operations/OperationError.swift @@ -120,45 +120,45 @@ enum OperationError: LocalizedError func minimuxer_to_operation(code: Int32) -> OperationError { switch code { - case -1: + case 1: return OperationError.noDevice - case -2: + case 2: return OperationError.createService(name: "debug") - case -3: + case 3: return OperationError.createService(name: "instproxy") - case -4: + case 4: return OperationError.getFromDevice(name: "installed apps") - case -5: + case 5: return OperationError.getFromDevice(name: "path to the app") - case -6: + case 6: return OperationError.getFromDevice(name: "bundle path") - case -7: + case 7: return OperationError.setArgument(name: "max packet") - case -8: + case 8: return OperationError.setArgument(name: "working directory") - case -9: + case 9: return OperationError.setArgument(name: "argv") - case -10: + case 10: return OperationError.getFromDevice(name: "launch success") - case -11: + case 11: return OperationError.detach - case -12: + case 12: return OperationError.functionArguments - case -13: + case 13: return OperationError.createService(name: "AFC") - case -14: + case 14: return OperationError.afc - case -15: + case 15: return OperationError.install - case -16: + case 16: return OperationError.uninstall - case -17: + case 17: return OperationError.createService(name: "misagent") - case -18: + case 18: return OperationError.profileInstall - case -19: + case 19: return OperationError.profileInstall - case -20: + case 20: return OperationError.noConnection default: return OperationError.unknown From c4d649ec583aef46c1447a8fcbca23f167601b25 Mon Sep 17 00:00:00 2001 From: Spidy123222 <64176728+Spidy123222@users.noreply.github.com> Date: Sun, 5 Mar 2023 13:45:10 -0800 Subject: [PATCH 21/48] Remove jkcoxson anisette servers. Signed-off-by: Spidy123222 <64176728+Spidy123222@users.noreply.github.com> --- AltStore/Settings.bundle/Root.plist | 4 ---- 1 file changed, 4 deletions(-) diff --git a/AltStore/Settings.bundle/Root.plist b/AltStore/Settings.bundle/Root.plist index b6d57f44..457492ff 100644 --- a/AltStore/Settings.bundle/Root.plist +++ b/AltStore/Settings.bundle/Root.plist @@ -23,8 +23,6 @@ Macley (US) Macley (DE) DrPudding - jkcoxson (AltServer) - jkcoxson (Provision) Sideloadly Nick Jawshoeadan @@ -36,8 +34,6 @@ http://us1.sternserv.tech http://de1.sternserv.tech https://sign.rheaa.xyz - http://jkcoxson.com:2095 - http://jkcoxson.com:2052 https://sideloadly.io/anisette/irGb3Quww8zrhgqnzmrx http://45.33.29.114 https://anisette.jawshoeadan.me From 020a1a3149649d4e17c93959cd31de75caddae47 Mon Sep 17 00:00:00 2001 From: Spidy123222 <64176728+Spidy123222@users.noreply.github.com> Date: Sun, 5 Mar 2023 19:27:25 -0800 Subject: [PATCH 22/48] Replace sideloady to use sidestore ani Signed-off-by: Spidy123222 <64176728+Spidy123222@users.noreply.github.com> --- AltStore/Info.plist | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/AltStore/Info.plist b/AltStore/Info.plist index 2b4b48de..f790812d 100644 --- a/AltStore/Info.plist +++ b/AltStore/Info.plist @@ -14,7 +14,7 @@ ALTPairingFile <insert pairing file here> ALTAnisetteURL - https://sideloadly.io/anisette/irGb3Quww8zrhgqnzmrx + http://ani.sidestore.io CFBundleDevelopmentRegion $(DEVELOPMENT_LANGUAGE) CFBundleDocumentTypes From bcb5a90f5eea7034f73c21a4d07daf1b5eee9fda Mon Sep 17 00:00:00 2001 From: Nythepegasus Date: Mon, 6 Mar 2023 14:09:16 -0500 Subject: [PATCH 23/48] Add SSL encryption to ani.sidestore.io Signed-off-by: Nythepegasus --- AltStore/Info.plist | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/AltStore/Info.plist b/AltStore/Info.plist index f790812d..a54f4f93 100644 --- a/AltStore/Info.plist +++ b/AltStore/Info.plist @@ -14,7 +14,7 @@ ALTPairingFile <insert pairing file here> ALTAnisetteURL - http://ani.sidestore.io + https://ani.sidestore.io CFBundleDevelopmentRegion $(DEVELOPMENT_LANGUAGE) CFBundleDocumentTypes From 813e2f97acf12a4676bec2fecf01388816b14f5a Mon Sep 17 00:00:00 2001 From: Spidy123222 <64176728+Spidy123222@users.noreply.github.com> Date: Mon, 6 Mar 2023 12:10:39 -0800 Subject: [PATCH 24/48] Change version to 0.3.2 Signed-off-by: Spidy123222 <64176728+Spidy123222@users.noreply.github.com> --- Build.xcconfig | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Build.xcconfig b/Build.xcconfig index 1abe5ee6..3c049de8 100644 --- a/Build.xcconfig +++ b/Build.xcconfig @@ -1,8 +1,8 @@ // Configuration settings file format documentation can be found at: // https://help.apple.com/xcode/#/dev745c5c974 -MARKETING_VERSION = 0.3.1 -CURRENT_PROJECT_VERSION = 3021 +MARKETING_VERSION = 0.3.2 +CURRENT_PROJECT_VERSION = 3050 // Vars to be overwritten by `CodeSigning.xcconfig` if exists DEVELOPMENT_TEAM = S32Z3HMYVQ From ae457f07c46788c7e13ecf27e468dbe98ceb8a65 Mon Sep 17 00:00:00 2001 From: naturecodevoid <44983869+naturecodevoid@users.noreply.github.com> Date: Tue, 7 Mar 2023 07:27:36 -0800 Subject: [PATCH 25/48] add https for ani.sidestore.io to Settings.bundle --- AltStore/Settings.bundle/Root.plist | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/AltStore/Settings.bundle/Root.plist b/AltStore/Settings.bundle/Root.plist index 457492ff..cad6e004 100644 --- a/AltStore/Settings.bundle/Root.plist +++ b/AltStore/Settings.bundle/Root.plist @@ -16,7 +16,7 @@ Key customAnisetteURL DefaultValue - http://ani.sidestore.io + https://ani.sidestore.io Titles SideStore @@ -30,7 +30,7 @@ Values - http://ani.sidestore.io + https://ani.sidestore.io http://us1.sternserv.tech http://de1.sternserv.tech https://sign.rheaa.xyz From 1a1ed072bf3168a5c2154891843c6f954d1a70da Mon Sep 17 00:00:00 2001 From: naturecodevoid <44983869+naturecodevoid@users.noreply.github.com> Date: Tue, 7 Mar 2023 07:50:31 -0800 Subject: [PATCH 26/48] attach debugging symbols to actions builds --- .github/workflows/beta.yml | 8 +++++++- .github/workflows/nightly.yml | 8 +++++++- .github/workflows/pr.yml | 8 +++++++- .github/workflows/stable.yml | 8 +++++++- .gitignore | 2 ++ Makefile | 3 ++- 6 files changed, 32 insertions(+), 5 deletions(-) diff --git a/.github/workflows/beta.yml b/.github/workflows/beta.yml index 4487366b..54c765b8 100644 --- a/.github/workflows/beta.yml +++ b/.github/workflows/beta.yml @@ -41,12 +41,18 @@ jobs: - name: Convert to IPA run: make ipa - - name: Upload Artifact + - name: Upload SideStore.ipa Artifact uses: actions/upload-artifact@v3.1.0 with: name: SideStore.ipa path: SideStore.ipa + - name: Upload *.dSYM Artifact + uses: actions/upload-artifact@v3.1.0 + with: + name: SideStore.dSYM + path: ./*.dSYM/ + - name: Get version id: version run: echo "version=$(grep MARKETING_VERSION Build.xcconfig | sed -e "s/MARKETING_VERSION = //g")" >> $GITHUB_OUTPUT diff --git a/.github/workflows/nightly.yml b/.github/workflows/nightly.yml index 2c8bc61f..9be4fa03 100644 --- a/.github/workflows/nightly.yml +++ b/.github/workflows/nightly.yml @@ -50,12 +50,18 @@ jobs: - name: Convert to IPA run: make ipa - - name: Upload Artifact + - name: Upload SideStore.ipa Artifact uses: actions/upload-artifact@v3.1.0 with: name: SideStore.ipa path: SideStore.ipa + - name: Upload *.dSYM Artifact + uses: actions/upload-artifact@v3.1.0 + with: + name: SideStore.dSYM + path: ./*.dSYM/ + - name: Get version id: version run: echo "version=$(grep MARKETING_VERSION Build.xcconfig | sed -e "s/MARKETING_VERSION = //g")" >> $GITHUB_OUTPUT diff --git a/.github/workflows/pr.yml b/.github/workflows/pr.yml index 580b769b..89fad8fc 100644 --- a/.github/workflows/pr.yml +++ b/.github/workflows/pr.yml @@ -39,8 +39,14 @@ jobs: - name: Convert to IPA run: make ipa - - name: Upload Artifact + - name: Upload SideStore.ipa Artifact uses: actions/upload-artifact@v3.1.0 with: name: SideStore.ipa path: SideStore.ipa + + - name: Upload *.dSYM Artifact + uses: actions/upload-artifact@v3.1.0 + with: + name: SideStore.dSYM + path: ./*.dSYM/ diff --git a/.github/workflows/stable.yml b/.github/workflows/stable.yml index 5da10815..ea9c6273 100644 --- a/.github/workflows/stable.yml +++ b/.github/workflows/stable.yml @@ -41,12 +41,18 @@ jobs: - name: Convert to IPA run: make ipa - - name: Upload Artifact + - name: Upload SideStore.ipa Artifact uses: actions/upload-artifact@v3.1.0 with: name: SideStore.ipa path: SideStore.ipa + - name: Upload *.dSYM Artifact + uses: actions/upload-artifact@v3.1.0 + with: + name: SideStore.dSYM + path: ./*.dSYM/ + - name: Get version id: version run: echo "version=$(grep MARKETING_VERSION Build.xcconfig | sed -e "s/MARKETING_VERSION = //g")" >> $GITHUB_OUTPUT diff --git a/.gitignore b/.gitignore index a6dec00c..9e0fcf89 100644 --- a/.gitignore +++ b/.gitignore @@ -37,6 +37,8 @@ xcuserdata Payload/ SideStore.ipa +*.dSYM + Dependencies/.*-prebuilt-fetch-* Dependencies/minimuxer/* Dependencies/em_proxy/* diff --git a/Makefile b/Makefile index 0914fcd7..503859bf 100644 --- a/Makefile +++ b/Makefile @@ -165,7 +165,8 @@ build: AD_HOC_CODE_SIGNING_ALLOWED=YES \ CODE_SIGNING_ALLOWED=NO \ DEVELOPMENT_TEAM=XYZ0123456 \ - ORG_IDENTIFIER=com.SideStore + ORG_IDENTIFIER=com.SideStore \ + DWARF_DSYM_FOLDER_PATH="." fakesign: rm -rf archive.xcarchive/Products/Applications/SideStore.app/Frameworks/AltStoreCore.framework/Frameworks/ From 4e84dc4cc87dff2ce081f07375cb88aece7c5028 Mon Sep 17 00:00:00 2001 From: naturecodevoid <44983869+naturecodevoid@users.noreply.github.com> Date: Tue, 7 Mar 2023 08:24:28 -0800 Subject: [PATCH 27/48] [skip ci] rename the *.dSYM artifact so that macOS treats it as a normal folder --- .github/workflows/beta.yml | 2 +- .github/workflows/nightly.yml | 2 +- .github/workflows/pr.yml | 2 +- .github/workflows/stable.yml | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/.github/workflows/beta.yml b/.github/workflows/beta.yml index 54c765b8..0dec182a 100644 --- a/.github/workflows/beta.yml +++ b/.github/workflows/beta.yml @@ -50,7 +50,7 @@ jobs: - name: Upload *.dSYM Artifact uses: actions/upload-artifact@v3.1.0 with: - name: SideStore.dSYM + name: SideStore-dSYM path: ./*.dSYM/ - name: Get version diff --git a/.github/workflows/nightly.yml b/.github/workflows/nightly.yml index 9be4fa03..42555c0f 100644 --- a/.github/workflows/nightly.yml +++ b/.github/workflows/nightly.yml @@ -59,7 +59,7 @@ jobs: - name: Upload *.dSYM Artifact uses: actions/upload-artifact@v3.1.0 with: - name: SideStore.dSYM + name: SideStore-dSYM path: ./*.dSYM/ - name: Get version diff --git a/.github/workflows/pr.yml b/.github/workflows/pr.yml index 89fad8fc..bd50c890 100644 --- a/.github/workflows/pr.yml +++ b/.github/workflows/pr.yml @@ -48,5 +48,5 @@ jobs: - name: Upload *.dSYM Artifact uses: actions/upload-artifact@v3.1.0 with: - name: SideStore.dSYM + name: SideStore-dSYM path: ./*.dSYM/ diff --git a/.github/workflows/stable.yml b/.github/workflows/stable.yml index ea9c6273..7db5cd49 100644 --- a/.github/workflows/stable.yml +++ b/.github/workflows/stable.yml @@ -50,7 +50,7 @@ jobs: - name: Upload *.dSYM Artifact uses: actions/upload-artifact@v3.1.0 with: - name: SideStore.dSYM + name: SideStore-dSYM path: ./*.dSYM/ - name: Get version From 4334e887de0c1e855606b90b3aa4fc97b60863c9 Mon Sep 17 00:00:00 2001 From: naturecodevoid <44983869+naturecodevoid@users.noreply.github.com> Date: Sun, 12 Mar 2023 16:38:59 -0700 Subject: [PATCH 28/48] [skip ci] use bundle ID from Build.xcconfig in AltStore.xcconfig --- AltStore.xcconfig | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/AltStore.xcconfig b/AltStore.xcconfig index b2085eae..3366003e 100644 --- a/AltStore.xcconfig +++ b/AltStore.xcconfig @@ -1,3 +1,3 @@ #include "Build.xcconfig" -PRODUCT_BUNDLE_IDENTIFIER = $(ORG_PREFIX).$(PRODUCT_NAME) +PRODUCT_BUNDLE_IDENTIFIER = $(PRODUCT_BUNDLE_IDENTIFIER) From 7dcb199f68f907729d365e027c7ab41fa7e847ef Mon Sep 17 00:00:00 2001 From: Joe Mattiello Date: Sun, 19 Mar 2023 23:28:32 -0400 Subject: [PATCH 29/48] Update README.md Add repobeats svg Signed-off-by: Joe Mattiello --- README.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index f2ea9d21..96e10d81 100644 --- a/README.md +++ b/README.md @@ -6,13 +6,14 @@ [![PRs Welcome](https://img.shields.io/badge/PRs-welcome-brightgreen.svg)](https://makeapullrequest.com) [![Build and Upload SideStore](https://github.com/SideStore/SideStore/actions/workflows/build.yml/badge.svg)](https://github.com/SideStore/SideStore/actions/workflows/build.yml) +![Alt](https://repobeats.axiom.co/api/embed/3a329ce95955690b9a9366f8d5598626a847d96c.svg "Repobeats analytics image") + SideStore is an iOS application that allows you to sideload apps onto your iOS device with just your Apple ID. SideStore resigns apps with your personal development certificate, and then uses a [specially designed VPN](https://github.com/jkcoxson/Secret-Tunnel) in order to trick iOS into installing them. SideStore will periodically "refresh" your apps in the background, to keep their normal 7-day development period from expiring. SideStore's goal is to provide an untethered sideloading experience. It's a community driven fork of [AltStore](https://github.com/rileytestut/AltStore), and has already implemented some of the community's most-requested features. (Contributions are welcome! 🙂) - ## Requirements - Xcode 14 - iOS 14+ From ebb64d255baee0395345771a0b72fbc35cfe568c Mon Sep 17 00:00:00 2001 From: Joe Mattiello Date: Mon, 20 Mar 2023 00:00:56 -0400 Subject: [PATCH 30/48] Update README.md Signed-off-by: Joe Mattiello --- README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/README.md b/README.md index 96e10d81..26de6ed2 100644 --- a/README.md +++ b/README.md @@ -5,6 +5,8 @@ [![License: AGPL v3](https://img.shields.io/badge/License-AGPL%20v3-blue.svg)](https://www.gnu.org/licenses/agpl-3.0) [![PRs Welcome](https://img.shields.io/badge/PRs-welcome-brightgreen.svg)](https://makeapullrequest.com) [![Build and Upload SideStore](https://github.com/SideStore/SideStore/actions/workflows/build.yml/badge.svg)](https://github.com/SideStore/SideStore/actions/workflows/build.yml) +[![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) ![Alt](https://repobeats.axiom.co/api/embed/3a329ce95955690b9a9366f8d5598626a847d96c.svg "Repobeats analytics image") From 337d26333e7a127994fa606e6742f3c6d34677e0 Mon Sep 17 00:00:00 2001 From: Joe Mattiello Date: Mon, 20 Mar 2023 00:02:11 -0400 Subject: [PATCH 31/48] Update README.md Signed-off-by: Joe Mattiello --- README.md | 1 - 1 file changed, 1 deletion(-) diff --git a/README.md b/README.md index 26de6ed2..66faf98d 100644 --- a/README.md +++ b/README.md @@ -4,7 +4,6 @@ [![License: AGPL v3](https://img.shields.io/badge/License-AGPL%20v3-blue.svg)](https://www.gnu.org/licenses/agpl-3.0) [![PRs Welcome](https://img.shields.io/badge/PRs-welcome-brightgreen.svg)](https://makeapullrequest.com) -[![Build and Upload SideStore](https://github.com/SideStore/SideStore/actions/workflows/build.yml/badge.svg)](https://github.com/SideStore/SideStore/actions/workflows/build.yml) [![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) From ca7d8277f720e05a1243f29f25c23745f1f7a9d4 Mon Sep 17 00:00:00 2001 From: Riley Testut Date: Mon, 20 Mar 2023 18:52:16 -0500 Subject: [PATCH 32/48] =?UTF-8?q?Fixes=20=E2=80=9Cno=20provisioning=20prof?= =?UTF-8?q?ile=20with=20the=20requested=20identifier=E2=80=A6=E2=80=9D=20e?= =?UTF-8?q?rror?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit As of March 20, 2023, deleting an app’s auto-generated free provisioning profile is no longer supported. However, fetching the provisioning profile now re-generates is every time, so there’s no need to delete it first. As a workaround, we now simply use the first profile we fetched if we receive an error when deleting it. This approach should continue to work even if Apple later reverses this change. --- .../Operations/FetchProvisioningProfilesOperation.swift | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/AltStore/Operations/FetchProvisioningProfilesOperation.swift b/AltStore/Operations/FetchProvisioningProfilesOperation.swift index e7b0eb30..182cedec 100644 --- a/AltStore/Operations/FetchProvisioningProfilesOperation.swift +++ b/AltStore/Operations/FetchProvisioningProfilesOperation.swift @@ -478,10 +478,13 @@ extension FetchProvisioningProfilesOperation ALTAppleAPI.shared.delete(profile, for: team, session: session) { (success, error) in switch Result(success, error) { - case .failure(let error): completionHandler(.failure(error)) - case .success: + case .failure: + // As of March 20, 2023, the free provisioning profile is re-generated each fetch, and you can no longer delete it. + // So instead, we just return the fetched profile from above. + completionHandler(.success(profile)) - // Fetch new provisiong profile + case .success: + // Fetch new provisioning profile ALTAppleAPI.shared.fetchProvisioningProfile(for: appID, deviceType: .iphone, team: team, session: session) { (profile, error) in completionHandler(Result(profile, error)) } From 99cb43bbea3f6fba4a1dd3d1ff20a29cb7b03ed9 Mon Sep 17 00:00:00 2001 From: naturecodevoid <44983869+naturecodevoid@users.noreply.github.com> Date: Fri, 24 Mar 2023 08:56:30 -0700 Subject: [PATCH 33/48] [skip ci] include commit SHA in PR builds Signed-off-by: naturecodevoid <44983869+naturecodevoid@users.noreply.github.com> --- .github/workflows/pr.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/pr.yml b/.github/workflows/pr.yml index bd50c890..b91318e5 100644 --- a/.github/workflows/pr.yml +++ b/.github/workflows/pr.yml @@ -23,7 +23,7 @@ jobs: run: brew install ldid - name: Add PR suffix to version - run: sed -e '/MARKETING_VERSION = .*/s/$/-pr.${{ github.event.pull_request.number }}/' -i '' Build.xcconfig + run: sed -e "/MARKETING_VERSION = .*/s/\$/-pr.${{ github.event.pull_request.number }}+$(git rev-parse --short HEAD)/" -i '' Build.xcconfig - name: Setup Xcode uses: maxim-lobanov/setup-xcode@v1.4.1 From 5e2cc6e20c002929339489764ebdb878b1902c1b Mon Sep 17 00:00:00 2001 From: Joelle Stickney Date: Tue, 28 Mar 2023 01:33:55 -0400 Subject: [PATCH 34/48] Update store check to check for AltServer or SideServer installation --- Shared/Extensions/ALTApplication+AltStoreApp.swift | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/Shared/Extensions/ALTApplication+AltStoreApp.swift b/Shared/Extensions/ALTApplication+AltStoreApp.swift index dc983b66..66c567cc 100644 --- a/Shared/Extensions/ALTApplication+AltStoreApp.swift +++ b/Shared/Extensions/ALTApplication+AltStoreApp.swift @@ -11,9 +11,10 @@ import AltSign extension ALTApplication { static let altstoreBundleID = Bundle.Info.appbundleIdentifier + static let altstoreBundleIDOriginal = "rileytestut.AltStore" var isAltStoreApp: Bool { - let isAltStoreApp = self.bundleIdentifier.contains(ALTApplication.altstoreBundleID) + let isAltStoreApp = self.bundleIdentifier.contains(ALTApplication.altstoreBundleID) || self.bundleIdentifier.contains(ALTApplication.altstoreBundleIDOriginal) return isAltStoreApp } } From 6d0f4bb3da8385b8e26ce624216b1992df03b9ea Mon Sep 17 00:00:00 2001 From: Joelle Stickney Date: Tue, 28 Mar 2023 23:48:24 -0400 Subject: [PATCH 35/48] Fixes widget refreshing and is more thorough matching store ID --- Shared/Extensions/ALTApplication+AltStoreApp.swift | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/Shared/Extensions/ALTApplication+AltStoreApp.swift b/Shared/Extensions/ALTApplication+AltStoreApp.swift index 66c567cc..9a7ee78f 100644 --- a/Shared/Extensions/ALTApplication+AltStoreApp.swift +++ b/Shared/Extensions/ALTApplication+AltStoreApp.swift @@ -11,10 +11,12 @@ import AltSign extension ALTApplication { static let altstoreBundleID = Bundle.Info.appbundleIdentifier - static let altstoreBundleIDOriginal = "rileytestut.AltStore" + static let altstoreBundleIDOriginal = "AltStore" + static let storeBundleID = "SideStore" + static let widgetID = "Widget" var isAltStoreApp: Bool { - let isAltStoreApp = self.bundleIdentifier.contains(ALTApplication.altstoreBundleID) || self.bundleIdentifier.contains(ALTApplication.altstoreBundleIDOriginal) + let isAltStoreApp = ( self.bundleIdentifier.contains(ALTApplication.altstoreBundleID) || self.bundleIdentifier.contains(ALTApplication.altstoreBundleIDOriginal) || self.bundleIdentifier.contains(ALTApplication.storeBundleID) ) && !self.bundleIdentifier.contains(ALTApplication.widgetID) return isAltStoreApp } } From 0c171122b28781088f0ea942d4aa6eb5700c1a30 Mon Sep 17 00:00:00 2001 From: naturecodevoid <44983869+naturecodevoid@users.noreply.github.com> Date: Sat, 1 Apr 2023 16:02:12 -0700 Subject: [PATCH 36/48] refactor minimuxer to use swift-bridge (#321) also add team ID to the end of the bundle ID for Debug builds to mirror SideServer --- AltStore.xcodeproj/project.pbxproj | 62 +++++++--- AltStore/LaunchViewController.swift | 32 ++--- .../Operations/DeactivateAppOperation.swift | 9 +- AltStore/Operations/EnableJITOperation.swift | 16 +-- AltStore/Operations/InstallAppOperation.swift | 21 ++-- AltStore/Operations/OperationError.swift | 94 ++++++++------- AltStore/Operations/RefreshAppOperation.swift | 11 +- AltStore/Operations/RemoveAppOperation.swift | 10 +- AltStore/Operations/ResignAppOperation.swift | 1 + AltStore/Operations/SendAppOperation.swift | 23 ++-- Build.xcconfig | 9 +- Dependencies/fetch-prebuilt.sh | 26 +++- .../minimuxer.xcodeproj/project.pbxproj | 27 ++++- minimuxer/minimuxer.swift | 111 ------------------ 14 files changed, 186 insertions(+), 266 deletions(-) delete mode 100644 minimuxer/minimuxer.swift diff --git a/AltStore.xcodeproj/project.pbxproj b/AltStore.xcodeproj/project.pbxproj index f1d2c724..8a12bc50 100644 --- a/AltStore.xcodeproj/project.pbxproj +++ b/AltStore.xcodeproj/project.pbxproj @@ -11,17 +11,18 @@ 19104D952909BAEA00C49C7B /* libimobiledevice.a in Frameworks */ = {isa = PBXBuildFile; fileRef = BF45872B2298D31600BD7491 /* libimobiledevice.a */; }; 19104DB52909C06D00C49C7B /* EmotionalDamage.swift in Sources */ = {isa = PBXBuildFile; fileRef = 19104DB42909C06D00C49C7B /* EmotionalDamage.swift */; }; 19104DBC2909C4E500C49C7B /* libEmotionalDamage.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 19104DB22909C06C00C49C7B /* libEmotionalDamage.a */; }; - 191E5FAE290A5D92001A3B7C /* minimuxer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 191E5FAD290A5D92001A3B7C /* minimuxer.swift */; }; 191E5FB4290A5DA0001A3B7C /* libminimuxer.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 191E5FAB290A5D92001A3B7C /* libminimuxer.a */; }; 191E5FDC290AFA5C001A3B7C /* OpenSSL in Frameworks */ = {isa = PBXBuildFile; productRef = 191E5FDB290AFA5C001A3B7C /* OpenSSL */; }; 191E607D290B2EA5001A3B7C /* jsmn.c in Sources */ = {isa = PBXBuildFile; fileRef = 191E5FD0290A651D001A3B7C /* jsmn.c */; }; 191E607E290B2EA7001A3B7C /* jplist.c in Sources */ = {isa = PBXBuildFile; fileRef = 191E5FCF290A651D001A3B7C /* jplist.c */; }; - 191E6087290C7B50001A3B7C /* libminimuxer.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 191E5FB5290A5E1F001A3B7C /* libminimuxer.a */; }; 1920B04F2924AC8300744F60 /* Settings.bundle in Resources */ = {isa = PBXBuildFile; fileRef = 1920B04E2924AC8300744F60 /* Settings.bundle */; }; 19B9B7452845E6DF0076EF69 /* SelectTeamViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 19B9B7442845E6DF0076EF69 /* SelectTeamViewController.swift */; }; 4879A95F2861046500FC1BBD /* AltSign in Frameworks */ = {isa = PBXBuildFile; productRef = 4879A95E2861046500FC1BBD /* AltSign */; }; 4879A9622861049C00FC1BBD /* OpenSSL in Frameworks */ = {isa = PBXBuildFile; productRef = 4879A9612861049C00FC1BBD /* OpenSSL */; }; 99C4EF4D2979132100CB538D /* SemanticVersion in Frameworks */ = {isa = PBXBuildFile; productRef = 99C4EF4C2979132100CB538D /* SemanticVersion */; }; + 99F87D0529D8B4E200B40039 /* minimuxer-helpers.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9961EC2D29BE9F2E00AF2C6F /* minimuxer-helpers.swift */; }; + 99F87D1829D8E4C900B40039 /* SwiftBridgeCore.swift in Sources */ = {isa = PBXBuildFile; fileRef = 99F87D1629D8E4C900B40039 /* SwiftBridgeCore.swift */; }; + 99F87D1929D8E4C900B40039 /* minimuxer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 99F87D1729D8E4C900B40039 /* minimuxer.swift */; }; B3146ED2284F581E00BBC3FD /* Roxas.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B3146ECD284F580500BBC3FD /* Roxas.framework */; }; B3146ED3284F581E00BBC3FD /* Roxas.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = B3146ECD284F580500BBC3FD /* Roxas.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; B33FFBA8295F8E98002259E6 /* libfragmentzip.a in Frameworks */ = {isa = PBXBuildFile; fileRef = B343F894295F7F9B002B1159 /* libfragmentzip.a */; }; @@ -504,13 +505,14 @@ 19104DB22909C06C00C49C7B /* libEmotionalDamage.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libEmotionalDamage.a; sourceTree = BUILT_PRODUCTS_DIR; }; 19104DB42909C06D00C49C7B /* EmotionalDamage.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = EmotionalDamage.swift; sourceTree = ""; }; 191E5FAB290A5D92001A3B7C /* libminimuxer.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libminimuxer.a; sourceTree = BUILT_PRODUCTS_DIR; }; - 191E5FAD290A5D92001A3B7C /* minimuxer.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = minimuxer.swift; sourceTree = ""; }; - 191E5FB5290A5E1F001A3B7C /* libminimuxer.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libminimuxer.a; path = "Dependencies/minimuxer/target/aarch64-apple-ios/debug/libminimuxer.a"; sourceTree = ""; }; 191E5FCF290A651D001A3B7C /* jplist.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = jplist.c; path = Dependencies/libplist/src/jplist.c; sourceTree = SOURCE_ROOT; }; 191E5FD0290A651D001A3B7C /* jsmn.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = jsmn.c; path = Dependencies/libplist/src/jsmn.c; sourceTree = SOURCE_ROOT; }; 191E5FD1290A651D001A3B7C /* jsmn.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = jsmn.h; path = Dependencies/libplist/src/jsmn.h; sourceTree = SOURCE_ROOT; }; 1920B04E2924AC8300744F60 /* Settings.bundle */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.plug-in"; path = Settings.bundle; sourceTree = ""; }; 19B9B7442845E6DF0076EF69 /* SelectTeamViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SelectTeamViewController.swift; sourceTree = ""; }; + 9961EC2D29BE9F2E00AF2C6F /* minimuxer-helpers.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = "minimuxer-helpers.swift"; path = "Dependencies/minimuxer/minimuxer-helpers.swift"; sourceTree = SOURCE_ROOT; }; + 99F87D1629D8E4C900B40039 /* SwiftBridgeCore.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = SwiftBridgeCore.swift; path = Dependencies/minimuxer/SwiftBridgeCore.swift; sourceTree = SOURCE_ROOT; }; + 99F87D1729D8E4C900B40039 /* minimuxer.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = minimuxer.swift; path = Dependencies/minimuxer/minimuxer.swift; sourceTree = SOURCE_ROOT; }; B3146EC6284F580500BBC3FD /* Roxas.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = Roxas.xcodeproj; path = Dependencies/Roxas/Roxas.xcodeproj; sourceTree = ""; }; B33FFBA9295F8F78002259E6 /* preboard.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = preboard.c; path = src/preboard.c; sourceTree = ""; }; B33FFBAB295F8F98002259E6 /* companion_proxy.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = companion_proxy.c; path = src/companion_proxy.c; sourceTree = ""; }; @@ -914,7 +916,6 @@ buildActionMask = 2147483647; files = ( B33FFBA8295F8E98002259E6 /* libfragmentzip.a in Frameworks */, - 191E6087290C7B50001A3B7C /* libminimuxer.a in Frameworks */, 191E5FB4290A5DA0001A3B7C /* libminimuxer.a in Frameworks */, 19104DBC2909C4E500C49C7B /* libEmotionalDamage.a in Frameworks */, 19104D952909BAEA00C49C7B /* libimobiledevice.a in Frameworks */, @@ -945,8 +946,9 @@ 191E5FAC290A5D92001A3B7C /* minimuxer */ = { isa = PBXGroup; children = ( + 9961EC2D29BE9F2E00AF2C6F /* minimuxer-helpers.swift */, + 99F87D1429D8E3F100B40039 /* Generated */, B343F847295F6321002B1159 /* minimuxer.xcodeproj */, - 191E5FAD290A5D92001A3B7C /* minimuxer.swift */, ); path = minimuxer; sourceTree = ""; @@ -968,6 +970,15 @@ path = "libimobiledevice-glue/src"; sourceTree = ""; }; + 99F87D1429D8E3F100B40039 /* Generated */ = { + isa = PBXGroup; + children = ( + 99F87D1629D8E4C900B40039 /* SwiftBridgeCore.swift */, + 99F87D1729D8E4C900B40039 /* minimuxer.swift */, + ); + name = Generated; + sourceTree = ""; + }; B3146EC7284F580500BBC3FD /* Products */ = { isa = PBXGroup; children = ( @@ -1567,7 +1578,6 @@ isa = PBXGroup; children = ( B343F86C295F759E002B1159 /* libresolv.tbd */, - 191E5FB5290A5E1F001A3B7C /* libminimuxer.a */, B39575F4284F29E20080B4FF /* Roxas.framework */, D533E8B62727841800A9B5DD /* libAppleArchive.tbd */, BF580497246A3D19008AE704 /* UIKit.framework */, @@ -1766,13 +1776,6 @@ /* End PBXGroup section */ /* Begin PBXHeadersBuildPhase section */ - 191E5FD4290A6EE0001A3B7C /* Headers */ = { - isa = PBXHeadersBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; BF4587272298D31600BD7491 /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; @@ -1853,7 +1856,6 @@ isa = PBXNativeTarget; buildConfigurationList = 191E5FAF290A5D92001A3B7C /* Build configuration list for PBXNativeTarget "minimuxer" */; buildPhases = ( - 191E5FD4290A6EE0001A3B7C /* Headers */, 191E5FA7290A5D92001A3B7C /* Sources */, 191E5FA8290A5D92001A3B7C /* Frameworks */, ); @@ -1969,6 +1971,7 @@ isa = PBXNativeTarget; buildConfigurationList = BFD2477E2284B9A700981D42 /* Build configuration list for PBXNativeTarget "SideStore" */; buildPhases = ( + 99F87D0629D8B51400B40039 /* ShellScript */, BFD247662284B9A500981D42 /* Sources */, BFD247672284B9A500981D42 /* Frameworks */, BFD247682284B9A500981D42 /* Resources */, @@ -2220,6 +2223,27 @@ }; /* End PBXResourcesBuildPhase section */ +/* Begin PBXShellScriptBuildPhase section */ + 99F87D0629D8B51400B40039 /* ShellScript */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + ); + outputFileListPaths = ( + ); + outputPaths = ( + "./Dependencies/minimuxer/minimuxer-helpers.swift", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "bash ./Dependencies/fetch-prebuilt.sh minimuxer\n"; + }; +/* End PBXShellScriptBuildPhase section */ + /* Begin PBXSourcesBuildPhase section */ 19104DAE2909C06C00C49C7B /* Sources */ = { isa = PBXSourcesBuildPhase; @@ -2233,7 +2257,8 @@ isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - 191E5FAE290A5D92001A3B7C /* minimuxer.swift in Sources */, + 99F87D1929D8E4C900B40039 /* minimuxer.swift in Sources */, + 99F87D1829D8E4C900B40039 /* SwiftBridgeCore.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -2484,6 +2509,7 @@ BFB39B5C252BC10E00D1BE50 /* Managed.swift in Sources */, BF770E5822BC3D0F002A40FE /* RefreshGroup.swift in Sources */, 19B9B7452845E6DF0076EF69 /* SelectTeamViewController.swift in Sources */, + 99F87D0529D8B4E200B40039 /* minimuxer-helpers.swift in Sources */, BF18B0F122E25DF9005C4CF5 /* ToastView.swift in Sources */, BF3D649F22E7B24C00E9056B /* CollapsingTextView.swift in Sources */, BF02419622F2199300129732 /* RefreshAttemptsViewController.swift in Sources */, @@ -2673,7 +2699,7 @@ PRODUCT_NAME = "$(TARGET_NAME)"; SKIP_INSTALL = YES; SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; - SWIFT_OBJC_BRIDGING_HEADER = Dependencies/minimuxer/minimuxer.h; + SWIFT_OBJC_BRIDGING_HEADER = "Dependencies/minimuxer/minimuxer-Bridging-Header.h"; SWIFT_VERSION = 5.0; TARGETED_DEVICE_FAMILY = "1,2"; }; @@ -2695,7 +2721,7 @@ OTHER_LDFLAGS = "-ObjC"; PRODUCT_NAME = "$(TARGET_NAME)"; SKIP_INSTALL = YES; - SWIFT_OBJC_BRIDGING_HEADER = Dependencies/minimuxer/minimuxer.h; + SWIFT_OBJC_BRIDGING_HEADER = "Dependencies/minimuxer/minimuxer-Bridging-Header.h"; SWIFT_VERSION = 5.0; TARGETED_DEVICE_FAMILY = "1,2"; }; diff --git a/AltStore/LaunchViewController.swift b/AltStore/LaunchViewController.swift index 0aaf588e..cece54c2 100644 --- a/AltStore/LaunchViewController.swift +++ b/AltStore/LaunchViewController.swift @@ -14,6 +14,8 @@ import minimuxer import AltStoreCore import UniformTypeIdentifiers +let pairingFileName = "ALTPairingFile.mobiledevicepairing" + final class LaunchViewController: RSTLaunchViewController, UIDocumentPickerDelegate { private var didFinishLaunching = false @@ -125,14 +127,11 @@ final class LaunchViewController: RSTLaunchViewController, UIDocumentPickerDeleg } // Save to a file for next launch - let filename = "ALTPairingFile.mobiledevicepairing" - let fm = FileManager.default - let documentsPath = fm.documentsDirectory.appendingPathComponent("/\(filename)") - try pairing_string?.write(to: documentsPath, atomically: true, encoding: String.Encoding.utf8) + let pairingFile = FileManager.default.documentsDirectory.appendingPathComponent("\(pairingFileName)") + try pairing_string?.write(to: pairingFile, atomically: true, encoding: String.Encoding.utf8) // Start minimuxer now that we have a file start_minimuxer_threads(pairing_string!) - } catch { displayError("Unable to read pairing file") } @@ -148,22 +147,15 @@ final class LaunchViewController: RSTLaunchViewController, UIDocumentPickerDeleg } func start_minimuxer_threads(_ pairing_file: String) { - set_usbmuxd_socket() - #if false // Retries - var res = start_minimuxer(pairing_file: pairing_file) - var attempts = 10 - while (attempts != 0 && res != 0) { - print("start_minimuxer `res` != 0, retry #\(attempts)") - res = start_minimuxer(pairing_file: pairing_file) - attempts -= 1 + target_minimuxer_address() + let documentsDirectory = FileManager.default.documentsDirectory.absoluteString + do { + try start(pairing_file, documentsDirectory) + } catch { + try! FileManager.default.removeItem(at: FileManager.default.documentsDirectory.appendingPathComponent("\(pairingFileName)")) + displayError("minimuxer failed to start, please restart SideStore. \(minimuxerToOperationError(error).failureReason ?? "UNKNOWN ERROR!!!!!! REPORT TO GITHUB ISSUES!")") } - #else - let res = start_minimuxer(pairing_file: pairing_file) - #endif - if res != 0 { - displayError("minimuxer failed to start. Incorrect arguments were passed.") - } - auto_mount_dev_image() + start_auto_mounter(documentsDirectory) } } diff --git a/AltStore/Operations/DeactivateAppOperation.swift b/AltStore/Operations/DeactivateAppOperation.swift index e96d1fee..5742ec87 100644 --- a/AltStore/Operations/DeactivateAppOperation.swift +++ b/AltStore/Operations/DeactivateAppOperation.swift @@ -44,14 +44,9 @@ final class DeactivateAppOperation: ResultOperation for profile in allIdentifiers { do { - let res = try remove_provisioning_profile(id: profile) - if case Uhoh.Bad(let code) = res { - self.finish(.failure(minimuxer_to_operation(code: code))) - } - } catch Uhoh.Bad(let code) { - self.finish(.failure(minimuxer_to_operation(code: code))) + try remove_provisioning_profile(profile) } catch { - self.finish(.failure(ALTServerError(.unknownResponse))) + return self.finish(.failure(minimuxerToOperationError(error))) } } diff --git a/AltStore/Operations/EnableJITOperation.swift b/AltStore/Operations/EnableJITOperation.swift index f89296bf..1848109b 100644 --- a/AltStore/Operations/EnableJITOperation.swift +++ b/AltStore/Operations/EnableJITOperation.swift @@ -45,23 +45,13 @@ final class EnableJITOperation: ResultOperation guard let installedApp = self.context.installedApp else { return self.finish(.failure(OperationError.invalidParameters)) } installedApp.managedObjectContext?.perform { - let v = minimuxer_to_operation(code: 1) - do { - var x = try debug_app(app_id: installedApp.resignedBundleIdentifier) - switch x { - case .Good: - self.finish(.success(())) - case .Bad(let code): - self.finish(.failure(minimuxer_to_operation(code: code))) - } - } catch Uhoh.Bad(let code) { - self.finish(.failure(minimuxer_to_operation(code: code))) + try debug_app(installedApp.resignedBundleIdentifier) } catch { - self.finish(.failure(OperationError.unknown)) + return self.finish(.failure(minimuxerToOperationError(error))) } - + self.finish(.success(())) } } } diff --git a/AltStore/Operations/InstallAppOperation.swift b/AltStore/Operations/InstallAppOperation.swift index f10c1272..c9ef8d50 100644 --- a/AltStore/Operations/InstallAppOperation.swift +++ b/AltStore/Operations/InstallAppOperation.swift @@ -11,6 +11,7 @@ import Network import AltStoreCore import AltSign import Roxas +import minimuxer @objc(InstallAppOperation) final class InstallAppOperation: ResultOperation @@ -148,17 +149,14 @@ final class InstallAppOperation: ResultOperation }) } - let ns_bundle = NSString(string: installedApp.bundleIdentifier) - let ns_bundle_ptr = UnsafeMutablePointer(mutating: ns_bundle.utf8String) - - let res = minimuxer_install_ipa(ns_bundle_ptr) - if res == 0 { - installedApp.refreshedDate = Date() - self.finish(.success(installedApp)) - - } else { - self.finish(.failure(minimuxer_to_operation(code: res))) + do { + try install_ipa(installedApp.bundleIdentifier) + } catch { + return self.finish(.failure(minimuxerToOperationError(error))) } + + installedApp.refreshedDate = Date() + self.finish(.success(installedApp)) } } @@ -174,10 +172,11 @@ final class InstallAppOperation: ResultOperation do { try FileManager.default.removeItem(at: fileURL) + print("Removed refreshed IPA") } catch { - print("Failed to remove refreshed .ipa:", error) + print("Failed to remove refreshed .ipa: \(error)") } } diff --git a/AltStore/Operations/OperationError.swift b/AltStore/Operations/OperationError.swift index 331db175..4e7a86b2 100644 --- a/AltStore/Operations/OperationError.swift +++ b/AltStore/Operations/OperationError.swift @@ -8,6 +8,7 @@ import Foundation import AltSign +import minimuxer enum OperationError: LocalizedError { @@ -42,9 +43,11 @@ enum OperationError: LocalizedError case uninstall case lookupApps case detach + case attach case functionArguments - case profileInstall + case profileManage case noConnection + case invalidPairingFile var failureReason: String? { switch self { @@ -70,9 +73,11 @@ enum OperationError: LocalizedError case .uninstall: return NSLocalizedString("Unable to uninstall the app", comment: "") case .lookupApps: return NSLocalizedString("Unable to fetch apps from the device", comment: "") case .detach: return NSLocalizedString("Unable to detach from the app's process", comment: "") + case .attach: return NSLocalizedString("Unable to attach to the app's process", comment: "") case .functionArguments: return NSLocalizedString("A function was passed invalid arguments", comment: "") - case .profileInstall: return NSLocalizedString("Unable to manage profiles on the device", comment: "") + case .profileManage: return NSLocalizedString("Unable to manage profiles on the device", comment: "") case .noConnection: return NSLocalizedString("Unable to connect to the device, make sure Wireguard is enabled and you're connected to WiFi", comment: "") + case .invalidPairingFile: return NSLocalizedString("Invalid pairing file. Your pairing file either didn't have a UDID, or it wasn't a valid plist. Please use jitterbugpair to generate it", comment: "") } } @@ -118,49 +123,50 @@ enum OperationError: LocalizedError } } -func minimuxer_to_operation(code: Int32) -> OperationError { - switch code { - case 1: +/// crashes if error is not a MinimuxerError +func minimuxerToOperationError(_ error: Error) -> OperationError { + switch error as! MinimuxerError { + case .NoDevice: return OperationError.noDevice - case 2: - return OperationError.createService(name: "debug") - case 3: - return OperationError.createService(name: "instproxy") - case 4: - return OperationError.getFromDevice(name: "installed apps") - case 5: - return OperationError.getFromDevice(name: "path to the app") - case 6: - return OperationError.getFromDevice(name: "bundle path") - case 7: - return OperationError.setArgument(name: "max packet") - case 8: - return OperationError.setArgument(name: "working directory") - case 9: - return OperationError.setArgument(name: "argv") - case 10: - return OperationError.getFromDevice(name: "launch success") - case 11: - return OperationError.detach - case 12: - return OperationError.functionArguments - case 13: - return OperationError.createService(name: "AFC") - case 14: - return OperationError.afc - case 15: - return OperationError.install - case 16: - return OperationError.uninstall - case 17: - return OperationError.createService(name: "misagent") - case 18: - return OperationError.profileInstall - case 19: - return OperationError.profileInstall - case 20: + case .NoConnection: return OperationError.noConnection - default: - return OperationError.unknown + case .PairingFile: + return OperationError.invalidPairingFile + case .CreateDebug: + return OperationError.createService(name: "debug") + case .CreateInstproxy: + return OperationError.createService(name: "instproxy") + case .LookupApps: + return OperationError.getFromDevice(name: "installed apps") + case .FindApp: + return OperationError.getFromDevice(name: "path to the app") + case .BundlePath: + return OperationError.getFromDevice(name: "bundle path") + case .MaxPacket: + return OperationError.setArgument(name: "max packet") + case .WorkingDirectory: + return OperationError.setArgument(name: "working directory") + case .Argv: + return OperationError.setArgument(name: "argv") + case .LaunchSuccess: + return OperationError.getFromDevice(name: "launch success") + case .Detach: + return OperationError.detach + case .Attach: + return OperationError.attach + case .CreateAfc: + return OperationError.createService(name: "AFC") + case .RwAfc: + return OperationError.afc + case .InstallApp: + return OperationError.install + case .UninstallApp: + return OperationError.uninstall + case .CreateMisagent: + return OperationError.createService(name: "misagent") + case .ProfileInstall: + return OperationError.profileManage + case .ProfileRemove: + return OperationError.profileManage } } diff --git a/AltStore/Operations/RefreshAppOperation.swift b/AltStore/Operations/RefreshAppOperation.swift index 084e281c..7747d237 100644 --- a/AltStore/Operations/RefreshAppOperation.swift +++ b/AltStore/Operations/RefreshAppOperation.swift @@ -49,15 +49,12 @@ final class RefreshAppOperation: ResultOperation for p in profiles { do { - let x = try install_provisioning_profile(plist: p.value.data) - if case .Bad(let code) = x { - self.finish(.failure(minimuxer_to_operation(code: code))) - } - } catch Uhoh.Bad(let code) { - self.finish(.failure(minimuxer_to_operation(code: code))) + let bytes = p.value.data.toRustByteSlice() + try install_provisioning_profile(bytes.forRust()) } catch { - self.finish(.failure(OperationError.unknown)) + return self.finish(.failure(minimuxerToOperationError(error))) } + self.progress.completedUnitCount += 1 let predicate = NSPredicate(format: "%K == %@", #keyPath(InstalledApp.bundleIdentifier), app.bundleIdentifier) diff --git a/AltStore/Operations/RemoveAppOperation.swift b/AltStore/Operations/RemoveAppOperation.swift index 6ec3cba4..042828ec 100644 --- a/AltStore/Operations/RemoveAppOperation.swift +++ b/AltStore/Operations/RemoveAppOperation.swift @@ -39,15 +39,11 @@ final class RemoveAppOperation: ResultOperation let resignedBundleIdentifier = installedApp.resignedBundleIdentifier do { - let res = try remove_app(app_id: resignedBundleIdentifier) - if case Uhoh.Bad(let code) = res { - self.finish(.failure(minimuxer_to_operation(code: code))) - } - } catch Uhoh.Bad(let code) { - self.finish(.failure(minimuxer_to_operation(code: code))) + try remove_app(resignedBundleIdentifier) } catch { - self.finish(.failure(ALTServerError(.appDeletionFailed))) + return self.finish(.failure(minimuxerToOperationError(error))) } + DatabaseManager.shared.persistentContainer.performBackgroundTask { (context) in self.progress.completedUnitCount += 1 diff --git a/AltStore/Operations/ResignAppOperation.swift b/AltStore/Operations/ResignAppOperation.swift index 8be28221..a6098e00 100644 --- a/AltStore/Operations/ResignAppOperation.swift +++ b/AltStore/Operations/ResignAppOperation.swift @@ -61,6 +61,7 @@ final class ResignAppOperation: ResultOperation { let destinationURL = InstalledApp.refreshedIPAURL(for: app) try FileManager.default.copyItem(at: resignedURL, to: destinationURL, shouldReplace: true) + print("Successfully resigned app to \(destinationURL.absoluteString)") // Use appBundleURL since we need an app bundle, not .ipa. guard let resignedApplication = ALTApplication(fileURL: appBundleURL) else { throw OperationError.invalidApp } diff --git a/AltStore/Operations/SendAppOperation.swift b/AltStore/Operations/SendAppOperation.swift index fb239ba1..dd366968 100644 --- a/AltStore/Operations/SendAppOperation.swift +++ b/AltStore/Operations/SendAppOperation.swift @@ -9,6 +9,7 @@ import Foundation import Network import AltStoreCore +import minimuxer @objc(SendAppOperation) final class SendAppOperation: ResultOperation<()> @@ -44,24 +45,18 @@ final class SendAppOperation: ResultOperation<()> print("AFC App `fileURL`: \(fileURL.absoluteString)") - let ns_bundle = NSString(string: app.bundleIdentifier) - let ns_bundle_ptr = UnsafeMutablePointer(mutating: ns_bundle.utf8String) - if let data = NSData(contentsOf: fileURL) { - let pls = UnsafeMutablePointer.allocate(capacity: data.length) - for (index, data) in data.enumerated() { - pls[index] = data - } - let res = minimuxer_yeet_app_afc(ns_bundle_ptr, pls, UInt(data.length)) - if res == 0 { - print("minimuxer_yeet_app_afc `res` == \(res)") - self.progress.completedUnitCount += 1 - self.finish(.success(())) - } else { - self.finish(.failure(minimuxer_to_operation(code: res))) + do { + let bytes = Data(data).toRustByteSlice() + try yeet_app_afc(app.bundleIdentifier, bytes.forRust()) + } catch { + return self.finish(.failure(minimuxerToOperationError(error))) } + self.progress.completedUnitCount += 1 + self.finish(.success(())) } else { + print("IPA doesn't exist????") self.finish(.failure(ALTServerError(.underlyingError))) } } diff --git a/Build.xcconfig b/Build.xcconfig index 3c049de8..b0686dea 100644 --- a/Build.xcconfig +++ b/Build.xcconfig @@ -14,11 +14,14 @@ ORG_IDENTIFIER = com.SideStore ORG_PREFIX = $(ORG_IDENTIFIER) PRODUCT_NAME = SideStore -EXTENSION_PREFIX = $(ORG_PREFIX).SideStore //PRODUCT_NAME[configuration=Debug] = Prov Debug PRODUCT_BUNDLE_IDENTIFIER = $(ORG_PREFIX).SideStore -//PRODUCT_BUNDLE_IDENTIFIER[configuration=Debug] = $(ORG_PREFIX).$(PROJECT_NAME:lower)-debug +// add team ID to bundle ID for debug builds since these will most likely be installed via Xcode +// SideStore will expect the team ID to be at the end of the bundle ID, but this doesn't happen when we install via Xcode +// we don't want to do this for release since those builds will most likely be installed via SideServer, which adds the team ID +PRODUCT_BUNDLE_IDENTIFIER[config=Debug] = $(ORG_PREFIX).SideStore.$(DEVELOPMENT_TEAM) -APP_GROUP_IDENTIFIER = $(ORG_PREFIX).SideStore +EXTENSION_PREFIX = $(PRODUCT_BUNDLE_IDENTIFIER) +APP_GROUP_IDENTIFIER = $(PRODUCT_BUNDLE_IDENTIFIER) ICLOUD_CONTAINER_IDENTIFIER = iCloud.$(ORG_PREFIX).$(PROJECT_NAME) diff --git a/Dependencies/fetch-prebuilt.sh b/Dependencies/fetch-prebuilt.sh index 0acbfae3..35760b95 100644 --- a/Dependencies/fetch-prebuilt.sh +++ b/Dependencies/fetch-prebuilt.sh @@ -16,8 +16,8 @@ check_for_update() { LAST_FETCH=`cat .last-prebuilt-fetch-$1 | perl -n -e '/([0-9]*),([^ ]*)$/ && print $1'` LAST_COMMIT=`cat .last-prebuilt-fetch-$1 | perl -n -e '/([0-9]*),([^ ]*)$/ && print $2'` - # fetch if last fetch was over 6 hours ago - if [[ $LAST_FETCH -lt $(expr $(date +%s) - 21600) ]] || [[ "$2" == "force" ]]; then + # fetch if last fetch was over 1 hour ago + if [[ $LAST_FETCH -lt $(expr $(date +%s) - 3600) ]] || [[ "$2" == "force" ]]; then echo "Checking $1 for update" echo LATEST_COMMIT=`curl https://api.github.com/repos/SideStore/$1/releases/latest | perl -n -e '/Commit: https:\\/\\/github\\.com\\/[^\\/]*\\/[^\\/]*\\/commit\\/([^"]*)/ && print $1'` @@ -27,16 +27,30 @@ check_for_update() { if [[ "$LAST_COMMIT" != "$LATEST_COMMIT" ]]; then echo "Found update, downloading binaries" echo - wget -O "$1/lib$1.a" "https://github.com/SideStore/$1/releases/latest/download/lib$1.a" wget -O "$1/lib$1-sim.a" "https://github.com/SideStore/$1/releases/latest/download/lib$1-sim.a" - wget -O "$1/$1.h" "https://github.com/SideStore/$1/releases/latest/download/$1.h" - echo + if [[ "$1" != "minimuxer" ]]; then + wget -O "$1/lib$1.a" "https://github.com/SideStore/$1/releases/latest/download/lib$1.a" + wget -O "$1/$1.h" "https://github.com/SideStore/$1/releases/latest/download/$1.h" + echo + else + wget -O "$1/lib$1-ios.a" "https://github.com/SideStore/$1/releases/latest/download/lib$1-ios.a" + wget -O "$1/generated.zip" "https://github.com/SideStore/$1/releases/latest/download/generated.zip" + echo + echo "Unzipping generated.zip" + cd "$1" + unzip ./generated.zip + mv -v generated/* . + rm generated.zip + rmdir generated/ + cd .. + echo "Done" + fi else echo "Up-to-date" fi echo "$(date +%s),$LATEST_COMMIT" > ".last-prebuilt-fetch-$1" else - echo "It hasn't been 6 hours and force was not specified, skipping update check for $1" + echo "It hasn't been 1 hour and force was not specified, skipping update check for $1" fi } diff --git a/Dependencies/minimuxer.xcodeproj/project.pbxproj b/Dependencies/minimuxer.xcodeproj/project.pbxproj index 062d1729..0eecb844 100644 --- a/Dependencies/minimuxer.xcodeproj/project.pbxproj +++ b/Dependencies/minimuxer.xcodeproj/project.pbxproj @@ -7,6 +7,7 @@ objects = { /* Begin PBXBuildFile section */ + 9961EC2829BE9C2000AF2C6F /* SwiftBridgeCore.h in Sources */ = {isa = PBXBuildFile; fileRef = 9961EC2729BE9C1200AF2C6F /* SwiftBridgeCore.h */; }; 9987603329A454B500818586 /* minimuxer.h in Sources */ = {isa = PBXBuildFile; fileRef = 9987603229A454B500818586 /* minimuxer.h */; }; /* End PBXBuildFile section */ @@ -28,12 +29,22 @@ /* End PBXBuildRule section */ /* Begin PBXFileReference section */ + 9961EC2729BE9C1200AF2C6F /* SwiftBridgeCore.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = SwiftBridgeCore.h; path = minimuxer/SwiftBridgeCore.h; sourceTree = ""; }; 9987603229A454B500818586 /* minimuxer.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = minimuxer.h; path = minimuxer/minimuxer.h; sourceTree = ""; }; ADDEDBA66A6E1 /* libresolv.tbd */ = {isa = PBXFileReference; lastKnownFileType = "sourcecode.text-based-dylib-definition"; name = libresolv.tbd; path = usr/lib/libresolv.tbd; sourceTree = SDKROOT; }; CA609C732349C7AAD9FA67C4 /* libminimuxer_static.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libminimuxer_static.a; sourceTree = BUILT_PRODUCTS_DIR; }; /* End PBXFileReference section */ /* Begin PBXGroup section */ + 99F87D1529D8E41100B40039 /* Generated */ = { + isa = PBXGroup; + children = ( + 9961EC2729BE9C1200AF2C6F /* SwiftBridgeCore.h */, + 9987603229A454B500818586 /* minimuxer.h */, + ); + name = Generated; + sourceTree = ""; + }; ADDEDBA66A6E2 /* Required for static linking */ = { isa = PBXGroup; children = ( @@ -61,7 +72,7 @@ CA6012A875F9D65BC3C892A8 = { isa = PBXGroup; children = ( - 9987603229A454B500818586 /* minimuxer.h */, + 99F87D1529D8E41100B40039 /* Generated */, CA6012A875F922869D176AE5 /* Products */, CA6012A875F998AF0B5890DB /* Frameworks */, ); @@ -74,7 +85,7 @@ isa = PBXNativeTarget; buildConfigurationList = CA600589A243A560B9642892 /* Build configuration list for PBXNativeTarget "minimuxer-staticlib" */; buildPhases = ( - 9987603629A4611D00818586 /* ShellScript */, + 9987603629A4611D00818586 /* Run Script */, CA600F638141A560B9642892 /* Sources */, CA6012A875F9AF6EBB7F357C /* Universal Binary lipo */, ); @@ -121,7 +132,7 @@ /* End PBXProject section */ /* Begin PBXShellScriptBuildPhase section */ - 9987603629A4611D00818586 /* ShellScript */ = { + 9987603629A4611D00818586 /* Run Script */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -130,10 +141,15 @@ ); inputPaths = ( ); + name = "Run Script"; outputFileListPaths = ( ); outputPaths = ( ./minimuxer/minimuxer.h, + ./minimuxer/SwiftBridgeCore.h, + ./minimuxer/minimuxer.swift, + ./minimuxer/SwiftBridgeCore.swift, + "./minimuxer/minimuxer-Bridging-Header.h", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; @@ -166,6 +182,7 @@ isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( + 9961EC2829BE9C2000AF2C6F /* SwiftBridgeCore.h in Sources */, 9987603329A454B500818586 /* minimuxer.h in Sources */, ); runOnlyForDeploymentPostprocessing = 0; @@ -182,7 +199,7 @@ INSTALL_MODE_FLAG = ""; INSTALL_OWNER = ""; LIB_FILE_NAME = ""; - "LIB_FILE_NAME[sdk=iphoneos*]" = libminimuxer; + "LIB_FILE_NAME[sdk=iphoneos*]" = "libminimuxer-ios"; "LIB_FILE_NAME[sdk=iphonesimulator*]" = "libminimuxer-sim"; PRODUCT_NAME = minimuxer_static; SKIP_INSTALL = YES; @@ -199,7 +216,7 @@ INSTALL_MODE_FLAG = ""; INSTALL_OWNER = ""; LIB_FILE_NAME = ""; - "LIB_FILE_NAME[sdk=iphoneos*]" = libminimuxer; + "LIB_FILE_NAME[sdk=iphoneos*]" = "libminimuxer-ios"; "LIB_FILE_NAME[sdk=iphonesimulator*]" = "libminimuxer-sim"; PRODUCT_NAME = minimuxer_static; SKIP_INSTALL = YES; diff --git a/minimuxer/minimuxer.swift b/minimuxer/minimuxer.swift deleted file mode 100644 index fb024f63..00000000 --- a/minimuxer/minimuxer.swift +++ /dev/null @@ -1,111 +0,0 @@ -// -// minimuxer.swift -// minimuxer -// -// Created by Jackson Coxson on 10/27/22. -// - -import Foundation - -public enum Uhoh: Error { - case Good - case Bad(code: Int32) -} - -public func start_minimuxer(pairing_file: String) -> Int32 { - let pf = NSString(string: pairing_file) - let pf_pointer = UnsafeMutablePointer(mutating: pf.utf8String) - let u = NSString(string: getDocumentsDirectory().absoluteString) - let u_ptr = UnsafeMutablePointer(mutating: u.utf8String) - return minimuxer_c_start(pf_pointer, u_ptr) -} - -public func set_usbmuxd_socket() { - target_minimuxer_address() -} - -public func debug_app(app_id: String) throws -> Uhoh { - let ai = NSString(string: app_id) - let ai_pointer = UnsafeMutablePointer(mutating: ai.utf8String) - #if false // Retries - var res = minimuxer_debug_app(ai_pointer) - var attempts = 10 - while (attempts != 0 && res != 0) { - print("(JIT) ATTEMPTS: \(attempts)") - res = minimuxer_debug_app(ai_pointer) - attempts -= 1 - } - #else - let res = minimuxer_debug_app(ai_pointer) - #endif - if res != 0 { - throw Uhoh.Bad(code: res) - } - return Uhoh.Good -} - -public func install_provisioning_profile(plist: Data) throws -> Uhoh { - let pls = String(decoding: plist, as: UTF8.self) - print(pls) - print(plist) - #if false // Retries - var res = minimuxer_install_provisioning_profile(x, UInt32(plist.count)) - var attempts = 10 - while (attempts != 0 && res != 0) { - print("(INSTALL) ATTEMPTS: \(attempts)") - res = minimuxer_install_provisioning_profile(x, UInt32(plist.count)) - attempts -= 1 - } - #else - let x = plist.withUnsafeBytes { buf in UnsafeMutableRawPointer(mutating: buf) } - #endif - let res = minimuxer_install_provisioning_profile(x, UInt32(plist.count)) - if res != 0 { - throw Uhoh.Bad(code: res) - } - return Uhoh.Good -} - -public func remove_provisioning_profile(id: String) throws -> Uhoh { - let id_ns = NSString(string: id) - let id_pointer = UnsafeMutablePointer(mutating: id_ns.utf8String) - #if false // Retries - var res = minimuxer_remove_provisioning_profile(id_pointer) - var attempts = 10 - while (attempts != 0 && res != 0) { - print("(REMOVE PROFILE) ATTEMPTS: \(attempts)") - res = minimuxer_remove_provisioning_profile(id_pointer) - attempts -= 1 - } - #else - let res = minimuxer_remove_provisioning_profile(id_pointer) - #endif - if res != 0 { - throw Uhoh.Bad(code: res) - } - return Uhoh.Good -} - -public func remove_app(app_id: String) throws -> Uhoh { - let ai = NSString(string: app_id) - let ai_pointer = UnsafeMutablePointer(mutating: ai.utf8String) - let res = minimuxer_remove_app(ai_pointer) - if res != 0 { - throw Uhoh.Bad(code: res) - } - return Uhoh.Good -} - -public func auto_mount_dev_image() { - let u = NSString(string: getDocumentsDirectory().absoluteString) - let u_ptr = UnsafeMutablePointer(mutating: u.utf8String) - minimuxer_auto_mount(u_ptr) -} - -func getDocumentsDirectory() -> URL { - // find all possible documents directories for this user - let paths = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask) - - // just send back the first one, which ought to be the only one - return paths[0] -} From 40e1225b875922d8d0dfe0e713434e4150a26e03 Mon Sep 17 00:00:00 2001 From: naturecodevoid <44983869+naturecodevoid@users.noreply.github.com> Date: Sat, 1 Apr 2023 16:09:28 -0700 Subject: [PATCH 37/48] Don't reinstall on first SideStore refresh --- AltStore/Managing Apps/AppManager.swift | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/AltStore/Managing Apps/AppManager.swift b/AltStore/Managing Apps/AppManager.swift index 5bf39ed2..f6fb71ce 100644 --- a/AltStore/Managing Apps/AppManager.swift +++ b/AltStore/Managing Apps/AppManager.swift @@ -874,7 +874,11 @@ private extension AppManager // Check if backup app is installed in place of real app. let uti = UTTypeCopyDeclaration(app.installedBackupAppUTI as CFString)?.takeRetainedValue() as NSDictionary? - if app.certificateSerialNumber != group.context.certificate?.serialNumber || + // for some reason, `app.certificateSerialNumber != group.context.certificate?.serialNumber` is true on first SideStore refresh + // in most cases, the first refresh gets stuck since it is a full reinstall, and to fix it you must exit to home screen + // which finishes it but removes all app data + // so we want to ensure we don't reinstall for SideStore if it's true (it will still reinstall if needsResign is true) + if (app.certificateSerialNumber != group.context.certificate?.serialNumber && app.bundleIdentifier != StoreApp.altstoreAppID) || uti != nil || app.needsResign { From c3ea4940d7f22da854e36836ca4230c580360e8e Mon Sep 17 00:00:00 2001 From: naturecodevoid <44983869+naturecodevoid@users.noreply.github.com> Date: Mon, 27 Mar 2023 18:36:27 -0700 Subject: [PATCH 38/48] Reduce duplicate consts --- Shared/Extensions/Bundle+AltStore.swift | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Shared/Extensions/Bundle+AltStore.swift b/Shared/Extensions/Bundle+AltStore.swift index cd3eff27..6754f5c9 100644 --- a/Shared/Extensions/Bundle+AltStore.swift +++ b/Shared/Extensions/Bundle+AltStore.swift @@ -55,7 +55,7 @@ public extension Bundle public extension Bundle { - static var baseAltStoreAppGroupID = "group.com.SideStore.SideStore" + static var baseAltStoreAppGroupID = "group." + Bundle.Info.appbundleIdentifier var appGroups: [String] { return self.infoDictionary?[Bundle.Info.appGroups] as? [String] ?? [] From b8c3060037b7b79b4094aea3f07ae4ad7a46646b Mon Sep 17 00:00:00 2001 From: naturecodevoid <44983869+naturecodevoid@users.noreply.github.com> Date: Mon, 27 Mar 2023 18:36:39 -0700 Subject: [PATCH 39/48] Log provisioning profile application groups --- AltStore/Operations/FetchProvisioningProfilesOperation.swift | 1 + 1 file changed, 1 insertion(+) diff --git a/AltStore/Operations/FetchProvisioningProfilesOperation.swift b/AltStore/Operations/FetchProvisioningProfilesOperation.swift index 182cedec..74bdeb3b 100644 --- a/AltStore/Operations/FetchProvisioningProfilesOperation.swift +++ b/AltStore/Operations/FetchProvisioningProfilesOperation.swift @@ -397,6 +397,7 @@ extension FetchProvisioningProfilesOperation applicationGroups.append(Bundle.baseAltStoreAppGroupID) } } + print("Application groups: \(applicationGroups)") // Dispatch onto global queue to prevent appGroupsLock deadlock. DispatchQueue.global().async { From b1ed413c4ff94c18bec04173aa7d3947cb3fd7fb Mon Sep 17 00:00:00 2001 From: naturecodevoid <44983869+naturecodevoid@users.noreply.github.com> Date: Sat, 1 Apr 2023 16:15:04 -0700 Subject: [PATCH 40/48] Revert Joelle's fix --- Shared/Extensions/ALTApplication+AltStoreApp.swift | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/Shared/Extensions/ALTApplication+AltStoreApp.swift b/Shared/Extensions/ALTApplication+AltStoreApp.swift index 9a7ee78f..dc983b66 100644 --- a/Shared/Extensions/ALTApplication+AltStoreApp.swift +++ b/Shared/Extensions/ALTApplication+AltStoreApp.swift @@ -11,12 +11,9 @@ import AltSign extension ALTApplication { static let altstoreBundleID = Bundle.Info.appbundleIdentifier - static let altstoreBundleIDOriginal = "AltStore" - static let storeBundleID = "SideStore" - static let widgetID = "Widget" var isAltStoreApp: Bool { - let isAltStoreApp = ( self.bundleIdentifier.contains(ALTApplication.altstoreBundleID) || self.bundleIdentifier.contains(ALTApplication.altstoreBundleIDOriginal) || self.bundleIdentifier.contains(ALTApplication.storeBundleID) ) && !self.bundleIdentifier.contains(ALTApplication.widgetID) + let isAltStoreApp = self.bundleIdentifier.contains(ALTApplication.altstoreBundleID) return isAltStoreApp } } From 2ce639e7508bee0f85ce34cfebb27076d4236939 Mon Sep 17 00:00:00 2001 From: naturecodevoid <44983869+naturecodevoid@users.noreply.github.com> Date: Sat, 1 Apr 2023 20:03:15 -0700 Subject: [PATCH 41/48] Remove app groups that contain AltStore --- .../Operations/FetchProvisioningProfilesOperation.swift | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/AltStore/Operations/FetchProvisioningProfilesOperation.swift b/AltStore/Operations/FetchProvisioningProfilesOperation.swift index 74bdeb3b..1b2de2f2 100644 --- a/AltStore/Operations/FetchProvisioningProfilesOperation.swift +++ b/AltStore/Operations/FetchProvisioningProfilesOperation.swift @@ -382,8 +382,17 @@ extension FetchProvisioningProfilesOperation return completionHandler(.success(appID)) } + print("Application groups before app.isAltStoreApp: \(applicationGroups)") if app.isAltStoreApp { + // Remove app groups that contain AltStore since they can be problematic (cause SideStore to expire early) + for (index, group) in applicationGroups.enumerated() { + if group.contains("AltStore") { + print("Removing application group: \(group)") + applicationGroups.remove(at: index) + } + } + // Potentially updating app groups for this specific AltStore. // Find the (unique) AltStore app group, then replace it // with the correct "base" app group ID. From 20cf54bfcdfe926e2308f9f4e3ccd43d92ac4d31 Mon Sep 17 00:00:00 2001 From: naturecodevoid <44983869+naturecodevoid@users.noreply.github.com> Date: Sun, 2 Apr 2023 07:34:48 -0700 Subject: [PATCH 42/48] [skip ci] Rename and move the first application groups log --- AltStore/Operations/FetchProvisioningProfilesOperation.swift | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/AltStore/Operations/FetchProvisioningProfilesOperation.swift b/AltStore/Operations/FetchProvisioningProfilesOperation.swift index 1b2de2f2..955282f4 100644 --- a/AltStore/Operations/FetchProvisioningProfilesOperation.swift +++ b/AltStore/Operations/FetchProvisioningProfilesOperation.swift @@ -382,9 +382,10 @@ extension FetchProvisioningProfilesOperation return completionHandler(.success(appID)) } - print("Application groups before app.isAltStoreApp: \(applicationGroups)") if app.isAltStoreApp { + print("Application groups before modifying for SideStore: \(applicationGroups)") + // Remove app groups that contain AltStore since they can be problematic (cause SideStore to expire early) for (index, group) in applicationGroups.enumerated() { if group.contains("AltStore") { From 5710cdf19c2fd16c26222b168b178149f811b458 Mon Sep 17 00:00:00 2001 From: naturecodevoid <44983869+naturecodevoid@users.noreply.github.com> Date: Sun, 2 Apr 2023 07:58:38 -0700 Subject: [PATCH 43/48] [skip ci] Fix PR commit suffix --- .github/workflows/pr.yml | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/.github/workflows/pr.yml b/.github/workflows/pr.yml index b91318e5..9b2211fb 100644 --- a/.github/workflows/pr.yml +++ b/.github/workflows/pr.yml @@ -23,7 +23,9 @@ jobs: run: brew install ldid - name: Add PR suffix to version - run: sed -e "/MARKETING_VERSION = .*/s/\$/-pr.${{ github.event.pull_request.number }}+$(git rev-parse --short HEAD)/" -i '' Build.xcconfig + run: sed -e "/MARKETING_VERSION = .*/s/\$/-pr.${{ github.event.pull_request.number }}+$(git rev-parse --short ${COMMIT:-HEAD})/" -i '' Build.xcconfig + env: + COMMIT: ${{ github.event.pull_request.head.sha }} - name: Setup Xcode uses: maxim-lobanov/setup-xcode@v1.4.1 From 9bfda3664748fb00d9e6209700d08cf2678e72af Mon Sep 17 00:00:00 2001 From: naturecodevoid <44983869+naturecodevoid@users.noreply.github.com> Date: Sun, 2 Apr 2023 08:00:11 -0700 Subject: [PATCH 44/48] [skip ci] Log version --- .github/workflows/beta.yml | 11 +++++++---- .github/workflows/nightly.yml | 11 +++++++---- .github/workflows/pr.yml | 7 +++++++ .github/workflows/stable.yml | 11 +++++++---- 4 files changed, 28 insertions(+), 12 deletions(-) diff --git a/.github/workflows/beta.yml b/.github/workflows/beta.yml index 0dec182a..789f866f 100644 --- a/.github/workflows/beta.yml +++ b/.github/workflows/beta.yml @@ -27,6 +27,13 @@ jobs: - name: Change version to tag run: sed -e '/MARKETING_VERSION = .*/s/= .*/= ${{ github.ref_name }}/' -i '' Build.xcconfig + - name: Get version + id: version + run: echo "version=$(grep MARKETING_VERSION Build.xcconfig | sed -e "s/MARKETING_VERSION = //g")" >> $GITHUB_OUTPUT + + - name: Echo version + run: echo "${{ steps.version.outputs.version }}" + - name: Setup Xcode uses: maxim-lobanov/setup-xcode@v1.4.1 with: @@ -53,10 +60,6 @@ jobs: name: SideStore-dSYM path: ./*.dSYM/ - - name: Get version - id: version - run: echo "version=$(grep MARKETING_VERSION Build.xcconfig | sed -e "s/MARKETING_VERSION = //g")" >> $GITHUB_OUTPUT - - name: Get current date id: date run: echo "date=$(date -u +'%c')" >> $GITHUB_OUTPUT diff --git a/.github/workflows/nightly.yml b/.github/workflows/nightly.yml index 42555c0f..c00ce2fb 100644 --- a/.github/workflows/nightly.yml +++ b/.github/workflows/nightly.yml @@ -36,6 +36,13 @@ jobs: - name: Increase nightly build number and set as version run: bash .github/workflows/increase-nightly-build-num.sh + - name: Get version + id: version + run: echo "version=$(grep MARKETING_VERSION Build.xcconfig | sed -e "s/MARKETING_VERSION = //g")" >> $GITHUB_OUTPUT + + - name: Echo version + run: echo "${{ steps.version.outputs.version }}" + - name: Setup Xcode uses: maxim-lobanov/setup-xcode@v1.4.1 with: @@ -62,10 +69,6 @@ jobs: name: SideStore-dSYM path: ./*.dSYM/ - - name: Get version - id: version - run: echo "version=$(grep MARKETING_VERSION Build.xcconfig | sed -e "s/MARKETING_VERSION = //g")" >> $GITHUB_OUTPUT - - name: Get current date id: date run: echo "date=$(date -u +'%c')" >> $GITHUB_OUTPUT diff --git a/.github/workflows/pr.yml b/.github/workflows/pr.yml index 9b2211fb..eccf4b0d 100644 --- a/.github/workflows/pr.yml +++ b/.github/workflows/pr.yml @@ -27,6 +27,13 @@ jobs: env: COMMIT: ${{ github.event.pull_request.head.sha }} + - name: Get version + id: version + run: echo "version=$(grep MARKETING_VERSION Build.xcconfig | sed -e "s/MARKETING_VERSION = //g")" >> $GITHUB_OUTPUT + + - name: Echo version + run: echo "${{ steps.version.outputs.version }}" + - name: Setup Xcode uses: maxim-lobanov/setup-xcode@v1.4.1 with: diff --git a/.github/workflows/stable.yml b/.github/workflows/stable.yml index 7db5cd49..a0d1aeea 100644 --- a/.github/workflows/stable.yml +++ b/.github/workflows/stable.yml @@ -27,6 +27,13 @@ jobs: - name: Change version to tag run: sed -e '/MARKETING_VERSION = .*/s/= .*/= ${{ github.ref_name }}/' -i '' Build.xcconfig + - name: Get version + id: version + run: echo "version=$(grep MARKETING_VERSION Build.xcconfig | sed -e "s/MARKETING_VERSION = //g")" >> $GITHUB_OUTPUT + + - name: Echo version + run: echo "${{ steps.version.outputs.version }}" + - name: Setup Xcode uses: maxim-lobanov/setup-xcode@v1.4.1 with: @@ -53,10 +60,6 @@ jobs: name: SideStore-dSYM path: ./*.dSYM/ - - name: Get version - id: version - run: echo "version=$(grep MARKETING_VERSION Build.xcconfig | sed -e "s/MARKETING_VERSION = //g")" >> $GITHUB_OUTPUT - - name: Get current date id: date run: echo "date=$(date -u +'%c')" >> $GITHUB_OUTPUT From 98ccba53a254c9ab768fab0a62c1d293878fae15 Mon Sep 17 00:00:00 2001 From: naturecodevoid <44983869+naturecodevoid@users.noreply.github.com> Date: Sun, 2 Apr 2023 08:01:57 -0700 Subject: [PATCH 45/48] [skip ci] Add version to artifact name we can't do this for releases because some download URLs might rely on it being named SideStore.ipa Build Info will also have version anyways --- .github/workflows/beta.yml | 2 +- .github/workflows/nightly.yml | 2 +- .github/workflows/pr.yml | 2 +- .github/workflows/stable.yml | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/.github/workflows/beta.yml b/.github/workflows/beta.yml index 789f866f..1973681b 100644 --- a/.github/workflows/beta.yml +++ b/.github/workflows/beta.yml @@ -51,7 +51,7 @@ jobs: - name: Upload SideStore.ipa Artifact uses: actions/upload-artifact@v3.1.0 with: - name: SideStore.ipa + name: SideStore-${{ steps.version.outputs.version }}.ipa path: SideStore.ipa - name: Upload *.dSYM Artifact diff --git a/.github/workflows/nightly.yml b/.github/workflows/nightly.yml index c00ce2fb..96acefed 100644 --- a/.github/workflows/nightly.yml +++ b/.github/workflows/nightly.yml @@ -60,7 +60,7 @@ jobs: - name: Upload SideStore.ipa Artifact uses: actions/upload-artifact@v3.1.0 with: - name: SideStore.ipa + name: SideStore-${{ steps.version.outputs.version }}.ipa path: SideStore.ipa - name: Upload *.dSYM Artifact diff --git a/.github/workflows/pr.yml b/.github/workflows/pr.yml index eccf4b0d..7e3df0eb 100644 --- a/.github/workflows/pr.yml +++ b/.github/workflows/pr.yml @@ -51,7 +51,7 @@ jobs: - name: Upload SideStore.ipa Artifact uses: actions/upload-artifact@v3.1.0 with: - name: SideStore.ipa + name: SideStore-${{ steps.version.outputs.version }}.ipa path: SideStore.ipa - name: Upload *.dSYM Artifact diff --git a/.github/workflows/stable.yml b/.github/workflows/stable.yml index a0d1aeea..06a759ae 100644 --- a/.github/workflows/stable.yml +++ b/.github/workflows/stable.yml @@ -51,7 +51,7 @@ jobs: - name: Upload SideStore.ipa Artifact uses: actions/upload-artifact@v3.1.0 with: - name: SideStore.ipa + name: SideStore-${{ steps.version.outputs.version }}.ipa path: SideStore.ipa - name: Upload *.dSYM Artifact From b2a29ae606c44988393ead4a59c2bd139bc876ae Mon Sep 17 00:00:00 2001 From: naturecodevoid <44983869+naturecodevoid@users.noreply.github.com> Date: Sun, 2 Apr 2023 15:08:48 -0700 Subject: [PATCH 46/48] [skip ci] Include commit SHA in nightly version --- .github/workflows/increase-nightly-build-num.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/increase-nightly-build-num.sh b/.github/workflows/increase-nightly-build-num.sh index 4be78710..4d152d07 100644 --- a/.github/workflows/increase-nightly-build-num.sh +++ b/.github/workflows/increase-nightly-build-num.sh @@ -7,7 +7,7 @@ DATE=`date -u +'%Y.%m.%d'` BUILD_NUM=1 write() { - sed -e "/MARKETING_VERSION = .*/s/$/-nightly.$DATE.$BUILD_NUM/" -i '' Build.xcconfig + sed -e "/MARKETING_VERSION = .*/s/$/-nightly.$DATE.$BUILD_NUM+$(git rev-parse --short HEAD)/" -i '' Build.xcconfig echo "$DATE,$BUILD_NUM" > .nightly-build-num } From f5d82d9ef03635af4b281a2c0db3767414b133a5 Mon Sep 17 00:00:00 2001 From: f1shy-dev <56125930+f1shy-dev@users.noreply.github.com> Date: Thu, 6 Apr 2023 20:23:27 +0100 Subject: [PATCH 47/48] Update tempEnt.plist to change AltStore to SideStore Signed-off-by: f1shy-dev <56125930+f1shy-dev@users.noreply.github.com> --- AltStore/Resources/tempEnt.plist | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/AltStore/Resources/tempEnt.plist b/AltStore/Resources/tempEnt.plist index 2ae02803..ccb84c68 100644 --- a/AltStore/Resources/tempEnt.plist +++ b/AltStore/Resources/tempEnt.plist @@ -12,9 +12,9 @@ A72ZC8AJ5X com.apple.security.application-groups - group.com.SideStore.AltStore + group.com.SideStore.SideStore get-task-allow - \ No newline at end of file + From 6146f1bdaa3720dea2cf856dce46f251f58e149b Mon Sep 17 00:00:00 2001 From: naturecodevoid <44983869+naturecodevoid@users.noreply.github.com> Date: Thu, 6 Apr 2023 12:42:37 -0700 Subject: [PATCH 48/48] Update tempEnt.plist --- AltStore/Resources/tempEnt.plist | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/AltStore/Resources/tempEnt.plist b/AltStore/Resources/tempEnt.plist index ccb84c68..a7b3b7dc 100644 --- a/AltStore/Resources/tempEnt.plist +++ b/AltStore/Resources/tempEnt.plist @@ -3,7 +3,7 @@ application-identifier - A72ZC8AJ5X.com.SideStore.AltStore + A72ZC8AJ5X.com.SideStore.SideStore aps-environment development com.apple.developer.siri