From 918b38e16e4eae9d23e491a8110a9464da6fa90b Mon Sep 17 00:00:00 2001 From: gmegidish Date: Wed, 15 Apr 2026 11:02:25 +0200 Subject: [PATCH 1/3] feat: split unsigned IPA into runner and screen streamer Produce two separate IPAs instead of one combined archive: - devicekit-ios-runner.ipa (XCUITest runner for device automation) - devicekit-ios-screenstreamer.ipa (Screen Stream app) iOS can only install one bundle per IPA, so they must be separate. --- .github/workflows/build.yml | 14 +++++++------- Makefile | 17 +++++++++++------ 2 files changed, 18 insertions(+), 13 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 4f78765..41a2594 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -33,12 +33,12 @@ jobs: - name: Build simulator zips (arm64 + x86_64) run: make sim-zip - - name: Upload unsigned IPA artifact + - name: Upload IPA artifacts uses: actions/upload-artifact@v5 if: success() with: - name: devicekit-ios-unsigned-ipa - path: build/export/*-unsigned.ipa + name: devicekit-ios-ipa + path: build/export/*.ipa retention-days: 4 - name: Upload simulator zip artifacts @@ -59,10 +59,10 @@ jobs: attestations: write steps: - - name: Download IPA artifact + - name: Download IPA artifacts uses: actions/download-artifact@v5 with: - name: devicekit-ios-unsigned-ipa + name: devicekit-ios-ipa - name: Download simulator zip artifacts uses: actions/download-artifact@v5 @@ -73,7 +73,7 @@ jobs: uses: actions/attest-build-provenance@v2 with: subject-path: | - *-unsigned.ipa + *.ipa *-Sim-*.zip - name: Upload to GitHub Release @@ -83,5 +83,5 @@ jobs: with: name: Version ${{ github.ref_name }} files: | - *-unsigned.ipa + *.ipa *-Sim-*.zip diff --git a/Makefile b/Makefile index 36509f0..4e18b94 100644 --- a/Makefile +++ b/Makefile @@ -28,7 +28,7 @@ debug: release: @$(MAKE) build CONFIGURATION=Release -# Create unsigned IPA with host app and UITests runner (for later resigning) +# Create unsigned IPAs for real iOS devices (runner + screen streamer) ipa-unsigned: @echo "Building unsigned app and test runner for arm64 iOS devices..." xcodebuild build-for-testing \ @@ -40,14 +40,19 @@ ipa-unsigned: CODE_SIGN_IDENTITY="" \ CODE_SIGNING_REQUIRED=NO \ CODE_SIGNING_ALLOWED=NO | xcbeautify - @echo "Packaging unsigned IPA..." + @scripts/patch-runner.sh "$(BUILD_DIR)/Build/Products/$(CONFIGURATION)-iphoneos" + @echo "Packaging runner IPA..." @mkdir -p $(EXPORT_PATH)/Payload - @cp -r $(BUILD_DIR)/Build/Products/$(CONFIGURATION)-iphoneos/$(SCHEME).app $(EXPORT_PATH)/Payload/ @cp -r "$(BUILD_DIR)/Build/Products/$(CONFIGURATION)-iphoneos/$(SCHEME)UITests-Runner.app" $(EXPORT_PATH)/Payload/ - @scripts/patch-runner.sh "$(BUILD_DIR)/Build/Products/$(CONFIGURATION)-iphoneos" "$(EXPORT_PATH)/Payload" - @cd $(EXPORT_PATH) && zip -r $(SCHEME)-unsigned.ipa Payload + @cd $(EXPORT_PATH) && zip -r $(SCHEME)-runner.ipa Payload + @rm -rf $(EXPORT_PATH)/Payload + @echo "Runner IPA created at: $(EXPORT_PATH)/$(SCHEME)-runner.ipa" + @echo "Packaging screen streamer IPA..." + @mkdir -p $(EXPORT_PATH)/Payload + @cp -r $(BUILD_DIR)/Build/Products/$(CONFIGURATION)-iphoneos/$(SCHEME).app $(EXPORT_PATH)/Payload/ + @cd $(EXPORT_PATH) && zip -r $(SCHEME)-screenstreamer.ipa Payload @rm -rf $(EXPORT_PATH)/Payload - @echo "Unsigned IPA created at: $(EXPORT_PATH)/$(SCHEME)-unsigned.ipa" + @echo "Screen streamer IPA created at: $(EXPORT_PATH)/$(SCHEME)-screenstreamer.ipa" # Build XCUITest runner for iOS Simulator (arm64 — Apple Silicon) sim-zip-arm64: From 975e73cadb0b3cd35901269065dcc9ba2333a3ee Mon Sep 17 00:00:00 2001 From: gmegidish Date: Wed, 15 Apr 2026 11:25:31 +0200 Subject: [PATCH 2/3] feat: produce only XCUITest runner IPA and simulator zips Remove screen streamer app from build artifacts. The broadcast extension will be refactored to a separate repo. --- Makefile | 10 ++-------- 1 file changed, 2 insertions(+), 8 deletions(-) diff --git a/Makefile b/Makefile index 4e18b94..46e0755 100644 --- a/Makefile +++ b/Makefile @@ -28,9 +28,9 @@ debug: release: @$(MAKE) build CONFIGURATION=Release -# Create unsigned IPAs for real iOS devices (runner + screen streamer) +# Create unsigned IPA with XCUITest runner for real iOS devices ipa-unsigned: - @echo "Building unsigned app and test runner for arm64 iOS devices..." + @echo "Building unsigned test runner for arm64 iOS devices..." xcodebuild build-for-testing \ -project $(PROJECT) \ -scheme $(SCHEME) \ @@ -47,12 +47,6 @@ ipa-unsigned: @cd $(EXPORT_PATH) && zip -r $(SCHEME)-runner.ipa Payload @rm -rf $(EXPORT_PATH)/Payload @echo "Runner IPA created at: $(EXPORT_PATH)/$(SCHEME)-runner.ipa" - @echo "Packaging screen streamer IPA..." - @mkdir -p $(EXPORT_PATH)/Payload - @cp -r $(BUILD_DIR)/Build/Products/$(CONFIGURATION)-iphoneos/$(SCHEME).app $(EXPORT_PATH)/Payload/ - @cd $(EXPORT_PATH) && zip -r $(SCHEME)-screenstreamer.ipa Payload - @rm -rf $(EXPORT_PATH)/Payload - @echo "Screen streamer IPA created at: $(EXPORT_PATH)/$(SCHEME)-screenstreamer.ipa" # Build XCUITest runner for iOS Simulator (arm64 — Apple Silicon) sim-zip-arm64: From fcb808c9164917f70455f3cce6e8257f64f4e57f Mon Sep 17 00:00:00 2001 From: gmegidish Date: Wed, 15 Apr 2026 11:26:46 +0200 Subject: [PATCH 3/3] fix: clean stale artifacts before packaging runner IPA --- Makefile | 2 ++ 1 file changed, 2 insertions(+) diff --git a/Makefile b/Makefile index 46e0755..0b44336 100644 --- a/Makefile +++ b/Makefile @@ -42,6 +42,8 @@ ipa-unsigned: CODE_SIGNING_ALLOWED=NO | xcbeautify @scripts/patch-runner.sh "$(BUILD_DIR)/Build/Products/$(CONFIGURATION)-iphoneos" @echo "Packaging runner IPA..." + @rm -rf $(EXPORT_PATH)/Payload + @rm -f $(EXPORT_PATH)/$(SCHEME)-runner.ipa @mkdir -p $(EXPORT_PATH)/Payload @cp -r "$(BUILD_DIR)/Build/Products/$(CONFIGURATION)-iphoneos/$(SCHEME)UITests-Runner.app" $(EXPORT_PATH)/Payload/ @cd $(EXPORT_PATH) && zip -r $(SCHEME)-runner.ipa Payload