diff --git a/.github/workflows/e2e-v2.yml b/.github/workflows/e2e-v2.yml index 59ccc9d2f9..ae5e90deb3 100644 --- a/.github/workflows/e2e-v2.yml +++ b/.github/workflows/e2e-v2.yml @@ -17,7 +17,7 @@ env: SENTRY_AUTH_TOKEN: ${{ secrets.SENTRY_AUTH_TOKEN }} MAESTRO_VERSION: '2.0.10' IOS_DEVICE: 'iPhone 16' - IOS_VERSION: '18.1' + IOS_VERSION: '>=18.0' jobs: ready-to-merge-gate: @@ -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 @@ -61,7 +61,7 @@ jobs: - uses: ./.github/actions/disk-cleanup if: ${{ matrix.platform == 'android' }} - - run: sudo xcode-select -s /Applications/Xcode_16.2.app/Contents/Developer + - run: sudo xcode-select -s /Applications/Xcode_16.4.app/Contents/Developer if: ${{ matrix.platform == 'ios' }} - run: npm i -g corepack @@ -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 @@ -401,6 +401,10 @@ jobs: -timezone US/Pacific script: ./dev-packages/e2e-tests/cli.mjs ${{ matrix.platform }} --test + - name: List available iOS simulators + if: ${{ matrix.platform == 'ios' }} + run: xcrun simctl list devices available + - uses: futureware-tech/simulator-action@dab10d813144ef59b48d401cd95da151222ef8cd # pin@v4 if: ${{ matrix.platform == 'ios' }} with: diff --git a/.github/workflows/native-tests.yml b/.github/workflows/native-tests.yml index 4cc924de9a..a09f68649e 100644 --- a/.github/workflows/native-tests.yml +++ b/.github/workflows/native-tests.yml @@ -8,7 +8,7 @@ on: - release/** pull_request: types: [opened, synchronize, reopened, labeled] - + concurrency: group: ${{ github.workflow }}-${{ github.ref }} cancel-in-progress: ${{ github.ref != 'refs/heads/main' }} @@ -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 e428cfef41..edb577d7de 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 6a9010360d..3ae494a58e 100644 --- a/.github/workflows/sample-application.yml +++ b/.github/workflows/sample-application.yml @@ -20,7 +20,7 @@ env: ANDROID_APP_ARCHIVE_PATH: sentry-react-native-sample.apk.zip REACT_NATIVE_SAMPLE_PATH: samples/react-native IOS_DEVICE: 'iPhone 16' - IOS_VERSION: '18.1' + IOS_VERSION: '>=18.0' ANDROID_API_LEVEL: '30' jobs: @@ -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 6a1db93009..6ac3b1cc0d 100644 --- a/.github/workflows/testflight.yml +++ b/.github/workflows/testflight.yml @@ -14,12 +14,12 @@ 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: - uses: actions/checkout@v6 - - run: sudo xcode-select -s /Applications/Xcode_16.2.app/Contents/Developer + - run: sudo xcode-select -s /Applications/Xcode_16.4.app/Contents/Developer - uses: ruby/setup-ruby@v1 with: working-directory: samples/react-native diff --git a/dev-packages/e2e-tests/maestro/feedback/captureFlow-ios.yml b/dev-packages/e2e-tests/maestro/feedback/captureFlow-ios.yml index 6a3ebe8023..fb0f5f5e8f 100644 --- a/dev-packages/e2e-tests/maestro/feedback/captureFlow-ios.yml +++ b/dev-packages/e2e-tests/maestro/feedback/captureFlow-ios.yml @@ -38,6 +38,9 @@ jsEngine: graaljs id: 'sentry-feedback-take-screenshot-button' - tapOn: id: 'sentry-feedback-take-screenshot-button' +- scrollUntilVisible: + element: + id: 'sentry-feedback-screenshot-button' - tapOn: id: 'sentry-feedback-screenshot-button' 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!'); }