From 1b979904c4c6d3070b1d8e8973e5f1fd7090bc19 Mon Sep 17 00:00:00 2001 From: kirillzyusko Date: Tue, 4 Nov 2025 17:15:24 +0100 Subject: [PATCH 01/11] e2e: add iOS 26 + XCode 26 tests --- .github/workflows/ios-e2e-test.yml | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/.github/workflows/ios-e2e-test.yml b/.github/workflows/ios-e2e-test.yml index e4688abcad..82578c18f9 100644 --- a/.github/workflows/ios-e2e-test.yml +++ b/.github/workflows/ios-e2e-test.yml @@ -23,14 +23,17 @@ on: jobs: build: - name: 🏗️ Build E2E ipa - runs-on: macos-15 + name: 🏗️ Build E2E ipa (Xcode ${{ matrix.config.xcode }}) + runs-on: macos-${{ matrix.config.macos }} timeout-minutes: 60 env: WORKING_DIRECTORY: example concurrency: group: ios-e2e-${{ github.ref }} cancel-in-progress: true + strategy: + matrix: + config: [{ xcode: "16.4", macos: 15 }, { xcode: "26.0", macos: 26 }] steps: - uses: actions/checkout@v4 - uses: actions/setup-node@v4 @@ -39,7 +42,7 @@ jobs: cache: "yarn" - uses: maxim-lobanov/setup-xcode@v1 with: - xcode-version: "16.4" + xcode-version: ${{ matrix.config.xcode }} - name: Get Xcode version run: xcodebuild -version - name: Save yarn cache directory path @@ -90,7 +93,7 @@ jobs: run: yarn build-example:ios - uses: actions/upload-artifact@v4 with: - name: ios-e2e-ipa + name: ios-e2e-ipa-xcode${{ matrix.config.xcode }} path: example/ios/build/Build/Products/Release-iphonesimulator/KeyboardControllerExample.app/** e2e-test: name: ⚙️ Automated test cases (iOS-${{ matrix.devices.ios }}) @@ -110,6 +113,7 @@ jobs: { ios: 17, xcode: "16.4", macos: 15, runtime: "17.5" }, { ios: 18, xcode: "16.4", macos: 15 }, { ios: 26, xcode: "16.4", macos: 26 }, + { ios: 26, xcode: "26.0", macos: 26 }, ] needs: build steps: @@ -117,7 +121,7 @@ jobs: - name: Download a single artifact uses: actions/download-artifact@v4 with: - name: ios-e2e-ipa + name: ios-e2e-ipa-xcode${{ matrix.devices.xcode }} path: example/ios/build/Build/Products/Release-iphonesimulator/KeyboardControllerExample.app/ - uses: maxim-lobanov/setup-xcode@v1 with: From dba1813452cfc5aadc22fa7a4c6cbd6c2075fce6 Mon Sep 17 00:00:00 2001 From: kirillzyusko Date: Tue, 4 Nov 2025 17:17:50 +0100 Subject: [PATCH 02/11] fix: concurrency --- .github/workflows/ios-e2e-test.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/ios-e2e-test.yml b/.github/workflows/ios-e2e-test.yml index 82578c18f9..9df2c8f268 100644 --- a/.github/workflows/ios-e2e-test.yml +++ b/.github/workflows/ios-e2e-test.yml @@ -29,7 +29,7 @@ jobs: env: WORKING_DIRECTORY: example concurrency: - group: ios-e2e-${{ github.ref }} + group: ios-e2e-${{ matrix.config.xcode }}-${{ github.ref }} cancel-in-progress: true strategy: matrix: From 0756594392305faa7bed77eff2368393f9307a0b Mon Sep 17 00:00:00 2001 From: kirillzyusko Date: Tue, 4 Nov 2025 17:19:02 +0100 Subject: [PATCH 03/11] fix: concurrency --- .github/workflows/ios-e2e-test.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/ios-e2e-test.yml b/.github/workflows/ios-e2e-test.yml index 9df2c8f268..9a71abbe2a 100644 --- a/.github/workflows/ios-e2e-test.yml +++ b/.github/workflows/ios-e2e-test.yml @@ -102,7 +102,7 @@ jobs: env: WORKING_DIRECTORY: example concurrency: - group: ios-e2e-${{ matrix.devices.ios }}-${{ github.ref }} + group: ios-e2e-${{ matrix.devices.ios }}-${{ matrix.devices.xcode }}-${{ github.ref }} cancel-in-progress: true strategy: matrix: From d121adb9e38df4babf4287943274e0d2dc817089 Mon Sep 17 00:00:00 2001 From: kirillzyusko Date: Tue, 4 Nov 2025 17:20:02 +0100 Subject: [PATCH 04/11] fix: add xcode to tests job title --- .github/workflows/ios-e2e-test.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/ios-e2e-test.yml b/.github/workflows/ios-e2e-test.yml index 9a71abbe2a..340eebade8 100644 --- a/.github/workflows/ios-e2e-test.yml +++ b/.github/workflows/ios-e2e-test.yml @@ -96,7 +96,7 @@ jobs: name: ios-e2e-ipa-xcode${{ matrix.config.xcode }} path: example/ios/build/Build/Products/Release-iphonesimulator/KeyboardControllerExample.app/** e2e-test: - name: ⚙️ Automated test cases (iOS-${{ matrix.devices.ios }}) + name: ⚙️ Automated test cases (iOS-${{ matrix.devices.ios }}, XCode-${{ matrix.devices.xcode }}) runs-on: macos-${{ matrix.devices.macos }} timeout-minutes: 90 env: From d5a44f018e5fff2d3cd47ade5db50c087730d088 Mon Sep 17 00:00:00 2001 From: kirillzyusko Date: Tue, 4 Nov 2025 18:00:58 +0100 Subject: [PATCH 05/11] fix: use different cache keys (Pods, ccache) --- .github/workflows/ios-e2e-test.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/ios-e2e-test.yml b/.github/workflows/ios-e2e-test.yml index 340eebade8..7e011b07c1 100644 --- a/.github/workflows/ios-e2e-test.yml +++ b/.github/workflows/ios-e2e-test.yml @@ -67,7 +67,7 @@ jobs: uses: hendrikmuhs/ccache-action@v1.2 with: max-size: 1.5G - key: ${{ runner.os }}-ccache-e2e-ios + key: ${{ runner.os }}-xcode-${{ matrix.config.xcode }}-ccache-e2e-ios create-symlink: true - name: Setup ccache behavior run: | @@ -82,9 +82,9 @@ jobs: example/ios/Pods ~/Library/Caches/CocoaPods ~/.cocoapods - key: ${{ runner.os }}-pods-${{ hashFiles('**/Podfile.lock') }} + key: ${{ runner.os }}-xcode-${{ matrix.config.xcode }}-pods-${{ hashFiles('**/Podfile.lock') }} restore-keys: | - ${{ runner.os }}-pods- + ${{ runner.os }}-xcode-${{ matrix.config.xcode }}-pods- - name: Install pods working-directory: ${{ env.WORKING_DIRECTORY }}/ios run: export USE_CCACHE=1 && pod install || pod update --repo-update From 687eabedc77ed66756ccc94efc3483046b1267f7 Mon Sep 17 00:00:00 2001 From: kirillzyusko Date: Wed, 5 Nov 2025 10:21:20 +0100 Subject: [PATCH 06/11] fix: try to use XCode 26.1 --- .github/workflows/ios-e2e-test.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/ios-e2e-test.yml b/.github/workflows/ios-e2e-test.yml index 7e011b07c1..fe00c321f0 100644 --- a/.github/workflows/ios-e2e-test.yml +++ b/.github/workflows/ios-e2e-test.yml @@ -33,7 +33,7 @@ jobs: cancel-in-progress: true strategy: matrix: - config: [{ xcode: "16.4", macos: 15 }, { xcode: "26.0", macos: 26 }] + config: [{ xcode: "16.4", macos: 15 }, { xcode: "26.1", macos: 26 }] steps: - uses: actions/checkout@v4 - uses: actions/setup-node@v4 @@ -113,7 +113,7 @@ jobs: { ios: 17, xcode: "16.4", macos: 15, runtime: "17.5" }, { ios: 18, xcode: "16.4", macos: 15 }, { ios: 26, xcode: "16.4", macos: 26 }, - { ios: 26, xcode: "26.0", macos: 26 }, + { ios: 26, xcode: "26.1", macos: 26 }, ] needs: build steps: From 8b558ff4b1b3cc0e6a915f0a2d7398dc150fde63 Mon Sep 17 00:00:00 2001 From: kirillzyusko Date: Wed, 5 Nov 2025 12:51:45 +0100 Subject: [PATCH 07/11] fix: try to use 26.1.0 XCode --- .github/workflows/ios-e2e-test.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/ios-e2e-test.yml b/.github/workflows/ios-e2e-test.yml index fe00c321f0..cd17b88be3 100644 --- a/.github/workflows/ios-e2e-test.yml +++ b/.github/workflows/ios-e2e-test.yml @@ -33,7 +33,7 @@ jobs: cancel-in-progress: true strategy: matrix: - config: [{ xcode: "16.4", macos: 15 }, { xcode: "26.1", macos: 26 }] + config: [{ xcode: "16.4", macos: 15 }, { xcode: "26.1.0", macos: 26 }] steps: - uses: actions/checkout@v4 - uses: actions/setup-node@v4 @@ -113,7 +113,7 @@ jobs: { ios: 17, xcode: "16.4", macos: 15, runtime: "17.5" }, { ios: 18, xcode: "16.4", macos: 15 }, { ios: 26, xcode: "16.4", macos: 26 }, - { ios: 26, xcode: "26.1", macos: 26 }, + { ios: 26, xcode: "26.1.0", macos: 26 }, ] needs: build steps: From c51d1ac2b6976928c71000d6eaeb2f4d8637e09f Mon Sep 17 00:00:00 2001 From: kirillzyusko Date: Wed, 5 Nov 2025 13:00:28 +0100 Subject: [PATCH 08/11] fix: try to use XCode 26.1-beta instead of 26.1.0 --- .github/workflows/ios-e2e-test.yml | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/.github/workflows/ios-e2e-test.yml b/.github/workflows/ios-e2e-test.yml index cd17b88be3..e24458de09 100644 --- a/.github/workflows/ios-e2e-test.yml +++ b/.github/workflows/ios-e2e-test.yml @@ -33,7 +33,8 @@ jobs: cancel-in-progress: true strategy: matrix: - config: [{ xcode: "16.4", macos: 15 }, { xcode: "26.1.0", macos: 26 }] + config: + [{ xcode: "16.4", macos: 15 }, { xcode: "26.1-beta", macos: 26 }] steps: - uses: actions/checkout@v4 - uses: actions/setup-node@v4 @@ -113,7 +114,7 @@ jobs: { ios: 17, xcode: "16.4", macos: 15, runtime: "17.5" }, { ios: 18, xcode: "16.4", macos: 15 }, { ios: 26, xcode: "16.4", macos: 26 }, - { ios: 26, xcode: "26.1.0", macos: 26 }, + { ios: 26, xcode: "26.1-beta", macos: 26 }, ] needs: build steps: From 2977ef893a820fba72cb1012484a0e7ded873555 Mon Sep 17 00:00:00 2001 From: kirillzyusko Date: Thu, 13 Nov 2025 11:38:30 +0100 Subject: [PATCH 09/11] feat: use official XCode 26.1 --- .github/workflows/ios-e2e-test.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/ios-e2e-test.yml b/.github/workflows/ios-e2e-test.yml index e24458de09..7caa1be0ee 100644 --- a/.github/workflows/ios-e2e-test.yml +++ b/.github/workflows/ios-e2e-test.yml @@ -114,7 +114,7 @@ jobs: { ios: 17, xcode: "16.4", macos: 15, runtime: "17.5" }, { ios: 18, xcode: "16.4", macos: 15 }, { ios: 26, xcode: "16.4", macos: 26 }, - { ios: 26, xcode: "26.1-beta", macos: 26 }, + { ios: 26, xcode: "26.1", macos: 26 }, ] needs: build steps: From 711777cd0f97327f337bb57e887bb857af41147a Mon Sep 17 00:00:00 2001 From: kirillzyusko Date: Thu, 13 Nov 2025 11:40:45 +0100 Subject: [PATCH 10/11] feat: use official XCode 26.1 --- .github/workflows/ios-e2e-test.yml | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/.github/workflows/ios-e2e-test.yml b/.github/workflows/ios-e2e-test.yml index 7caa1be0ee..fe00c321f0 100644 --- a/.github/workflows/ios-e2e-test.yml +++ b/.github/workflows/ios-e2e-test.yml @@ -33,8 +33,7 @@ jobs: cancel-in-progress: true strategy: matrix: - config: - [{ xcode: "16.4", macos: 15 }, { xcode: "26.1-beta", macos: 26 }] + config: [{ xcode: "16.4", macos: 15 }, { xcode: "26.1", macos: 26 }] steps: - uses: actions/checkout@v4 - uses: actions/setup-node@v4 From 11439eb55a0756968f6c1015547822848cefd879 Mon Sep 17 00:00:00 2001 From: kirillzyusko Date: Thu, 13 Nov 2025 12:18:46 +0100 Subject: [PATCH 11/11] fix: update shared cache to boot iOS 26 simulator --- .github/workflows/ios-e2e-test.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.github/workflows/ios-e2e-test.yml b/.github/workflows/ios-e2e-test.yml index fe00c321f0..1a7e09b2ca 100644 --- a/.github/workflows/ios-e2e-test.yml +++ b/.github/workflows/ios-e2e-test.yml @@ -141,6 +141,8 @@ jobs: retry_interval: 60 - name: List all available simulators run: xcrun simctl list + - name: Update shared cache + run: xcrun simctl runtime dyld_shared_cache update --all - name: Install AppleSimulatorUtils run: brew tap wix/brew && brew install applesimutils - name: Save yarn cache directory path