diff --git a/.github/workflows/e2e-v2.yml b/.github/workflows/e2e-v2.yml index 862763a3ed..005660dd99 100644 --- a/.github/workflows/e2e-v2.yml +++ b/.github/workflows/e2e-v2.yml @@ -47,7 +47,7 @@ jobs: platform: ["ios", "android"] include: - platform: ios - runs-on: macos-14 + runs-on: macos-15 name: iOS appPlain: performance-tests/test-app-plain.ipa - platform: android @@ -188,8 +188,8 @@ jobs: include: - platform: ios rn-version: '0.81.0' - xcode-version: '16.2' - runs-on: macos-14 + xcode-version: '16.4' + runs-on: macos-15 - platform: ios rn-version: '0.71.11' xcode-version: '14.2' @@ -319,7 +319,7 @@ jobs: include: - platform: ios rn-version: '0.81.0' - runs-on: macos-14 + runs-on: macos-15 - platform: android runs-on: ubuntu-latest diff --git a/.github/workflows/native-tests.yml b/.github/workflows/native-tests.yml index e096f7de40..c16028312f 100644 --- a/.github/workflows/native-tests.yml +++ b/.github/workflows/native-tests.yml @@ -27,7 +27,7 @@ jobs: test-ios: name: ios - runs-on: macos-14 + runs-on: macos-15 needs: [diff_check] if: ${{ needs.diff_check.outputs.skip_ci != 'true' }} steps: diff --git a/.github/workflows/sample-application-expo.yml b/.github/workflows/sample-application-expo.yml index 9b7c17f94d..d3966c75a1 100644 --- a/.github/workflows/sample-application-expo.yml +++ b/.github/workflows/sample-application-expo.yml @@ -44,8 +44,8 @@ jobs: build-type: ['dev', 'production'] include: - platform: ios - xcode-version: '16.2' - runs-on: macos-14 + xcode-version: '16.4' + runs-on: macos-15 - platform: android runs-on: ubuntu-latest - platform: web diff --git a/.github/workflows/sample-application.yml b/.github/workflows/sample-application.yml index 038876d9bf..df24769281 100644 --- a/.github/workflows/sample-application.yml +++ b/.github/workflows/sample-application.yml @@ -52,8 +52,8 @@ jobs: build-type: ['dev', 'production'] include: - platform: ios - xcode-version: '16.2' - runs-on: macos-14 + xcode-version: '16.4' + runs-on: macos-15 - platform: macos runs-on: macos-15 - platform: android @@ -232,7 +232,7 @@ jobs: matrix: include: - platform: ios - runs-on: macos-14 + runs-on: macos-15 rn-architecture: 'new' ios-use-frameworks: 'no-frameworks' build-type: 'production' diff --git a/.github/workflows/testflight.yml b/.github/workflows/testflight.yml index a0df4cad40..4a5bf03a92 100644 --- a/.github/workflows/testflight.yml +++ b/.github/workflows/testflight.yml @@ -14,7 +14,7 @@ jobs: upload_to_testflight: name: Build and Upload React Native Sample to Testflight - runs-on: macos-14 + runs-on: macos-15 needs: [diff_check] if: ${{ needs.diff_check.outputs.skip_ci != 'true' }} steps: diff --git a/dev-packages/e2e-tests/patch-scripts/rn.patch.podfile.js b/dev-packages/e2e-tests/patch-scripts/rn.patch.podfile.js index db43b54b54..8ab2afa36b 100755 --- a/dev-packages/e2e-tests/patch-scripts/rn.patch.podfile.js +++ b/dev-packages/e2e-tests/patch-scripts/rn.patch.podfile.js @@ -21,13 +21,16 @@ if (enableHermes === null) { throw new Error('Invalid engine'); } +// Optional iOS version argument, defaults to '15.1' due to Cocoa SDK V9 and RN 0.81.0 requirement +const iosVersion = args['ios-version'] || '15.1'; + debug.log('Patching Podfile', args['pod-file']); -const content = fs.readFileSync(args['pod-file'], 'utf8'); +let content = fs.readFileSync(args['pod-file'], 'utf8'); const isHermesEnabled = content.includes(':hermes_enabled => true,'); const shouldPatch = enableHermes !== isHermesEnabled; if (shouldPatch) { - const patched = content.replace( + content = content.replace( /:hermes_enabled.*/, enableHermes ? ':hermes_enabled => true,' : ':hermes_enabled => false,', ); @@ -36,7 +39,34 @@ if (shouldPatch) { } else { debug.log('Patching Podfile for JSC'); } - fs.writeFileSync(args['pod-file'], patched); +} + +// Patch iOS version +const platformPattern = /platform :ios, (min_ios_version_supported|['"][0-9.]+['"])/; +const currentMatch = content.match(platformPattern); + +if (currentMatch) { + const currentValue = currentMatch[1]; + const shouldPatchVersion = currentValue === 'min_ios_version_supported' || + currentValue !== `'${iosVersion}'`; + + if (shouldPatchVersion) { + content = content.replace( + platformPattern, + `platform :ios, '${iosVersion}'` + ); + debug.log(`Patching iOS version to ${iosVersion} (was: ${currentValue})`); + } else { + debug.log(`iOS version already set to ${iosVersion}`); + } +} else { + debug.log('Warning: Could not find platform :ios line to patch'); +} + +// Write the file if any changes were made +if (shouldPatch || currentMatch) { + fs.writeFileSync(args['pod-file'], content); + debug.log('Podfile patched successfully!'); } else { debug.log('Podfile is already patched!'); }