diff --git a/.gitignore b/.gitignore index 4f201677..fea5159c 100644 --- a/.gitignore +++ b/.gitignore @@ -89,3 +89,5 @@ fastlane/test_output iOSInjectionProject/ .DS_Store +.vscode/settings.json +.vscode diff --git a/Makefile b/Makefile new file mode 100644 index 00000000..45f99bd0 --- /dev/null +++ b/Makefile @@ -0,0 +1,83 @@ +# StikJIT Makefile +# By neoarz + +# Path to code signing tool +TARGET_CODESIGN = $(shell which ldid) + +# Build configuration settings +PLATFORM = iphoneos +NAME = StikJIT +SCHEME ?= 'StikJIT' +RELEASE = Release-iphoneos +CONFIGURATION = Release + +# SDK paths for compilation +MACOSX_SYSROOT = $(shell xcrun -sdk macosx --show-sdk-path) +TARGET_SYSROOT = $(shell xcrun -sdk $(PLATFORM) --show-sdk-path) + +# Temporary build directories +APP_TMP = $(TMPDIR)/$(NAME) +STAGE_DIR = $(APP_TMP)/stage +APP_DIR = $(APP_TMP)/Build/Products/$(RELEASE)/$(NAME).app + +# Default target +all: package + +# Main build target - compiles and packages the application +package: + # Clean any previous build artifacts + @rm -rf $(APP_TMP) + + # Build the app with xcodebuild + # Uses parallel jobs to speed up compilation + @set -o pipefail; \ + xcodebuild \ + -jobs $(shell sysctl -n hw.ncpu) \ + -project '$(NAME).xcodeproj' \ + -scheme $(SCHEME) \ + -configuration $(CONFIGURATION) \ + -arch arm64 -sdk $(PLATFORM) \ + -derivedDataPath $(APP_TMP) \ + CODE_SIGNING_ALLOWED=NO \ + DSTROOT=$(APP_TMP)/install \ + ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES=NO \ + ONLY_ACTIVE_ARCH=NO \ + CODE_SIGN_IDENTITY="" \ + CODE_SIGNING_REQUIRED=NO \ + SWIFT_OPTIMIZATION_LEVEL="-Onone" \ + IPHONEOS_DEPLOYMENT_TARGET=17.4 + + # Prepare the directory structure for packaging + @rm -rf Payload + @rm -rf $(STAGE_DIR)/ + @mkdir -p $(STAGE_DIR)/Payload + @mv $(APP_DIR) $(STAGE_DIR)/Payload/$(NAME).app + + # Debug output - show paths for troubleshooting + @echo $(APP_TMP) + @echo $(STAGE_DIR) + + # Remove Apple's code signature so we can use our own + @rm -rf $(STAGE_DIR)/Payload/$(NAME).app/_CodeSignature + + # Set up symbolic link for packaging + @ln -sf $(STAGE_DIR)/Payload Payload + + # Prepare packages directory + @rm -rf packages + @mkdir -p packages + + # Create standard IPA package + # Using max compression level (9) for smaller file size + @zip -r9 packages/$(NAME).ipa Payload + @rm -rf Payload + +# Clean target - removes all temporary files and build artifacts +clean: + @rm -rf $(STAGE_DIR) + @rm -rf packages + @rm -rf out.dmg + @rm -rf $(APP_TMP) + +# Phony target declaration +.PHONY: apple-include diff --git a/README.md b/README.md index 21afbad9..3f8f53be 100644 --- a/README.md +++ b/README.md @@ -42,7 +42,7 @@ - Native UI for managing JIT-enabling. - No data collection—ensuring full privacy. -## Compiling Instructions +## Building Instructions 1. **Clone the repository:** ```sh @@ -50,13 +50,36 @@ cd StikJIT ``` -2. **Open in Xcode:** - Open `StikJIT.xcodeproj` in Xcode. +2. **Build using Makefile:** + ```sh + make package # Build unsigned .ipa + ``` + +3. **Updating:** + ```sh + git pull + make clean # Clean previous build + make package # Rebuild + ``` +> [!WARNING] +> The __Makefile__ build creates an unsigned .ipa in the `packages` directory. While this is useful for quick builds, please use Xcode for development and debugging. When submitting pull requests or reporting issues, ensure you've tested your changes thoroughly using Xcode. + + + +## Contributing +```sh +# Clone the repository +git clone https://github.com/0-Blu/StikJIT.git +cd StikJIT + +# Open in Xcode +open StikJIT.xcodeproj +``` -3. **Build and Run:** - - Connect your iOS device. - - Select your device in Xcode. - - Build and run the project. +Then in Xcode: +- Connect your iOS device +- Select your device in Xcode +- Build and run the project (⌘R) ## License StikJIT is licensed under **AGPL-3.0**. See [`LICENSE`](LICENSE) for details.