From 3ce65ea427fc2e07c707922c79c9f0cdffca9b55 Mon Sep 17 00:00:00 2001 From: joshrad-dev <62785552+joshrad-dev@users.noreply.github.com> Date: Sat, 16 May 2026 16:11:36 -0500 Subject: [PATCH] Add IPA to makefile with fakesigning --- Makefile | 60 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 60 insertions(+) diff --git a/Makefile b/Makefile index 25aafbf24f..8a5d0a4287 100644 --- a/Makefile +++ b/Makefile @@ -5,11 +5,26 @@ MESON ?= meson NINJA ?= ninja CC ?= clang +XCODEBUILD ?= xcodebuild +LDID ?= ldid RELEASE_BUILD_DIR ?= build-arm64-linux DEBUG_BUILD_DIR ?= build-arm64-linux-debug ROOTFS_DIR ?= $(CURDIR)/alpine-arm64-fakefs DEBIAN_ROOTFS_DIR ?= $(CURDIR)/debian-arm64-fakefs +XCODE_SYMROOT ?= $(CURDIR)/build/xcode +XCODE_OBJROOT ?= $(CURDIR)/build/xcode-obj +IPA_TARGET ?= iSH-ARM64 +IPA_EXTENSION_TARGET ?= iSHFileProvider +IPA_CONFIGURATION ?= Release +IPA_PRODUCT_NAME ?= LinuxKit +IPA_EXTENSION_PRODUCT_NAME ?= iSHFileProvider +IPA_BUNDLE_IDENTIFIER ?= app.ish.iSH +IPA_APP_GROUP_IDENTIFIER ?= group.$(IPA_BUNDLE_IDENTIFIER) +IPA_WORK_DIR ?= $(CURDIR)/build/ipa +IPA_OUTPUT ?= $(CURDIR)/build/$(IPA_PRODUCT_NAME)-unsigned.ipa +IPA_APP ?= $(XCODE_SYMROOT)/$(IPA_CONFIGURATION)-iphoneos/$(IPA_PRODUCT_NAME).app +IPA_EXTENSION ?= $(XCODE_SYMROOT)/$(IPA_CONFIGURATION)-iphoneos/$(IPA_EXTENSION_PRODUCT_NAME).appex DEBIAN_SUITE ?= trixie NODE_VERSION ?= 24.14.1 BUN_VERSION ?= 1.3.13 @@ -25,6 +40,7 @@ help: @echo " make build-arm64-linux Build release Linux host binary" @echo " make build-arm64-linux-debug Build debug Linux host binary" @echo " make build-arm64-linux-all Build release + debug" + @echo " make ipa Build fakesigned iPhoneOS IPA with bundled Alpine rootfs for sideloading" @echo " make test-arm64-runtime-coverage Run staged C/Go/Bun/Node/Python/Lua/Java/Clojure/PyPy/Swift/Rust/Erlang/Zig coverage" @echo " make test-arm64-runtime-coverage-debug" @echo " Run coverage against debug binary" @@ -54,6 +70,50 @@ build-arm64-linux-debug: .PHONY: build-arm64-linux-all build-arm64-linux-all: build-arm64-linux build-arm64-linux-debug +.PHONY: ipa ipa-app ipa-extension +ipa: $(IPA_OUTPUT) + @echo "IPA written to $(IPA_OUTPUT)" + +ipa-app: + $(XCODEBUILD) -project iSH.xcodeproj \ + -target "$(IPA_TARGET)" \ + -configuration "$(IPA_CONFIGURATION)" \ + -sdk iphoneos \ + SYMROOT="$(XCODE_SYMROOT)" \ + OBJROOT="$(XCODE_OBJROOT)" \ + CODE_SIGNING_ALLOWED=NO \ + CODE_SIGNING_REQUIRED=NO \ + CODE_SIGN_IDENTITY= \ + build + +ipa-extension: + $(XCODEBUILD) -project iSH.xcodeproj \ + -target "$(IPA_EXTENSION_TARGET)" \ + -configuration "$(IPA_CONFIGURATION)" \ + -sdk iphoneos \ + SYMROOT="$(XCODE_SYMROOT)" \ + OBJROOT="$(XCODE_OBJROOT)" \ + CODE_SIGNING_ALLOWED=NO \ + CODE_SIGNING_REQUIRED=NO \ + CODE_SIGN_IDENTITY= \ + build + +$(IPA_OUTPUT): ipa-app ipa-extension + @command -v "$(LDID)" >/dev/null || { echo "missing ldid; install it with: brew install ldid-procursus" >&2; exit 1; } + @test -d "$(IPA_APP)" || { echo "missing app bundle: $(IPA_APP)" >&2; exit 1; } + @test -d "$(IPA_EXTENSION)" || { echo "missing app extension: $(IPA_EXTENSION)" >&2; exit 1; } + rm -rf "$(IPA_WORK_DIR)" + mkdir -p "$(IPA_WORK_DIR)/Payload" "$(IPA_WORK_DIR)/entitlements" + cp -R "$(IPA_APP)" "$(IPA_WORK_DIR)/Payload/" + mkdir -p "$(IPA_WORK_DIR)/Payload/$(IPA_PRODUCT_NAME).app/PlugIns" + cp -R "$(IPA_EXTENSION)" "$(IPA_WORK_DIR)/Payload/$(IPA_PRODUCT_NAME).app/PlugIns/" + printf '%s\n' '' '' '' '' 'com.apple.developer.user-fonts' 'app-usage' 'com.apple.security.application-groups' '$(IPA_APP_GROUP_IDENTIFIER)' '' '' > "$(IPA_WORK_DIR)/entitlements/app.plist" + printf '%s\n' '' '' '' '' 'com.apple.security.application-groups' '$(IPA_APP_GROUP_IDENTIFIER)' '' '' > "$(IPA_WORK_DIR)/entitlements/fileprovider.plist" + $(LDID) -S"$(IPA_WORK_DIR)/entitlements/fileprovider.plist" "$(IPA_WORK_DIR)/Payload/$(IPA_PRODUCT_NAME).app/PlugIns/$(IPA_EXTENSION_PRODUCT_NAME).appex/$(IPA_EXTENSION_PRODUCT_NAME)" + $(LDID) -S"$(IPA_WORK_DIR)/entitlements/app.plist" "$(IPA_WORK_DIR)/Payload/$(IPA_PRODUCT_NAME).app/$(IPA_PRODUCT_NAME)" + rm -f "$(IPA_OUTPUT)" + cd "$(IPA_WORK_DIR)" && zip -qry "$(IPA_OUTPUT)" Payload + $(DEBIAN_ROOTFS_DIR): | build-arm64-linux @command -v debootstrap >/dev/null || { echo "missing debootstrap; install it first (sudo apt install debootstrap)" >&2; exit 1; } @set -eu; \